連載
» 2008年09月29日 00時00分 公開

山あり谷あり、非力なマイコンでuClinuxを動かすべし−ザ・組み込み−ソフトウェアのハードウェア化(3)(4/4 ページ)

[鳥海佳孝 設計アナリスト,@IT MONOist]
前のページへ 1|2|3|4       

カーネルのダウンロード

 ようやく準備が整いましたので、「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が動作したので、開発環境を使用してユーザーアプリケーションを動作させる予定です。お楽しみに!(次回に続く)


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.