3. HDDをつないでみた
オリジナルのuClinux-H8は、起動時にネットワーク経由で linux kernelと ROM file systemをdownloadして動作するというスタイルです。 そこで過去のMLなどをさらに調べて行くと、 ボードにHDD(IDEディスク)や Compact Flash カードを接続して stand-alone で動かせることがわかました。スバラシイ! 試してみたところこれもうまく動作させることができました。
手元にあった古いノートPCの2.5inchディスクを流用して、 uClinux-H8のsystemをその上に構築すると、 ネットワークなしでも電源ONでLinuxが起動します。 /etc/rc でアプリを起動するようにしておけば、 ほんとうに stand-aloneで目的の動作まで行けちゃいます。 しかも普通の2.5inch HDDなので、 ちょっと奮発して容量の大きいものを用意すればかなりの量のデータが扱えます。 まさに、手のひらサイズのミニミニLinuxマシンです。 これは結構感動的です。

ボードとディスクを接続するためのちょっとした回路や MP3 Playerに仕立てるための今後の回路のために、 写真のような、H8ボードが上に載るようなベースボードを作って HDDと接続しました。

《 ← 前へ 》 《 次へ → 》

秋月3069ネットボードにHDD(IDEディスク)を接続
1. 回路図
16bit幅で接続する回路で、 H8のarea 4を16bit address space に設定して使用します。 uClinux のAKI 3069向けのソースでは、endian の違いを吸収する swap のコードが入っているので、D[15:0]までをそのまま接続できます。 試してはいませんが、 D[15:8]とD[7:0]を交差させる接続にすると endianの不一致が解消されるので、 H8内蔵のDMAが使えるようになって転送性能が上がるかもしれません。 次の機会にやってみようと思います。

割り込みは IRQ4 を使用しています。

2. IDE DiskサポートのuClinux-H8を動かす
IDE Diskサポートの kernel は uClinux distribution には含まれないので、 uClinx-H8 の CVSから 2.4.x カーネルのソースツリーを持ってきてディレクトリを置き換えます。
 % cvs -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/uclinux-h8 login
 % cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/uclinux-h8 co uClinux
 -2.4.x
 % rm -rf linux-2.4.x
 % ln -s uClinux-2.4.x linux-2.4.x
 %
IDE対応kernelを menuconfig を使って構築します。
 % make menuconfig
 Kernel/Library/Defaults Selection  --->
 [*] Customize Kernel Settings
 Exit -> Exit ->
 Save configuration -> Yes
 
 Block devices ->
  [ ] ROM disk memory block device (blkmem)
 
 ATA/IDE/MFM/RLL support ->
  [*] ATA/IDE/MFM/RLL support
  IDE, ATA and ATAPI Block devices ->
  [*] Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
  [*]   Include IDE/ATA-2 DISK support
  (800000) IDE register base address
  (80400C) IDE register alternate address
  (4) IDE IRQ no
 
 File systems ->
  [ ] ROM file system support
  [*] Second extended fs support
  Partition Types ->
  [*] Advanced partition selection
  [*]   PC BIOS (MSDOS partition tables) support
 
 -> Exit -> Exit ->
 Save Kernel configuration -> Yes
 
 % make dep | & tee make-dep.out
 % rm linux-2.4.x/arch/h8300/platform/h8300h/aki3068net/crt0_ram.o
 % make |& tee make.out
次に、kernelとroot file systemを、 実際にボードに接続するHDDの上に構築します。 今回は手持ちのNote-PCを利用した、以下のような方法でやってみました。
  1. 2.5inch HDD を用意し、Note-PC に実装します。
  2. Note-PCに普通のlinuxをインストールします。 (ホストPCと同じ Vine Linux を入れました。) このとき,uClinux用のpartitionを別に分けて(hda1とする)、 EXT2 でformatしておきます。 Note-PC用partitionはEXT3でも良いですが、 uClinuxからでもmountしてデータを参照できるようにしたいなら EXT2にしておきます。
  3. Note-PCで、インストールしたLinuxをbootします。
  4. 起動後、uClinux用のpartitionをmountして、 H8用のroot file systeをここに構築します。 ホストPCで構築した romfs ディレクトリのイメージをこの partitionに再現していきます。 tarでホストPCのromfsを固めて、Note-PCへコピーし、 uClinux用の partition で展開します。
  5. device file を作ります。 romfsの /dev には @console,c,5,1 のような名前のファイルができているので、 disk にはmknodでそれらに相当する本当のdevice fileを作成します。 また、この root file systemをmountするための hda? device も忘れずに作成します。
        % cd dev
        % mknod console c 5 1
        % mknod null c 1 3
        % mknod ttySC0 c 204 8
        % mknod ttySC1 c 204 9
        % mknod ttySC2 c 204 10
        % mknod hda b 3 0
        % mknod hda1 b 3 1
        % mknod hda2 b 3 2
        % mknod hda3 b 3 3
        % mknod hda4 b 3 4
        
  6. IDEサポートの kernel もuClinux partition にコピーします。 ホストPCの images/aki3068net-image.bin を uClinux partition のroot に linux-ide.bin としてコピーします。
HDDをNote-PCから外してH8ボードに接続し、 ボードにはIDE disk対応の Redboot を書き込んで起動します。 IDE disk対応の Redbootは、ecos.ecc を編集して、 IDE diskのための設定を有効にして再コンパイルします。 redbootの disksコマンドで diskのpartitionを見ることができます。 uClinux のroot file systemを構築した partitionにある kernelを load して、root pathを指定して起動します。

下の起動例では、/etc/rc に、 root 以下のファイルを書き換えられるようにするための remount と network 設定のための ifconfig を追加しています。

 % minicom
 +FUJITSU M2724TA                         
 DP83902A - eeprom ESA: 00:02:cb:01:63:2b
 ... waiting for BOOTP information
 Ethernet eth0: MAC address 00:02:cb:01:63:2b
 IP: 192.168.1.60/255.255.255.0, Gateway: 192.168.1.51
 Default server: 192.168.1.51
 
 RedBoot(tm) bootstrap and debug environment [ROM]
 Non-certified release, version UNKNOWN - built 23:26:17, Mar 22 2004
 
 Platform: Akizuki H8/3068 Network micom (H8/300H) 
 Copyright (C) 2000, 2001, 2002, Red Hat, Inc.
 
 RAM: 0x00400000-0x005f4000, [0x00400000-0x005f4000] available
 RedBoot> disks
 hda1     Linux
 hda2     Linux
 hda3     Linux Swap
 RedBoot> load -r -v -m disk -b 0x400000 hda1:/linux-ide.bin
 /
 Raw file loaded 0x00400000-0x004f1ab3, assumed entry at 0x00400000
 RedBoot> exec -c "console=ttySC1,38400n81 root=/dev/hda1"
 Now booting linux kernel:
  Entry Address 0x00400000
  Cmdline : console=ttySC1,38400n81 root=/dev/hda1
 Linux version 2.4.24-uc0 (ykoya@papaya) (gcc version 3.3) #3 Thu Apr 22 23:45:11
  PDT 2004
 
 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 root=/dev/hda1
 virtual vector at 0x00fffd20
 Calibrating delay loop... 3.25 BogoMIPS
 Memory available: 996k/1076k RAM, 0k/0k ROM (779k kernel code, 187k 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 63 2b
 eth0: NE1000 found at 0x200000, using IRQ 17.
 Uniform Multi-Platform E-IDE driver Revision: 7.00beta4-2.4
 ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
 hda: FUJITSU M2724TA, ATA DISK drive
 ide0 at 0x00800000-0x0080000f,0x0080400c on irq 16
 hda: attached ide-disk driver.
 ide0: unexpected interrupt, status=0x51, count=1
 hda: task_no_data_intr: status=0x51 { DriveReady SeekComplete Error }
 hda: task_no_data_intr: error=0x04 { DriveStatusError }
 hda: 3187836 sectors (1632 MB), CHS=3162/16/63
 Partition check:
  hda: [PTBL] [790/64/63] hda1 hda2 hda3
 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 (ext2 filesystem) readonly.
 Freeing unused kernel memory: 24k freed (0x4ce000 - 0x4d3000)
 Shell invoked to run file: /etc/rc
 Command: hostname AE3068
 Command: mount -t proc proc /proc
 Command: mount -oremount,rw /dev/root /
 Command: ifconfig eth0 192.168.1.60
 Command: cat /etc/motd
 Welcome to
           ____ _  _
          /  __| ||_|                 
     _   _| |  | | _ ____  _   _  _  _ 
    | | | | |  | || |  _ \| | | |\ \/ /
    | |_| | |__| || | | | | |_| |/    \
    |  ___\____|_||_|_| |_|\____|\_/\_/
    | |
    |_|
 
 Akizukidenshi/AE-3068 (aki3069net) port.
 For further information check:
 http://www.uclinux.org/
 
 Execution Finished, Exiting
 init: cannot open inittab
 
 Sash command shell (version 1.1.1)
 /> 
《 ← 前へ 》 《 次へ → 》