2013年5月18日土曜日

u-bootからLinux+initramfsの起動

前回書いたようにinitramfsイメージを作成し、さらにu-boot用イメージにすると便利だと気づいたメモ。

initramfsイメージの作成

> gen_initramfs_list.sh -u squash -g squash rootfsdir > list
> gen_init_cpio list | gzip > rootfs.cpio.gz

u-bootイメージの作成
> mkimage -A arm -O linux -T ramdisk -C none -a 0x82000000 -n "Linux userland" -d rootfs.cpio.gz rootfs.cpio.gz.ub


ここで作成したrootfs.cpio.gz.ubをSPIフラッシュに書き込んどいて、u-bootで読み出す例。

#SPIフラッシュの準備
> sf probe 0
#SPIフラッシュのoffset=0x400000,length=0x400000のkernelイメージをメモリ0x88000000番地に
> sf read 0x88000000 0x400000 0x400000
#SPIフラッシュのoffset=0x800000,length=0x400000のrootfs.cpio.gz.ubをメモリ0x89000000番地に
> sf read 0x89000000 0x800000 0x400000
#上で読み込んだu-bootイメージをそれぞれ展開してkernelを起動する
> bootm 0x88000000 0x89000000


bootmコマンドに2つ目の引数があるとは知らなかった。

initramfsについては、mkimageで作成時「-a 0x82000000」と指定しているので、bootmは0x89000000のイメージを0x82000000に展開する。

以前のやりかたではbootargsに「initrd=0x83000000,0x3c112233」のように指定しなければならなかったが、bootmを使えばパラメータは自動的にkernelに渡してくれる。


0 件のコメント:

コメントを投稿