不況で倒産寸前のベンチャー企業(?)でプログラマー歴2年になった 新米プログラマーの日記のような雑記です。
welcome 猫並プログラマーの奮闘日記 !
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
category : スポンサー広告 

SH4A(7780)搭載ボードにLinuxを移植する(u-boot-shで起動編)
昨日書くつもりが・・・寝てしまったorz
とりあえず、私がu-boot-shで行った手順は以下です。
1.カーネルイメージ、initramfsイメージをtftpサーバ(192.168.0.7)におきます。
2.u-boot起動
3.bootp 88400000 192.168.0.7:uImageでカーネルをメモリにダウンロード。
4.bootp 88600000 192.168.0.7:ramdiskでinitramfsイメージをカーネルの下くらいにダウンロード
5.bootm 88400000 88600000 でブート
こんな感じ。

手順としては簡単なんだけど、これが全然起動しなかった。
いろいろ調べたところ、カーネルをブートするときにinitramfsのスタートアドレスとかサイズとかのパラメータをカーネルのヘッド部分(empty_zero_pageというらしい)に書き込む必要があるのだが、u-boot-shがそれを行ってないらしい。ソースを見てみるとパラメータ部分をゼロクリアした後にコマンド引数しか書き込まれていなかった。(これに気づくのに4日ほど使ってしまったorz)

そこで以下のようにソースを追加
ソース:lib_sh/bootm.c
関数名:do_bootm_linux

/* Setup parameters */
memset(param, 0, size); /* Clear zero page */


#ifdef CONFIG_SH_RAMDISK
unsigned long *ramdisk_flag=(unsigned long *) (param + 0x04);
unsigned long *orig_root_dev=(unsigned long *) (param + 0x08);
unsigned long *load_type=(unsigned long *) (param + 0x0C);
unsigned long *initrd_start=(unsigned long *)( param + 0x10);
unsigned long *initrd_size=(unsigned long *) (param + 0x1C);
*ramdisk_flag=0x00;
*orig_root_dev=0x00000100;
if(image->rd_start > 0){
*load_type=0x01;
*initrd_start=(0x1FFFFFFF & image->rd_start) - CONFIG_SYS_SDRAM_BASE;
*initrd_size=image->rd_end-image->rd_start;
}
#endif
strcpy(cmdline, bootargs);
まぁ応急処置的な感じ(理解しきれてないので)
追加後、コンパイルして試したところ無事起動できました。

これって報告したほうがいいのかなぁ。
ソースがちょっと古いし、もう追加されてるかもしれない。

個人的にも理解が足りないところもあるので見送っておこうかな。
(追加したコードもスマートじゃないから恥ずかしいし(∩。∩;))

今はinitramfsでシェルを動かそうとしてるのですがなかなか上手くいかないので
また今度。
スポンサーサイト
category : Linux移植  comment : 0  track back : 0

thema:Linux - genre:コンピュータ















 

trackback URL
http://nekohara348.blog99.fc2.com/tb.php/65-2f0cb09a
trackback
プロフィール

猫原

Author:猫原
猫でもわかる程度の能力な新米プログラマーです。

扱える言語:
アセンブラ(intel系,SH系),C/C++,C#,
java,PHP,etc...

趣味
アニメとかゲームとかプログラムとか
ようするにオタク
(特にガンダム大好きです)

最近のマイブームはニコ動でアイマス架空戦記見ること
(千早かわいいよ千早)

フリーエリア
検索フォーム
ブロとも申請フォーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。