2013年5月18日土曜日

u-bootからkernelにパラメータの渡し方


いろんなやり方があるようだが、今使っているam335x用のarmの場合。
かつ、u-bootのコンパイル時に以下を定義した場合。

#define CONFIG_CMDLINE_TAG
#define CONFIG_SETUP_MEMORY_TAGS
#define CONFIG_INITRD_TAG



参考
http://www.simtec.co.uk/products/SWLINUX/files/booting_article.html

パラメータの種類ごとにTAGがある。一覧


u-bootのbootmコマンドでinitramfsを指定した場合、ATAG_INITRD2タグ(値0x54420005)を使ってイメージのアドレスとサイズをkernelに渡す。

カーネルコマンドラインのbootargsも同様に、ATAG_CM_LINEタグ(値0x54410009)を使う。


これらの情報は物理メモリの開始アドレス+0x100に置かれるのが一般的のよう。
board/ti/am335x/board.cのboard_init()内で
gd->bd->bi_boot_params = PHYS_DRAM_1 + 0x100;
とあるのがそれ。


ただし、R2レジスタに入れるのが筋のようだ。
arch/arm/lib/bootm.cのboot_jump_linux()内で
r2 = gd->bd->bi_boot_params;
とある。


ATAGを使う以外にFDT(Flat Device Tree)を使うパターンもあるみたいだが
※Device Tree Blob (dtb)?
こちらの方がパラメータの種類も豊富みたいだがフォーマットがいまいちわからない

参照
https://export.writer.zoho.com/public/rreginelli/Working-with-Device-Trees1/fullpage

0 件のコメント:

コメントを投稿