커널이 회전하여 초기 파일 시스템을 덮어쓰는 것을 방지하는 방법은 무엇입니까?
커널에 어떤 스위치를 전달합니까?
initramfs에 코드를 추가해야 합니까?
나는 busybox를 교차 컴파일하여 에 설치했습니다 _install
.
그런 다음 커널 메뉴 구성에서 이 디렉터리(CONFIG_INITRAMFS_SOURCE)를 가리켰습니다.
내 zImage에는 이제 initramfs라는 cpio 파일이 포함되어 있습니다.
부팅( u-boot bootm 0xkernel - 0xdtbBlob
)하면 커널에 오류가 발생하고 "알 수 없는 블록 장치에 rootfs를 마운트할 수 없습니다"라는 메시지가 표시됩니다.
내가 이해한 바로는 커널은 "초기 파일 시스템"을 덮어쓰기 위해 "실제 파일 시스템"을 찾고 있습니다. 제 생각에는 이것이 호출되는 것 같아요'피벗'.
적어도 지금은 초기 파일 시스템을 그대로 유지하고 싶습니다.
내가 만들고 zImage에 포함시킨 initramfs를 사용하고 싶습니다.
지금까지 내가 읽은 모든 내용은
ramdisk(블록 장치)인 것 같습니다. 메모리가 8M 밖에 없어서 사용하고 싶지 않습니다.
실제 파일 시스템. mmc, sd, 네트워크를 사용할 수 없습니다. 모든 파일을 sb 파일로 래핑된 메모리에 로드합니다.
오래된 커널 또는 작업 방식. 커널 4.x와 u-boot 2015.x를 사용하고 있습니다.
하드웨어:
* 임베디드 Freescale imx233
* 8M sdram
* 복구 모드를 통해 0 키 sb 파일을 sdram에 로드합니다.
* mmc, sd, 네트워크 없음
목표:
다음 작업에 필요한 도구만 사용하여 작은 커널 및 파일 시스템을 만듭니다.
* LCD 화면 및 USB 포트와 같은 나머지 하드웨어 작업을 디버깅하고 만듭니다.
* 도착하다플래시 메모리USB에 있는 파일로.
감사해요
답변1
initramfs의 루트에서 이라는 busybox 바이너리에 대한 심볼릭 링크를 만듭니다 init
. 예를 들어, 루트가 디렉터리 _install
이고 busybox 바이너리가 다음 위치에 있는 경우입니다 _install/bin/busybox
.
cd _install
ln -s bin/busybox init
(re-compile and copy kernel)
커널 명령줄이 필요하지 않습니다. 커널은 /init
기본적으로 initramfs에서 실행됩니다*. 다중 호출 라이브러리인 Busybox는 호출하는 유틸리티의 동작을 에뮬레이트합니다. 이는 이제 init
일반적으로 수행하는 작업을 에뮬레이션한다는 의미 inittab
입니다. Busybox 빌드에서 비활성화하지 않으면기본inittab
그것을 컴파일하십시오. 이 기본값은 tty
쉘 액세스를 설정합니다.
*) 실제로 커널의 기본값은 linuxrc
또는 init
이지만 Busybox에서도 동일합니다.