*HDL-GXR 対応 linux カーネルパッチの使い方 [#dc247f21] [[先日の日記>日記/2008-12-09/HDL-GXR 対応 linux カーネルパッチ]]でカーネルパッチを晒したので,使い方をもう少し詳しく説明してみる. ** 用意するもの [#pf75f239] :LANTANK 用シリアル接続ケーブル| 今回は必須です. 挑戦者で SERIAL-KIT として売られていたもの. もしくはその相当品. :ARM コンパイル環境| セルフコンパイルでもクロスコンパイルでも可. :シリアル端末| LANDISK の接続先 :rootfs| とりあえずは http://jr0bak.homelinux.net/~imai/linux/HDL-GXR/install_kit/sda2.tar.gz でいいかな. debian の lenny-armel (EABI) でも動作しております. lenny が正式リリースされたらインストールキットにまとめてみようかと思ってます. :USB-SATA 変換ケーブル| HDD にカーネルと rootfs を書き込むのに使います. :x86 linux マシン| 同上 ** mkimage プログラム [#o8d0b852] u-boot 形式のバイナリを作るプログラムです. u-boot のソースの中にあります. ARM コンパイル環境上でビルドしてパスの通った場所に置いておきましょう. ** カーネルのコンパイル [#v622d98f] + linux-2.6.27.tar.bz2 と patch-2.6.28-rc6.bz2 を kernel.org から入手します. + 先日のパッチを当てます. #ref(日記/2008-12-09/HDL-GXR 対応 linux カーネルパッチ/hdl-gxr.diff) + カーネルをビルドします.linux/.config ファイルをここに上げておくので,設定の参考に. #ref(dot.config) 設定を変更しない場合は $ cd linux-2.6.28-rc6 $ cp どこか/dot.config .config $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make oldconfig $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make uImage でコンパイルできます. CROSS_COMPILE= の部分はクロスコンパイラの名前によって変更してください. この例はクロスコンパイラが arm-linux-gnueabi-gcc の場合です. linux-2.6.28-rc6/arch/arm/boot/uImage が目的のブツです. ** rootfs の作成 [#b4363290] SATA HDD にパーティションを切って sda2.tar.gz を展開します. [[このページ>Linux/embedded/LANDISK/HDL-GXR/debian インストールキット]]と同じ要領でいいでしょう. ** カーネルのコピー [#s99cf9d4] 先ほど作成した uImage を 1 番めのパーティションにコピーします. 名前は何でもいいのですが,説明のためここでは uImage-2.6.28-rc6.gxr としときます. ** HDD を LANDISK に装着 [#i83997f8] T/O ** シリアルの接続 [#f91e78c7] UART0 というシルク(基板上の文字)があるところにシリアルケーブルを接続します. 文字のあるほうが 1 番ピンです. 向きを間違えないように. シリアルの通信パラメータは - 115200 bps - 8 bit - パリティなし - ハードフロー・ソフトフローなし です. ** 電源投入 [#jd3d7ca0] ========================================= HDL-GXR series Initial boot loader ========================================= HDL-GXR series Initial boot loader Copyright (C) 2006 I-O DATA DEVICE,INC. ========================================= ** LOADER ** ** MARVELL BOARD: DB_MV88F5182_HDL_GT LE Copyright (C) 2006 I-O DATA DEVICE,INC. ========================================= ** LOADER ** ** MARVELL BOARD: DB_MV88F5182_HDL_GT LE U-Boot 1.1.1 (Oct 5 2006 - 13:58:33) MV : 1.7.3 (I-O DATA 0.9(GX)) DRAM CS[0] base 0x00000000 size 128MB DRAM Total size 128MB MX AM29LV400B (4 Mbit, bottom boot sect) Size: 512 kB,Bus Width: 2, device Width: 2. Flash base: 0xfff80000,Number of Sectors: 11 Type: BOTTOM. [512kB@fff80000] Flash: 512 kB Addresses 20M - 0M are saved for the U-Boot usage. Mem malloc Initialization (20M - 16M): Done Soc: MV88F5182 Rev 2 CPU: ARM926 (Rev 0) running @ 400Mhz SysClock = 200Mhz , TClock = 166Mhz USB 0: host mode USB 1: host mode PCI 0: PCI Express Root Complex Interface Net: egiga0 [PRIME] Hit any key to stop autoboot: 0 U-Boot 1.1.1 (Oct 5 2006 - 13:58:33) MV : 1.7.3 (I-O DATA 0.9(GX)) DRAM CS[0] base 0x00000000 size 128MB DRAM Total size 128MB MX AM29LV400B (4 Mbit, bottom boot sect) Size: 512 kB,Bus Width: 2, device Width: 2. Flash base: 0xfff80000,Number of Sectors: 11 Type: BOTTOM. [512kB@fff80000] Flash: 512 kB Addresses 20M - 0M are saved for the U-Boot usage. Mem malloc Initialization (20M - 16M): Done Soc: MV88F5182 Rev 2 CPU: ARM926 (Rev 0) running @ 400Mhz SysClock = 200Mhz , TClock = 166Mhz USB 0: host mode USB 1: host mode PCI 0: PCI Express Root Complex Interface Net: egiga0 [PRIME] Hit any key to stop autoboot: 0 HDL-GXR>> 電源を入れるとシリアル端末上にベロベロっとメッセージが出てきます. このままだと自動ブートシーケンスに入ってしまうので,何かキーを押してシーケンスを中止させます. HDL-GXR>> というプロンプトが出てきます. そこで,以下のように入力します. ide reset ← SATA ドライブのリセット ext2load ide 0:1 0x02000000 /uImage-2.6.28-rc6.gxr ← カーネルのロード setenv bootargs console=ttyS0,115200 root=/dev/sda2 ro mem=128M ← カーネルコマンドラインの指定 bootm ← 起動 linux が起動しましたね. ** tips [#ze550672] *** 自動起動するようにする [#gbaed998] 下記のようにすればできるはずですが,未確認です. + 1 番目のパーティションのカーネルの名前を uImage.gxr にします. -- 別の名前にするとブートシーケンスのほうも書き換えないといけないので,面倒です. + カーネルコマンドラインを上記の値に設定します. + u-boot 環境変数を保存します. saveenv + 再起動して,動作を確認してください. *** tftp でのカーネルのロード [#fcd13ce0] u-boot 上で以下のようにすれば tftp 経由でカーネルをロードできます. set ipaddr 192.168.0.200 ← LANDISK の IP アドレス set serverip 192.168.0.1 ← tftp サーバの IP アドレス tftpboot 0x02000000 どこか/uImage-2.6.28-rc6.gxr ← tftp でのカーネルのロード setenv bootargs console=...(略) ← カーネルコマンドライン bootm ← linux の起動