私のために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に対して上記と同じでした。