QEMU를 사용하여 ARM용 Linux 2.6 커널을 크로스 컴파일하고 부팅하려고 합니다. 나는 기본적으로 다음과 같은 지침을 따랐습니다.모든 튜토리얼이 주제에 대해.
구체적으로:
커널 다운로드 및 컴파일
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- versatile_defconfig $ #Disabled loadable modules and enabled initramfs $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- all
Busybox 컴파일
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- arm $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install
_install
Busybox 디렉토리에서 cpio 아카이브 생성$ cd $BUSYBOX/_install $ find . | cpio -o -Hnewc | gzip > ../initramfs.gz
qemu-system-arm 사용 시작
$ qemu-system-arm -M versatilepb -m 200M -kernel $KERNEL/arch/arm/boot/zImage -initrd $BUSYBOX/initramfs.gz -append "root=/dev/ram0"
결과는 다음과 같습니다.
커널이 파일 시스템을 인식하지 못하는 것 같은데 어떻게 해결해야 할지 모르겠습니다. 이는 기본적으로 각 튜토리얼에서 따라야 할 정확한 단계입니다. 커널 소스 코드에는 "cpiofs"와 같은 것이 활성화되어 있지 않습니다.
답변1
성공!
제안된 대로 해결책은 CONFIG_INITRAMFS_SOURCE를 내 BusyBox의 "_install" 디렉터리로 지정하여 initrd 이미지를 커널에 포함시키는 것이었습니다. 조언을 주신 jc__에게 깊은 감사를 드립니다.
또한 이 작업을 시도하는 다른 사람이라면 Busybox _install 디렉토리에서 다음을 생성해야 한다는 점에 주목할 가치가 있습니다.
- 개발/콘솔
- 개발/루프0
이 기사에서 언급한 바와 같이: https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt