スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
webadm | 投稿日時: 2006-1-21 4:54 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3107 |
玄箱でuClinux-H8をビルドする 前回の玄箱上でのuClinux-H8用のクロスコンパイルツールチェインの作り方の説明に続きいよいよuClinux-H8のビルド方法について説明します。
一応h8300-linux-elfのクロス開発環境があればuClinuxのディストリビューションをとってきてビルドするだけなのですが、事前に以下のことをやらないと必ずはまります。 ・ncursesをビルド&インストールしておく uClinuxをビルドするにはvendorとproductをAkizuki/AE3068を選択してコンフィグレーションする必要がありますが、make configでやってもできますが、一般的なメニュー形式設定のmake menuconfigを使うにはあらかじめホストにncursesライブラリがインストールされている必要があります。 ncurses-5.5をとってきて tar xzf ncurses-5.5.tar.gz でどっかに展開し cd ncurses-5.5 ./configure make make install とやってビルド&インストールするだけです。 次にuClinux.orgのhttp downloadページから最新のuClinux-distのtarボールをとってきて展開します(今の時点だと、uClinux-dist-20051110.tar.gzの安定版とuClinux-dist-test-20051209.tar.gzのいずれか) tar xzf uClinux-dist-test-20051209.tar.gz 実はuClinux-H8の最近のメーリングリストを読むとわかるのですが、いくつか公式のソースにパッチを当てないとエラーが出てビルドできません。 ・最新のAE3069用パッチをとってくる パッチはsourceforge.jpのuClinux-h8メーリングリストに今年1月に投稿されたものが必要です。これはリリースファイルとしては公開されていないので要注意です。メーリングリストアーカイブから当該記事を開いてAE3069.diffというファイル名で保存します。 ・パッチをあてる cd uClinux-dist-test patch -p0 < ../AE3069.diff これでほぼuClinuxのビルドはできるようになりますがまだはまりどころが残っています。オリジナルのuClinuxソースはintel PC Linux上かCygwin上で構築することを前提としているらしくビルド中に使用される一部のツール(cksum)がintelバイナリ版であるため玄箱上では実行できずにエラーになる点です。 このtools/cksumは普通のGNUのcksumとは違ってBerkley BSD起源のものにオプションを追加したもののようです。いろいろ探しましたがまったく同じものは見つからず困惑していたら、灯台下暗しuser/cksumにソースがありました。これをビルドして実行ファイルをtools/cksumにコピーすれば終わりでした。 ・cksumをビルド&コピーする cd user/cksum make cp cksum ../../tools これでやっと最後までuClinux-H8のビルドができるようになりましたと、思ったらまだ甘かったようです。実際にmake menuconfigしてVendor/ProductをAkizuki/AE3068に設定してやってみるとコンパイルエラーが出ます。最後の段階でbusyboxとかのリンク時にgetopt_longの未解決シンボルが解決できないと怒られます。 これはAkizuki/AE3068のconfig.uClibcのデフォルトコンフィグレーション設定でGETOPT関数をインクルードしないようになっているためです。これはエディタで当該部分を手直しする必要があります(uClibcディレクトリでmake menuconfigして当該コンフィグレーションオプションをONにしてもいいのですが、デフォルトを直しておくのが良いでしょう、busyboxをとりあえず使わないというふうにコンフィグレーションしても当座は回避可能) ・Akizuki/AE3068のconfig.uClibcをパッチ テキストエディタでvendors/Akizuki/AE3068/config.uClibcを開いてGETOPTを探してください。以下の行が見つかるはずです。 # UCLIBC_HAS_GNU_GETOPT is not set これを以下のように変更します。 UCLIBC_HAS_GNU_GETOPT=y これで保存しておしまい。 あとはuClinuxをデフォルトでコンフィグレーションしてビルドするだけです。 make menuconfig とやるとメニューが出てくるので Vendor/Product Selection ---> という行と下の方のSelectが選択された状態でENTERキーを押します。するとVendorとProductを選択するメニューが表示されます。 (SnapGear) Vendor という行と<Select>が選択された状態でENTERキーを押すとVendorリストが表示され、リストの上の方をカーソルキーを使ってスクロールしていくとAkizukiというのがあるのでそこが選択された状態でSpaceキーを押してチェックマークをつけます。それでEnterキーを押しVendor設定を終了すると自動的にPorductの表示がAE3068になっていると思います。Akizukiの場合それしかないのです。また→で<Exit>を選択してEnterを押しVendors/Product設定を終了します。 次にその下の Kernel/Library/Defaults Selection ---> を<Select>してEnterを押すとその他のコンフィグレーション設定のオプションを指定できます。特に指定しなければ最初はVendor/Productで決まるデフォルトが適用されます。その後何か設定をまずって元に戻したいときは [ ] Default all settings (lose changes) これを<Select>してSpaceキーを押して強制的にVendor/Productデフォルトに戻すことができます。 ここではまずLinux-2.6.xカーネルでは構築できても立ち上がらないことが判明しているので立ち上がることが確認できているLinux-2.4.xカーネルを使うようにコンフィグレーション設定を変更します。 ・カーネルLinux-2.4.xに変更 (linux-2.6.x) Kernel Version を<Select>してEnterを押すとカーネルのバージョン選択リストが出てきますので↑キーを押してlinux-2.4.xが選択された状態でSpaceキーを押してチェックマークを移動したのを確認してEnterキーを押しカーネルバージョン設定を終了します。 それとH8-3069netボードの標準の16Mbit DRAMではbusyboxを入れるとメモリ残量が少なくなってしまうのでbusyboxやとりあえず不要なコマンドとかをコンフィグレーションからはずしたほうが無難です。 [ ] Customize Vendor/User Settings (NEW) を<Select>してSpaceキーを押しチェックを入れときます。 あとは最後まで<Exit>を選択してEnterを押すとコンフィグレーション設定終了です。 Do you wish to save your new kernel configuration? というボックス表示が出たら<Yes>を選択してEnterを押します。 するとしばらくすると先ほど選択してVendor/Userコンフィグレーション設定変更メニューが表示されます。 Core Applications ---> を<Select>してEnterキーを押し、不要なコアアプリケーションをはずしことにします。 [*] reboot (sash) [*] shutdown (sash) となっているのをそれぞれ選択してSpaceキーを押して [ ] reboot (sash) [ ] shutdown (sash) とチェックを外します。<Exit>でこの設定は終了します。 次にBusyboxもとりあえず動作確認にはいらないので外します。 BusyBox ---> これを<Select>してEnterを押し、 [*] BusyBox 上記の様になっているBusyboxのチェックをSpaceキーを押して外します [ ] BusyBox あとは最後まで<Exit>を選択してEnterを押せば設定変更終了です。同様に最後<Yes>を選択してEnterを押すとコンフィグレーション完了します。 ・make depを実行する ビルドする前にLinux 2.4.xカーネルの場合必ずmake depを実行する必要があります。これはしばらく表示がいろいろ出てきますので終わるまで待ちます。 ・makeを実行する make depが終わってプロンプトが戻ってきたら、やっとビルドできます。makeとだけ実行します。最終的にカーネルとromfsのバイナリが連結されてaki3068net-image.binとなって/tftpbootディレクトリにコピーされます。これはredbootでTFTPプロトコルを使って簡単に出来たイメージをダウンロードして実行できるように作られているためです。 実際にredbootを使って出来たイメージをロードして実行するには別途、玄箱側でTFTPサーバーを設定する必要があります。それはまた後日。 最後にこれで出来たイメージをロードして実行したログを載せておきます。 +DP83902A - eeprom ESA: 00:02:cb:01:eb:1a ... waiting for BOOTP information Ethernet eth0: MAC address 00:02:cb:01:eb:1a IP: 192.168.1.16/255.255.255.0, Gateway: 192.168.1.1 Default server: 192.168.1.17 RedBoot(tm) bootstrap and debug environment [ROM] Non-certified release, version UNKNOWN - built 21:28:57, Apr 11 2004 Platform: Akizuki H8/3068 Network micom (H8/300H) Copyright (C) 2000, 2001, 2002, Red Hat, Inc. RAM: 0x00400000-0x005f4000, [0x00400000-0x005e1000] available FLASH: 0x00000000 - 0x00080000, 8 blocks of 0x00010000 bytes each. RedBoot> load -r -b 0x400000 aki3068net-image.bin Using default protocol (TFTP) Raw file loaded 0x00400000-0x004ce9f7, assumed entry at 0x00400000 RedBoot> exec -c console=ttySC1,38400 Now booting linux kernel: Entry Address 0x00400000 Cmdline : console=ttySC1,38400 Linux version 2.4.31-uc0 (root@KURO-BOXHG) (gcc version 3.4.0) #6 Fri Jan 20 18:15:31 JST 2006 uClinux H8/300H Target Hardware: AE-3068 H8/300 series support by Yoshinori Sato <ysato@users.sourceforge.jp> Flat model support (C) 1998,1999 Kenneth Albanowski, D. Jeff Dionne On node 0 totalpages: 1536 zone(0): 0 pages. zone(1): 1536 pages. zone(2): 0 pages. Kernel command line: console=ttySC1,38400 virtual vector at 0x00fffd20 Calibrating delay loop... 3.26 BogoMIPS Memory available: 1024k/1217k RAM, 0k/0k ROM (653k kernel code, 174k data) Dentry cache hash table entries: 1024 (order: 1, 8192 bytes) Inode cache hash table entries: 512 (order: 0, 4096 bytes) Mount cache hash table entries: 512 (order: 0, 4096 bytes) Buffer cache hash table entries: 1024 (order: 0, 4096 bytes) Page-cache hash table entries: 2048 (order: 1, 8192 bytes) POSIX conformance testing by UNIFIX Linux NET4.0 for Linux 2.4 Based upon Swansea University Computer Society NET3.039 Initializing RT netlink socket Starting kswapd SuperH SCI(F) driver initialized ttySC0 at 0x00ffffb0 is a SCI ttySC1 at 0x00ffffb8 is a SCI ttySC2 at 0x00ffffc0 is a SCI ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com) Last modified Nov 1, 2000 by Paul Gortmaker NE*000 ethercard probe at 0x200000: 00 02 cb 01 eb 1a eth0: NE1000 found at 0x200000, using IRQ 17. Blkmem copyright 1998,1999 D. Jeff Dionne Blkmem copyright 1998 Kenneth Albanowski Blkmem 1 disk images: 0: 4CFBB0-4EBFAF [VIRTUAL 4CFBB0-4EBFAF] (RO) <ROMFS> NET4: Linux TCP/IP 1.0 for NET4.0 IP Protocols: ICMP, UDP, TCP IP: routing cache hash table of 512 buckets, 4Kbytes TCP: Hash tables configured (established 512 bind 1024) VFS: Mounted root (romfs filesystem) readonly. Freeing unused kernel memory: 24k freed (0x4ac000 - 0x4b1000) Shell invoked to run file: /etc/rc Command: hostname AE3068 Command: mount -t proc proc /proc Command: cat /etc/motd Welcome to ____ _ _ / __| ||_| _ _| | | | _ ____ _ _ _ _ | | | | | | || | _ \| | | |\ \/ / | |_| | |__| || | | | | |_| |/ \ | ___\____|_||_|_| |_|\____|\_/\_/ | | |_| Akizukidenshi/AE-3068 (aki3069net) port. For further information check: http://www.uclinux.org/ Execution Finished, Exiting init: Failed to open /etc/inittab. Sash command shell (version 1.1.1) /> /> /> free total: used: free: shared: buffers: cached: Mem: 1073152 811008 262144 0 114688 122880 Swap: 0 0 0 /> help cd [dirname] sleep seconds chgrp gid filename ... chmod mode filename ... chown uid filename ... cmp filename1 filename2 cp srcname ... destname df [file-system] echo [args] ... exec filename [args] exit free help hexdump [-s pos] filename hostname [hostname] kill [-sig] pid ... ln [-s] srcname ... destname ls [-lidC] filename ... mkdir dirname ... mknod filename type major minor more filename ... mount [-t type] devname dirname mv srcname ... destname printenv [name] pwd pid quit rm filename ... rmdir dirname ... setenv name value source filename sync touch filename ... umask [mask] umount filename cat filename ... date date [MMDDhhmm[YYYY]] /> |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |