Arm Cortex A9를 사용하여 임베디드 장치를 개발 중입니다. 커널 버전은 buildroot 2018.05에 의해 생성된 4.16.0입니다. 저장 메모리는 다중 파티션이 있는 MMC입니다. U-boot는 파티션에서 uImage를 읽고 커널을 시작합니다. 파일 시스템은 커널 이미지에 포함되어 있으며 부팅 시 initramfs에 로드됩니다(구성: BR2_TARGET_ROOTFS_INITRAMFS).
overlayfs를 사용하여 폴더(mmc)를 "사용자" 파일 시스템으로 사용하고 /
.
다음 줄을 추가하여 다음 이름으로 디렉터리를 /etc
성공적 으로 덮어쓰려고 했습니다 ./data/etc
/etc/fstab
/dev/mmcblk0p1 /data auto defaults 1 2
overlay /etc overlay x-systemd.requires=/data,lowerdir=/etc,upperdir=/data/etc,workdir=/data/work/etc 0 0
이것은 작동하지만 systemd가 서비스를 시작한 후에 오버레이가 설치됩니다. 예를 들어 네트워크 구성은 내 파일 시스템이 아닌 uImage user
의 구성입니다. systemd를 시작하기 전, /
설치 직후 오버레이를 설치하고 싶습니다 .
부팅 시 시스템이 RAM에 첫 번째 메모리 공간을 생성한 다음 거기에서 cpio 이미지를 추출한다는 것을 알게 되었습니다. 그런 다음 /
거기에 설치하면 시스템이 첫 번째 프로그램인 systemd:/sbin/init
PID 1을 시작합니다. 내 이해가 맞나요?
많은 기사와 Q&A 사이트를 읽었지만 시작 시 재정의를 수행하려면 어디를 변경해야 하는지 아직도 이해가 되지 않습니다. 이 작업이 포함된 파일은 무엇입니까 mount /
?
답변1
이 부팅 시 작업은 initramfs에 있습니다. 필요에 initramfs/scripts
따라 파일 시스템을 (재)마운트하기 위해 스크립트를 추가한 init-bottom
다음 새 initramfs 패키지를 생성해야 합니다.
init
이 스크립트는 커널 프로세스가 종료될 때 파일 시스템보다 먼저 실행됩니다 init
. 혼란스러운 이유는 설정 코드가 파일 시스템에 직접 위치하지 않고 initramfs 파일에 있기 때문입니다.
답변2
오버레이가 실제로 어디에 있는지 찾아서 파일에 입력해야 합니다.
/etc/fstab
실행 중인 시스템에 입력하는 것과 같습니다.
참고: rootfs를 빌드할 때 buildroot에 수정된 파일 시스템 테이블이 포함되도록 이 파일을 buildroot 오버레이 파일 시스템에 추가해야 합니다.
예를 들어, 재정의하고 싶다고 가정해 보겠습니다./dev/mmc0p0초과하다/집, MYCOMP 및 MYBOARD를 회사 및 보드 이름으로 사용하려면 다음 단계를 수행합니다.
- create a filesystem structure in a seperate directory, as
specified in the buildroot manual chapter 9.1 "Recommended
directory structure", presumably under /tmp/br_ext
- in this directory you add board/MYCOMP/MYBOARD/rottfs_overlay/etc/fstab
and fill it with this information:
보드/MYCOMP/MYBOARD/rottfs_overlay/etc/fstab:
/dev/mmc0p0 /home ext4 defaults 0 1
그런 다음 다음 명령을 사용하여 빌드 루트 트리에 파일 시스템을 빌드할 수 있습니다.
make BR2_EXTERNAL=/tmp/br_ext menuconfig
make
새 파일 시스템을 다시 시작하면 오버레이가 제자리에 있어야 합니다.