私はU-Bootを使ってCubieboard 2とsun7i AllWinner A20ボードからArchLinux ARMを起動します。私が持っているカーネルバージョンは最新のsun7iバージョンなので、3.4.103-5-ARCH
カーネルに関する限り時代には少し遅れていますが、リポジトリでは最新バージョンです。
私はU-Bootを学んでいますが、それを使用できるかどうかを知りたかったですzImage
。すでに動作しているものがありますuImage
。以下は、どのように動作するかを学ぶ練習です。
その理由の一つは起動ファイルArchLinuxARMにはaで起動するコードが付属していますが、aを使用するinitramfs-linux.img
場合にのみ可能ですzImage
(提供されたコードはaでinitramfsには適合しませんuImage
)。
私はuImageを使ってinitramを起動する方法を尋ねていません。私はその方法を知っています。 zImageとU-Bootの使い方を尋ねています。
私のuImage
タイトルは次のとおりです。
# mkimage -l uImage
Image Name: Linux-3.4.103-5-ARCH
Created: Fri Jan 16 13:34:10 2015
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 3327616 Bytes = 3249.62 kB = 3.17 MB
Load Address: 40008000
Entry Point: 40008000
次のコマンドシーケンスを使用して手動で起動できます。
mmc dev 0
load mmc 0:1 0x48000000 /boot/uImage
load mmc 0:1 0x43000000 /boot/script.bin
setenv bootargs console=${console} root=/dev/sda6 rw rootwait
setenv bootm_boot_mode sec
bootm 0x48000000
次のようにuImageからzImageを抽出します。
$ tail -c+65 < uImage > zImage
確認してみると大丈夫です。
$ file zImage
zImage: Linux kernel ARM boot executable zImage (little-endian)
それでは始めましょう。
mmc dev 0
load mmc 0:1 0x42000000 /boot/zImage
setenv bootargs console=${console} root=/dev/sda6 rw rootwait
bootz 0x42000000
しかし、これはうまくいきません。私が見るのは」
Kernel image @ 0x42000000 [ 0x000000 - 0x32c680 ]
Starting kernel ...
script.bin
私の考えでは、私が以前にロードしたものと関係があると思いますbootm
。以前にロードしようとしましたが、bootz
違いはありませんでした。 FDTファイルも読みましたが、Arch Linixカーネルパッケージはそれを提供していないようです。それでもbootm
必要ではないので、そうしないことを願っていますbootz
(カーネルイメージが同じであると仮定します)。
zimage
私が大丈夫かどうかを確認するためにuImage
新しいものを作成し、うまく起動しました。
上記のコマンドとアドレスから派生しました。起動ファイルArchLinuxARMに付属しています。
私のU-bootバージョンは次のとおりです。
U-Boot 2015.01-1 (Jan 22 2015 - 16:37:34) Arch Linux ARM
gcc (GCC) 4.9.2 20141224 (prerelease)
GNU ld (GNU Binutils) 2.25