나를 위해 Linux Live CD를 작성하는 몇 가지 스크립트가 있습니다.
나는 이 코어와 함께 사용하기 위해 직접 만든 여러 코어를 가지고 있습니다. 몇 주 전에 커널을 사용하여 이와 같은 Live CD를 만들었고 모든 것이 잘 작동했습니다. 수집된 빌드 파일에서 계속 빌드할 수 있습니다.
완전히 동일한 Live CD를 처음부터 빌드하고 동일한 커널을 수집하려고 하면 부팅에 실패합니다.
몇 주 전의 빌드 디렉토리에 있는 커널과 지금 사용하고 있는 커널을 비교해보니 diff
동일하다고 밝혔습니다.
cmp bzImage kernel/vmlinuz-4.15.18
반품0
> md5sum bzImage kernel/vmlinuz-4.15.18
7add044e080dc32e7810bf803450c95c bzImage
7add044e080dc32e7810bf803450c95c kernel/vmlinuz-4.15.18
stat
다음과 같은 진술이 있습니다.
File: bzImage # works
Size: 7996976 Blocks: 15624 IO Block: 4096 regular file
Device: 811h/2065d Inode: 3714381 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ me) Gid: ( 1000/ me)
Access: 2019-01-08 20:00:48.842172091 +0100
Modify: 2018-12-10 15:43:47.428001000 +0100
Change: 2018-12-10 15:43:47.428001000 +0100
Birth: -
File: kernel/vmlinuz-4.15.18 # doesn't work
Size: 7996976 Blocks: 15432 IO Block: 4096 regular file
Device: 811h/2065d Inode: 538209 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ me) Gid: ( 1000/ me)
Access: 2019-01-08 18:49:41.205420092 +0100
Modify: 2019-01-08 16:12:03.858957307 +0100
Change: 2019-01-08 16:12:03.858957307 +0100
Birth: -
유일하게 눈에 띄는 차이점은 블록 번호인데, 너무 낮아서 작동하지 않는 것 같습니다. 여기서 무슨 일이 일어나고 있는 걸까요?
이 스크립트가 커널에 수행하는 작업의 예:
# create disk and partition
guestfish disk-create image.img raw 1000000 # kb
guestfish -- add image.img : run : part-add /dev/sda primary $BOOT_START_SECTOR $BOOT_END_SECTOR
guestfish -- add image.img : run : mkfs ext4 /dev/sda1 label:l_boot
# copy linux file hierarchy onto partition
guestfish -- add image.img : run : mount /dev/sda1 / : copy-in rootfs/* /
# mount and copy kernel from build dir onto vdi
guestfish -- add image.img : run : mount /dev/sda1 / : mount-local "mnt/" : mount-local-run
# [...]
cp iso/boot/bzImage mnt/vmlinuz # the kernel
# install extlinux on top
guestfish -- add image.img : run : mount /dev/sda1 / : extlinux /
또한 생성된 vdi(빌드 시스템이 아님)에서 복사된 파일을 실행했고 stat
결과 md5sum
는 kernel/vmlinuz에 대해 위와 동일했습니다.