私は「組み込みLinuxプログラミングマスター - 第2版」という本を読んでおり、RAMディスクがインストールされているLinuxカーネルを起動しようとしています。
U-boot 2020.01が動作し、Linuxカーネルイメージを作成しました。私はbusyboxとそれに必要なライブラリをsoファイルとして手動で追加するファイルシステムを自分のコンピュータに作成しました。これは私のファイルシステム内のツリーの要約コピーです。
├── bin
│ ├── arch -> busybox
...
│ ├── busybox
│ ├── cat -> busybox
...
├── dev
├── etc
├── home
├── lib
│ ├── ld-2.30.so
│ ├── ld-linux-armhf.so.3 -> ld-2.30.so
│ ├── libc-2.30.so
│ ├── libc.so.6 -> libc-2.30.so
│ ├── libm-2.30.so
│ ├── libm.so.6 -> libm-2.30.so
│ ├── libresolv-2.30.so
│ └── libresolv.so.2 -> libresolv-2.30.so
├── linuxrc -> bin/busybox
├── proc
├── sbin
│ ├── acpid -> ../bin/busybox
...
├── sys
├── tmp
├── usr
│ ├── bin
│ │ ├── [ -> ../../bin/busybox
...
│ ├── lib
│ └── sbin
│ ├── addgroup -> ../../bin/busybox
...
└── var
└── log
次のコードスニペットに従ってRAMディスクイメージを作成しました。
cd ~/rootfs
find . | cpio -H newc -ov --owner root:root > ../initramfs.cpio
cd ..
gzip initramfs.cpio
mkimage -A arm -O linux -T ramdisk -d initramfs.cpio.gz uRamdisk
必要なすべてのファイルをSDカードとBeaglebone blackのu-bootに入れて、次のように起動しようとしました。
fatload mmc 0:1 0x80200000 zImage
fatload mmc 0:1 0x80f00000 am335x-boneblack.dtb
fatload mmc 0:1 0x81000000 uRamdisk
setenv bootargs console=ttyO0,115200 rdinit=/bin/sh
bootz 0x80200000 0x81000000 0x80f00000
問題は、bootzの後に私のRAMディスクイメージが間違っていると文句を言うことです。
=> fatload mmc 0:1 0x80200000 zImage
7109016 bytes read in 464 ms (14.6 MiB/s)
=> fatload mmc 0:1 0x80f00000 am335x-boneblack.dtb
34220 bytes read in 5 ms (6.5 MiB/s)
=> fatload mmc 0:1 0x81000000 uRamdisk
2828897 bytes read in 185 ms (14.6 MiB/s)
=> setenv bootargs console=ttyO0,115200 rdinit=/bin/sh
=> bootz 0x80200000 0x81000000 0x80f00000
Wrong Ramdisk Image Format
Ramdisk image is corrupt or invalid
組み込みデバイスでLinuxを使用し始めたときに、この問題を解決する方法を知りませんでした。原因を調べたところ、ファイルシステムイメージ生成エラーでした。私は成功せずにmkimageを使ってみました-c none
。 Ubuntuにインストールできるmkimageの代わりにu-bootコピーとしてmkimageを使用してみました(sudo apt-get install u-boot-toolsを使用)。
mkimage を呼び出す前の initramfs.cpio.gz は次のようになります。
私のファイルシステムにいくつかのフォルダ/ファイルがありませんか?私のコンピュータにはext4がありますが、ブートパーティションにはfat32が使用されます。問題ありますか?別のmkimageツールセットを使用する必要がありますか?何が問題なのでしょうか?
答え1
簡単な答え
CONFIG_LEGACY_IMAGE_FORMAT
U-Bootで有効にする必要があります。
- u-bootソースコードディレクトリを入力してください。
- タイプ:
$ make menuconfig
- 存在するブートイメージ - >古いイメージフォーマットのサポートを有効にする
- 終了して保存し、U-Bootを再構築してください。
これでuRamdiskを読み込むことができます:-)
より長い答え
この本は、U-Boot v2017.01およびam335x_boneblack_defconfig設定を使用して書かれています。 U-Boot v2020.01バージョンにはこの設定ファイルはありません。代わりにam335x_boneblack_vboot_defconfigがありますが、うまくいきますがフォーマットをサポートしていませんmkimage
。
この本の著者として、私は将来のすべてのソフトウェアバージョンに適用するための詳細な指示を書くのが難しいと言うことができます。しかし、私は努力した。
答え2
以前はRAMディスクを作ったことがmkimage -A arm64 -T ramdisk -d busybox-1.32.1/initramfs.cpio.gz initrd.img
あります。