고정 RAM 메모리 영역을 블록 장치로 예약합니다(주어진 시작 물리적 주소 사용).

고정 RAM 메모리 영역을 블록 장치로 예약합니다(주어진 시작 물리적 주소 사용).

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

이는 시스템에서 사용 가능한 비휘발성 RAM을 사용해야 하기 때문입니다. 사용 가능한 RAM은 6GB이고 비휘발성 RAM은 8GB입니다. /proc/iomem의 출력은 다음을 제공합니다.

100000000-17fffffff: 시스템 메모리

180000000-37fffffff : 예약됨

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

답변1

저는 장치 드라이버 전문가는 아니지만 개발을 위한 몇 가지 제안 사항은 다음과 같습니다.

  1. 메모리가 "예약됨"으로 표시되면 운영 체제가 이를 건드릴 수 없습니다. BIOS가 해당 메모리를 운영 체제에서 사용할 수 있다고 표시하도록 하는 방법을 찾거나 낮은 수준의 메모리를 사용해야 합니다.I/W 제어도착하다그것을 통제하다
  2. 리눅스가 할 수 있다면바라보다메모리가 있는 경우 Linux가 이를 다른 RAM 블록으로 사용하는 것을 방지할 수 있는 쉬운 방법은 없습니다. 이러한 RAM을 "불량"으로 표시한 다음 커널을 수정하여 여전히 해당 메모리를 특별하게 사용할 수 있습니다(커널을 확인하십시오). 이 문서에 대해 변경되었습니다많은지난번 해킹 이후 엄청난 속도로 발전하고 있습니다.)
  3. 위의 내용이 예비적(결론적이거나 철저하지 않은) 타당성 조사라는 점을 고려하면 램디스크 블록 장치 드라이버를 작성하는 것이 귀하의 경우 가장 현명한 선택이며 아마도 Linux 커널 및/또는 다음을 가진 사람들에게 기여해야 할 것입니다. 이미 이것을 시도했습니다 (아마도 이 질문에 대한 더 좋은 곳은리눅스 커널 메일링 리스트, 아직 게시하지 않은 경우)

기타 관련 소스:

답변2

tmpfs/가 도입 되기 전에는 이미지 로딩을 위해 미리 정의된 고정 크기 블록 장치 initramfs가 있었는데 , 적어도 초기 구현에서는 이것이 연속적이었다고 가정합니다.ramdiskinitrd

블록 드라이버 자체에는 메모리 주소 매개변수가 없고 크기만 있지만 커널은 (구성을 통해) 사전 정의된 주소에 initrd 이미지를 로드하는 데 사용되므로 살펴보십시오.기본/내부에커널 코드가 도움이 될 수 있습니다(만약메모리 디스크initrd는 더 이상 지원되지 않지만 이후파일 시스템 초기화이미 거기에 있고 수년 동안 한 번도 사용하지 않았습니다.메모리 디스크더이상).

드라이버 소스는드라이버/블록/rd.c, 지금 내가 올바르게 읽었다면 그것은드라이버/블록/brd.c.

그렇지 않으면 다음을 찾으십시오.메모리 디스크흥미로운 구현을 찾았습니다.

RAM의 디스크 - 블록 드라이버 사용

관련 정보