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
저는 장치 드라이버 전문가는 아니지만 개발을 위한 몇 가지 제안 사항은 다음과 같습니다.
- 메모리가 "예약됨"으로 표시되면 운영 체제가 이를 건드릴 수 없습니다. BIOS가 해당 메모리를 운영 체제에서 사용할 수 있다고 표시하도록 하는 방법을 찾거나 낮은 수준의 메모리를 사용해야 합니다.I/W 제어도착하다그것을 통제하다
- 리눅스가 할 수 있다면바라보다메모리가 있는 경우 Linux가 이를 다른 RAM 블록으로 사용하는 것을 방지할 수 있는 쉬운 방법은 없습니다. 이러한 RAM을 "불량"으로 표시한 다음 커널을 수정하여 여전히 해당 메모리를 특별하게 사용할 수 있습니다(커널을 확인하십시오). 이 문서에 대해 변경되었습니다많은지난번 해킹 이후 엄청난 속도로 발전하고 있습니다.)
- 위의 내용이 예비적(결론적이거나 철저하지 않은) 타당성 조사라는 점을 고려하면 램디스크 블록 장치 드라이버를 작성하는 것이 귀하의 경우 가장 현명한 선택이며 아마도 Linux 커널 및/또는 다음을 가진 사람들에게 기여해야 할 것입니다. 이미 이것을 시도했습니다 (아마도 이 질문에 대한 더 좋은 곳은리눅스 커널 메일링 리스트, 아직 게시하지 않은 경우)
기타 관련 소스:
- 현재 램디스크 드라이버
- 블록 드라이버에 대한 다소 오래된(2005) 문서
- Linux 커널 2.6.31용 단순 블록 드라이버(주의 깊은:많은시간이 지남에 따라 변경되었습니다)
답변2
tmpfs
/가 도입 되기 전에는 이미지 로딩을 위해 미리 정의된 고정 크기 블록 장치 initramfs
가 있었는데 , 적어도 초기 구현에서는 이것이 연속적이었다고 가정합니다.ramdisk
initrd
블록 드라이버 자체에는 메모리 주소 매개변수가 없고 크기만 있지만 커널은 (구성을 통해) 사전 정의된 주소에 initrd 이미지를 로드하는 데 사용되므로 살펴보십시오.기본/내부에커널 코드가 도움이 될 수 있습니다(만약메모리 디스크initrd는 더 이상 지원되지 않지만 이후파일 시스템 초기화이미 거기에 있고 수년 동안 한 번도 사용하지 않았습니다.메모리 디스크더이상).
드라이버 소스는드라이버/블록/rd.c, 지금 내가 올바르게 읽었다면 그것은드라이버/블록/brd.c.
그렇지 않으면 다음을 찾으십시오.메모리 디스크흥미로운 구현을 찾았습니다.