山あり谷あり、非力なマイコンでuClinuxを動かすべし:−ザ・組み込み−ソフトウェアのハードウェア化(3)(4/4 ページ)
H8マイコンでLinuxを動かすことに挑戦。待ち受けるいくつもの試練を乗り越え、組み込みの“真の面白さ”を実感しよう!!
カーネルのダウンロード
ようやく準備が整いましたので、「tftp」によるカーネルのダウンロードを行います。
まずは、1ページ目の解説で「/root/3069F/」以下に用意したカーネル(linux.bin)を「/tftpboot」に置きます。
# cp /root/3069F/linux.bin /tftpboot
そして、RedBootを立ち上げたシリアル通信ソフトのシェルから以下のコマンドを入力します。その際(前述したとおり)、ファイル名はフルパスになりますので、ご注意ください。
RedBoot> load -v /tftpboot/linux.bin Using default protocol (TFTP) Entry point: 0x00400004, address range: 0x003fff8c-0x004d6a24
このとき、AKI−H8/3069F上のLANポート付近のLEDがチカチカと点滅し、RedBootを立ち上げたシリアル通信ソフトのシェルではキャラクタがクルクルと回転します。これは正常にカーネルのダウンロードが行われていることを意味しています。
ルートファイルシステムのマウント
カーネルのダウンロードが完了したところで、次に「NFS(Network File System)」によるルートファイルシステムのマウントです。
まず、ホストPCのディレクトリをエキスポートするために、「/etc/exports」をリスト4のように設定します。
/opt/aki3069f 192.168.0.0/255.255.255.0(rw,insecure,async,no_root_squash)
リスト4 /etc/exportsの設定 |
次にinetdを経由しているので、「/etc/hosts.allow」をリスト5のように設定します。
# # hosts.allow This file describes the names of the hosts which are # allowed to use the local INET services, as decided # by the '/usr/sbin/tcpd' server. # rpc.mountd: ALL portmap: ALL rquotad: ALL mountd: ALL statd: ALL
リスト5 /etc/hosts.allowの設定 |
ここまでの準備が整ったら、以下のコマンドで「nfs」のサービスを起動します。
# /etc/init.d/nfs start
uClinuxを立ち上げる
最後に、RedBootを立ち上げたシリアル通信ソフトのシェルから以下のコマンドを入力します。
RedBoot> exec -c "console=ttySC1,38400n81 nfsroot=192.168.0.1:/opt/aki3069f"
さぁ、どうでしょうか? ここでリスト6のようにuClinuxが立ち上がればOKです。
RedBoot> exec -c "console=ttySC1,38400n81 nfsroot=192.168.0.1:/opt/aki3069f" Now booting linux kernel: Entry Address 0x00400000 Cmdline : console=ttySC1,38400n81 nfsroot=192.168.0.1:/opt/aki3069f Linux version 2.4.31-uc0 (root@localhost) (gcc version 3.4.3) #2 2008年 9月 1 1日 木曜日 08:17:45 JST 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,38400n81 nfsroot=192.168.0.1:/opt/aki3069 f virtual vector at 0x00fffd20 Calibrating delay loop... 3.26 BogoMIPS Memory available: 984k/1067k RAM, 0k/0k ROM (781k kernel code, 196k 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 86 c2 eth0: NE1000 found at 0x200000, using IRQ 17. 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) Sending DHCP requests ., OK IP-Config: Got DHCP answer from 0.0.0.0, my address is 192.168.0.2 IP-Config: Complete: device=eth0, addr=192.168.0.2, mask=255.255.255.0, gw=255.255.255.255, host=192.168.0.2, domain=, nis-domain=(none), bootserver=0.0.0.0, rootserver=192.168.0.1, rootpath= Looking up port of RPC 100003/2 on 192.168.0.1 Looking up port of RPC 100005/1 on 192.168.0.1 nfs: server 192.168.0.1 not responding, still trying nfs: server 192.168.0.1 OK VFS: Mounted root (nfs filesystem). Freeing unused kernel memory: 32k freed (0x4ce000 - 0x4d5000) 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) />
リスト6 uClinuxの起動 |
立ち上がったシェルから「ls」コマンドなどを実行してその結果がきちんと返ってくるかどうかを確認してください。「カーネルのダウンロードはうまくいったのに、起動途中でカーネルパニックになった!」という方は、以下のポイントを疑ってみてください。
- /etc/exportsファイルの確認
- /etc/hosts.allowファイルの確認
- ファイアウォールがNFSに対して解除されていない
H8マイコンでコマンドが実行できた皆さん、おめでとうございます。
こんな小さい、しかも数千円の組み込み開発ボードでLinuxが動作するなんて感動ですよね。これこそまさに『ザ・組み込み』だと思います。今回も書籍やWebなどの情報(先人の知恵)を参考にしつつ、何とか今回の目標である「uClinuxを載せて動かす」ところまでたどり着きました。苦労はするものの、このように達成できる喜びを実感できるのが組み込みの面白さではないでしょうか(それにしても、組み込みの神様はことごとくいろいろなハードルを設定してくださいます……)。
さて、次回はせっかくAKI−H8/3069F上でLinuxが動作したので、開発環境を使用してユーザーアプリケーションを動作させる予定です。お楽しみに!(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.