커널이 회전하여 초기 파일 시스템을 덮어쓰는 것을 방지하는 방법은 무엇입니까?

커널이 회전하여 초기 파일 시스템을 덮어쓰는 것을 방지하는 방법은 무엇입니까?

커널이 회전하여 초기 파일 시스템을 덮어쓰는 것을 방지하는 방법은 무엇입니까?
커널에 어떤 스위치를 전달합니까?
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에서도 동일합니다.

관련 정보