AKI-H8/3069FでuClinuxを動作させる方法(後編)
概要
AKI-H8ボード/3069Fの動作確認では、H8上で動作するファームウェアを書き込み、マザーボード上のLEDやLCDの動作確認をした。
ここでは、AKI-H8/3069Fに小型CPUで動作可能なuClinuxを載せ、実際に動作させる。
まず、uCLinuxを載せるには、下図の構成を覚えておく。
AKI-H8/3069F上でuClinuxが動作して、コマンド入力を行えるシェルが起動したとしても、キーボードやディスプレイは接続できない。
つまり、AKI-H8/3069F単体では入出力等ができないため、必ず、Linux PCが必要になる。
Linux PC上に、AKI-H8/3069F上のuClinuxの起動に必要なカーネル等のファイルを置くことによって、OSの起動を実現できる。
ここでは、以下の問題を解決していく。
この辺りの問題が、組み込み機器の取り扱いを難しくさせている要因であり、幅広い知識が要求される。
- BIOSに代わるプログラムは何か。
- カーネルはどこから起動されるのか。
- HDD / SSDは無いが、ファイルシステムのマウント先はどうするのか。
uCLinuxカーネルのダウンロード
tftpによるuCLinuxカーネルのダウンロードを行う。
まず、~/3069Fディレクトリ下に用意したカーネル(linux.bin)を~/tftpbootに配置する。
cp -i ~/3069F/linux.bin ~/tftpboot
次に、Red Bootの起動で使用したシリアル通信ソフトウェアで、以下のコマンドを実行する。
RedBoot> load -v ~/tftpboot/linux.bin Using default protocol (TFTP) Entry point: 0x00400004, address range: 0x003fff8c-0x004d6a24
この時、AKI-H8/3069FのLANポート付近にあるLEDが点滅する。
これは、正常にuCLinuxカーネルのダウンロードが行われていることを意味する。
ルートファイルシステムのマウント
NFSによるルートファイルシステムのマウントを行う。
NFSサーバの構築に関する詳細は、サーバ - NFSを参照すること。
まず、Linux PCのディレクトリをエクスポートするために、/etc/exportsを以下のように設定する。
/home/ユーザ名/3069F/rootfs 192.168.1.0/24(rw,insecure,async,no_root_squash)
次に、xinetdを経由しているので、/etc/hosts.allowを以下のように設定する。
# 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
uClinuxの起動
最後に、Red Bootを起動で使用したシリアル通信ソフトウェアから、以下のコマンドを実行する。
RedBoot> exec -c "console=ttySC1,38400n81 nfsroot=192.168.1.10:~/3069F/rootfs"
以下のように、uClinuxが正常に起動する。
# uClinuxの起動 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.1.11 IP-Config: Complete: device=eth0, addr=192.168.1.11, mask=255.255.255.0, gw=255.255.255.255, host=192.168.1.11, domain=, nis-domain=(none), bootserver=0.0.0.0, rootserver=192.168.1.10, 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) />
起動したuCLinuxからlsコマンド等を実行して、正常に出力されるかを確認する。
もし、uCLinuxの起動の途中でカーネルパニックになる場合は、以下の点を確認する。
- /etc/exportsファイル
- /etc/hosts.allowファイル
- NFSに対するファイアーウォールのポート開放
次のページでは、開発環境を使用してユーザアプリケーションを動作させる。