rootfs는 내 부트로더가 SDRAM의 주소에 로드하는 squashfs 이미지입니다. 거기에서 rootfs를 마운트할 수 있도록 커널에 어떤 매개변수를 전달해야 합니까? Squashfs 지원이 내장되어 있으며 이미 다음과 함께 작동합니다.
root=/dev/mtdblock2 rootfstype=squashfs
플래시 메모리에서 부팅하는 경우.
편집: 이것은 사용자 정의 부트로더를 사용하는 MIPS 기반 내장 장치입니다. 일반적으로 부트로더는 압축된 커널을 플래시에서 SDRAM으로 추출한 다음 커널이 /dev/mtdblock2를 rootfs로 마운트합니다. 이미지를 RAM에 다운로드하고 플래시에 쓰지 않고도 부팅할 수 있도록 부트로더를 개선하려고 합니다.
Linux에서 파일 시스템 이미지를 RAM에 rootfs로 마운트하도록 하는 방법을 모르겠습니다.
답변1
initramfs를 사용하겠습니다. (http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt)
많은 Linux 배포판은 부팅 프로세스 중에 주로 부팅 프로세스 초기에 사용자 공간 프로그램을 시작할 수 있도록 initramfs(initrd와는 다름)를 사용합니다. 그러나 원하는 대로 사용할 수 있습니다.
initrd에 비해 initramfs의 장점은 initramfs가 tmpfs 파일 시스템을 사용하는 반면 initrd는 램 블록 장치를 사용한다는 것입니다. 여기서 가장 큰 차이점은 initrd를 사용하면 파일 시스템의 모든 공간을 모두 사용할 계획이 없더라도 미리 할당해야 한다는 것입니다. 따라서 파일 시스템 공간을 사용하지 않으면 메모리를 낭비하게 되며, 이는 임베디드 장치에서 부족한 리소스인 경우가 많습니다. Tmpfs는 RAM을 사용하지만 현재 파일 시스템에서 사용하는 RAM 양만 사용하는 파일 시스템입니다. 따라서 tmpfs에서 파일을 삭제하면 메모리가 즉시 해제됩니다.
이제 일반적으로 initramfs는 일시적이며 부팅 프로세스 초기에 일부 프로그램을 실행하는 데만 사용됩니다. 이러한 프로그램이 실행된 후 실제 디스크에서 실행되는 실제 파일 시스템으로 제어가 전송됩니다. 그러나 꼭 그렇게 할 필요는 없습니다. initramfs가 무한정 소진되는 것을 막을 수 있는 방법은 없습니다.
답변2
예rd_start 및 rd_size옵션은 충분합니까?
것 같다ARM 포트에는 initrd 옵션 구문이 있을 수 있습니다.:
root=/dev/ram0 rw initrd=0x87000000,8M
답변3
저는 이 phram
드라이버를 이러한 목적으로 사용합니다. 이는 실제 메모리를 사용하여 MTD 장치를 에뮬레이트합니다. 즉, 나중에 실제 플래시 메모리에 구울 테스트/개발에 정확히 동일한 rootfs 이미지를 사용할 수 있다는 의미입니다. 커널 명령줄에 필요한 마법은 다음과 같습니다.
phram.phram=rootfs,0x100000,9Mi root=/dev/mtdblock0 memmap=9M\$100000
memmap
커널이 자체적으로 메모리를 사용하려고 시도하지 않도록 하려면 매개변수도 필요합니다 . 9MB는 내 rootfs의 크기입니다. 내 부트로더에는 $ 앞에 \가 필요하지만 귀하의 부트로더에는 필요하지 않을 수도 있습니다. 내가 선택한 주소는 귀하의 장치에 실제 메모리가 어떻게 배치되어 있는지 모르기 때문에 임의적이므로 귀하에게 적합한 주소를 선택하십시오. 나는 당신이 이전에 해당 주소에서 rootfs를 로드하기 위해 tftp나 다른 것을 사용했다고 가정합니다.
- https://cateee.net/lkddb/web-lkddb/MTD_PHRAM.html 커널 구성 옵션에 대한 설명
- https://ww.telent.net/2018/1/2/gehen_sie_bitte_mit_hier_ist_nix_zu_sehen 제가 이 작업을 수행한 방법에 대한 자세한 내용은내 거장비