고정 RAM 메모리 영역을 지정된 시작 물리적 주소로 블록 장치로 예약


11

RAM 디스크에 대해 많은 질문이 있었고 램을 블록 장치로 사용할 수있는 ramfs 및 tmpfs에 대해 알고 있습니다. 그러나 제 관심은 고정 메모리 주소 범위를 블록 장치로 사용하는 것입니다.

이것은 내 시스템에서 사용 가능한 비 휘발성 RAM을 사용해야 할 때 발생합니다. 6GB의 RAM을 사용할 수 있고 8GB의 비 휘발성 RAM이 있습니다. / proc / iomem의 출력 결과는 다음과 같습니다.

100000000-17fffffff : 시스템 RAM

180000000-37fffffff : 예약 됨

여기서 6GB에서 14GB까지의 영역은 비 휘발성 RAM 영역에 해당하며 E820 BIOS 메모리 맵에 의해 예약 된 것으로 표시됩니다. 저의 주요 목적은이 NVRAM을 리눅스에서 블록 장치로 사용하는 것입니다. NVRAM 시스템을 테스트하는 데 유용합니다. 이 영역을 블록 장치로 사용하도록 허용하는 Linux 명령이 이미 있습니까? 아니면 동일한 커널 장치 드라이버를 작성하여이를 용이하게해야합니까?


2
그냥 궁금해서 왜 이러고 싶니?
mtak

Linux에서 비 휘발성 RAM을 위해 설계된 파일 시스템을 쉽게 테스트 할 수있는 방법을 제공합니다.
qstack

답변:


2

장치 드라이버 전문가는 아니지만 R & D에 대한 몇 가지 지침은 다음과 같습니다.

  1. 메모리가 "예약 됨"으로 표시되어 있으면 OS가 해당 메모리를 건드릴 수 없습니다. BIOS에서 OS에 사용 가능한 것으로 표시하거나 직접 저수준 ioctl을 사용 하여 제어 할 수있는 방법을 찾아야 합니다.
  2. 만약 리눅스가 메모리를 수 있다면, 리눅스가 다른 RAM 블록으로 리눅스를 사용하는 것을 막을 수있는 쉬운 방법이 없을 것입니다. 이러한 RAM을 "나쁜"으로 표시 한 다음 커널을 수정하여 여전히 특별한 용도로 사용하려고 시도 할 수 있습니다 (커널 설명서를 확인하십시오. 이것은 마지막으로 해킹 한 이후 로 많이 변경 되어 발전하고 있습니다) 빠른 속도로)
  3. 위의 내용을 예비 및 비정의 또는 철저한 타당성 조사로 고려할 때 램 디스크 블록 장치 드라이버를 작성하는 것이 가장 현명한 옵션이라고 말하고 Linux 커널에 다시 기여하거나 팀과 협력해야합니다. 이미이 작업을 시도한 사람들 (아마도이 ​​질문에 대한 더 좋은 장소는 Linux Kernel Mailing list입니다 . 아직 게시하지 않은 경우)

다른 관련 소스 :


1

의 도입 전에 tmpfs/ initramfs가 된 ramdisk부하에 사용되는 initrd이미지, 미리 정의 된 고정 된 크기의 블록 장치를, 나는 적어도 이전의 구현에 인접 생각합니다.

블록 드라이버 자체에는 메모리 주소에 대한 매개 변수가 없으며 크기 만 있지만 커널은 기본 설정 / 초기화 커널 코드를 들여다 볼 수 있도록 미리 정의 된 주소 (config)에 의해 initrd 이미지를로드하는 데 사용되었습니다. 램 디스크 가 더 이상 initrd를 지원하지 않으면 놀라지 만 initramfs 는 수년이 지나서 더 이상 램 디스크를 사용하지 않았습니다 .

드라이버 소스는 drivers / block / rd.c 이며, 올바르게 보면 drivers / block / brd.c 입니다.

그렇지 않으면 램 디스크를 찾고 흥미로운 구현을 찾았습니다.

Disk on RAM — 블록 드라이버로 재생

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.