組み込みLinux

作成: 2005-06-19 11:54:36 (日)
参照: 7243

#contents


添付:fileredboot.elf.h8max.4mb.mot.gz

H8MAXにDRAM 2MBを追加する

  • 標準DRAMと同様に配線し、~CS3を結線した。(10KΩでプルアップ)
  • DRAMにはバイパスコンデンサ(パスコン)も二個つけた。
GM71C18163C.png
  • サンハヤトSOP->2.54mmピッチ変換基板(SSP-84)を使用して拡張基板上に実装した。
http://muranaka.info/images/H8MAX_DRAM4MB_b.JPG

DRAM追加によるRedbootおよびuClinuxカーネルの変更内容と確認結果

Redbootの変更点 (DRAM増設対応)

  • Redbootソースのecos-2.0ディレクトリを新規に展開する。(一度でもmakeしてあると、make cleanしてもインクルードファイルの変更が反映されなかった事を踏まえて)
  • ecos-2.0/packages/hal/h8300/h8max/current/include/platform.incのDRCRA設定を0x58にする。
    93行 INIT_REGS_DATA(CYGARC_DRCRA,0x58)
  • ecos-2.0/packages/hal/h8300/h8max/current/include/pkgconfのROMモード時の2ファイルのDRAM設定を変更する。
    • mlt_h8300_h8300h_h8max_rom.h:ram_SIZEを0x400000(4MB)にする
     1 // eCos memory layout - Wed Nov 24 13:10:23 1999
     2
     3 // This is a generated file - changes will be lost if ConfigTool(MLT) is
        run
     4
     5 #ifndef __ASSEMBLER__
     6 #include <cyg/infra/cyg_type.h>
     7 #include <stddef.h>
     8
     9 #endif
    10
    11 #define CYGMEM_REGION_ram (0x400000)
    12 #if !defined(CYGPKG_IO_ETH_DRIVERS)
    13 #define CYGMEM_REGION_ram_SIZE (0x400000)
    14 #else
    15 #define CYGMEM_REGION_ram_SIZE (0x400000-0xC000)
    16 #endif
    17 #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATT
       R_W)

  • mlt_h8300_h8300h_h8max_rom.ldi:18行 #define WORKで 0x7f4000にする。
         1 // eCos memory layout - Fri Oct 20 08:25:16 2000
         2
         3 // This is a generated file - do not edit
         4
         5 #include <cyg/infra/cyg_type.inc>
         6
         7 OUTPUT_FORMAT("elf32-h8300")
         8 OUTPUT_ARCH(h8300h)
         9
        10 MEMORY
        11 {
        12 #define IRAM_TOP 0xffbf20
        13     rom : ORIGIN = 0x000000, LENGTH = 0x60000
        14 #if !defined(CYGPKG_IO_ETH_DRIVERS)
        15 #define WORK IRAM_TOP+0x100
        16     ram : ORIGIN = WORK, LENGTH = 0x4000-0x100
        17 #else
        18 #define WORK 0x7f4000
        19     ram : ORIGIN = WORK, LENGTH = 0xC000
        20     iram : ORIGIN = IRAM_TOP, LENGTH = 0x4000
        21 #endif
        22 }

  • 次にH8MAXご本家サイトを参考にecos.eccを作成する。
    $ ecosconfig new h8max redboot
    U CYGSEM_HAL_ROM_MONITOR, new inferred value 1
    $ ecosconfig add CYGPKG_IO_ETH_DRIVERS
    $ ecosconfig add CYGPKG_DEVS_ETH_NS_DP83902A
  • 作成されたecos.eccでコマンドスタート番地を変更する。
    • 4688行のuser_valueの#を削除して、0x005FFE00を0x007FFE00にする。
        4686 cdl_option CYGDAT_REDBOOT_H8300_LINUX_COMMAND_START {
        4687     # Flavor: data
        4688     user_value 0x007FFE00
        4689     # value_source default
        4690     # Default value: 0x005FFE00
        4691 };
  • ecosconfig check、ecosconfig treeを実行し、makefileを作成する。
    • この時点で、value_sourceが userになる。
        4686 cdl_option CYGDAT_REDBOOT_H8300_LINUX_COMMAND_START {
        4687     # Flavor: data
        4688     user_value 0x007FFE00
        4689     # value_source user
        4690     # Default value: 0x005FFE00
        4691 };
+DP83902A - eeprom ESA: 00:02:cb:01:67:cb
Ethernet eth0: MAC address 00:02:cb:01:67:cb
IP: 192.168.2.10/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.2.5, DNS server IP: 0.0.0.0

RedBoot(tm) bootstrap and debug environment [ROM]
Non-certified release, version UNKNOWN - built 00:39:55, Jun 19 2005

Platform: H8MAX (H8/300H)
Copyright (C) 2000, 2001, 2002, Red Hat, Inc.

RAM: 0x00400000-0x007f4000, 0x00400000-0x007f4000 available
RedBoot>

uClinuxカーネルの変更 (DRAM増設対応)

  • uClinux-dist-h8300/linux-2.4.x/arch/h8300/platform/h8300h/h8max/ram.ldファイルで8,9行 ramとeramを変更する。
    • 0x600000を0x800000にする。
     1 /* H8MAX RAM */
     2
     3 OUTPUT_ARCH(h8300h)
     4 ENTRY("__start")
     5
     6 MEMORY
     7     {
     8     ram    : ORIGIN = 0x400000, LENGTH = 0x800000-0x400000
     9     eram   : ORIGIN = 0x800000, LENGTH = 0
    10     }

uClinuxの起動結果

  • 起動条件:
    • デフォルトSash設定から、busyboxのmshにシェルを変更 (/bin/shもmsh)
    • 上記により、thttpdをcgiオプション付で rcスクリプトにより起動
    • psコマンドをユーザランド設定で追加
      • Sash付属のpsが使用出来なくなるため、およびbusyboxのpsだと 各プロセスの使用メモリサイズが表示されないため選択
    • 注意点: CFは抜いておく。(CFエリアと重なりRedboot起動不可となるのを回避するため)
+DP83902A - eeprom ESA: 00:02:cb:01:67:cb
Ethernet eth0: MAC address 00:02:cb:01:67:cb
IP: 192.168.2.10/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.2.5, DNS server IP: 0.0.0.0

RedBoot(tm) bootstrap and debug environment [ROM]
Non-certified release, version UNKNOWN - built 00:39:55, Jun 19 2005

Platform: H8MAX (H8/300H)
Copyright (C) 2000, 2001, 2002, Red Hat, Inc.

RAM: 0x00400000-0x007f4000, 0x00400000-0x007f4000 available
RedBoot> load -r -v -m TFTP -b 0x400000 h8max-image-nfsroot-4mb.bin;exec -c "con
sole=ttySC1,38400n81 nfsroot=192.168.2.5:/home/muranaka/uClinux-dist-h8300/romfs
"
/
Raw file loaded 0x00400000-0x004f18bf, assumed entry at 0x00400000
Now booting linux kernel:
 Entry Address 0x00400000
 Cmdline : console=ttySC1,38400n81 nfsroot=192.168.2.5:/home/muranaka/uClinux-di
st-h8300/romfs
Linux version 2.4.21-uc0 (muranaka@colinux) (gcc version 3.3) #29 Sun Jun 19 02:
22:59 JST 2005

uClinux H8/300H
Target Hardware: H8MAX
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: 2048
zone(0): 0 pages.
zone(1): 2048 pages.
zone(2): 0 pages.
Kernel command line: console=ttySC1,38400n81 nfsroot=192.168.2.5:/home/muranaka/
uClinux-dist-h8300/romfs
virtual vector at 0x00fffd20
Calibrating delay loop... 8.29 BogoMIPS
Memory available: 3024k/3129k RAM, 0k/0k ROM (760k kernel code, 198k 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
h8max_dac: H8MAX D/A Converter Drive, by 2005 K.Muranaka
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 0x800600:<4>eth0: interrupt from stopped card
 00 02 cb 01 67 cb
eth0: NE2000 found at 0x800600, using IRQ 16.
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 BOOTP requests . OK
IP-Config: Got BOOTP answer from 192.168.2.5, my address is 192.168.2.10
IP-Config: Complete:
      device=eth0, addr=192.168.2.10, mask=255.255.255.0, gw=255.255.255.255,
     host=192.168.2.10, domain=, nis-domain=(none),
     bootserver=192.168.2.5, rootserver=192.168.2.5, rootpath=
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
Looking up port of RPC 100003/2 on 192.168.2.5
Looking up port of RPC 100005/1 on 192.168.2.5
VFS: Mounted root (nfs filesystem).
Freeing unused kernel memory: 32k freed (0x4ca000 - 0x4d1000)

※この間少し時間がかかる。(/etc/rcを実行中)

Welcome to
          ____ _  _
         /  __| ||_|
    _   _| |  | | _ ____  _   _  _  _
   | | | | |  | || |  _ \| | | |\ \/ /
   | |_| | |__| || | | | | |_| |/    \
   |  ___\____|_||_|_| |_|\____|\_/\_/
   | |
   |_|

strawberry-linux.com/H8MAX port.
For further information check:
http://www.uclinux.org/



BusyBox v0.60.4 (2005.06.18-17:23+0000) Built-in shell (msh)
Enter 'help' for a list of built-in commands.

# cat /etc/rc
hostname H8MAX
mount -t proc proc /proc
mount -o remount,rw /dev/root /
route add default gw 192.168.2.1
thttpd -d /home/www -c 'cgi-bin/*' &
cat /etc/motd
# ps
  PID PORT STAT SIZE SHARED %CPU COMMAND
    1      S     73K     0K  6.3 init
    2      S      0K     0K  0.0 keventd
    3      R      0K     0K  0.1 ksoftirqd_CPU0
    4      S      0K     0K  0.0 kswapd
    5      S      0K     0K  0.0 bdflush
    6      S      0K     0K  0.0 kupdated
    7      S      0K     0K  0.1 rpciod
   13      S    277K     0K  9.5 thttpd -d /home/www -c cgi-bin/*
   15      S    325K     0K 22.5 /bin/sh
   17      R     73K     0K  0.0 ps
# free
              total         used         free       shared      buffers
  Mem:         3056         1636         1420            0            0
# cat /proc/meminfo
        total:    used:    free:  shared: buffers:  cached:
Mem:   3129344  1679360  1449984        0        0   217088
Swap:        0        0        0
MemTotal:         3056 kB
MemFree:          1416 kB
MemShared:           0 kB
Buffers:             0 kB
Active:            112 kB
Inactive:          100 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:         3056 kB
LowFree:          1416 kB
SwapTotal:           0 kB
SwapFree:            0 kB
#

事前準備:追加DRAMの動作確認

  • DRCRAは0x38のままとしてnfsrootで起動し、uClinux上でDRCRAを0x58として、メモリアクセスを確認した。
    • 櫻木さんの記事より岡崎さんのソース参考にさせて頂きました。<(_ _)>
    • DRCRA変更結果(uClinuxアプリ)
      /> drcra
             --- DRAM set DRCA (extend 2MB) ---
             DRCRA = 0x58
             ----------------------------------
              0x600000 = 0x01
              0x600000 = 0x02
              0x600000 = 0x04
              0x600000 = 0x08
              0x600000 = 0x10
              0x600000 = 0x20
              0x600000 = 0x40
              0x600000 = 0x80
             -----------------------------------
              0x700000 = 0x00
              0x700001 = 0x01
              0x700002 = 0x02
              0x700003 = 0x03
              0x700004 = 0x04
              0x700005 = 0x05
              0x700006 = 0x06
              0x700007 = 0x07
              0x700008 = 0x08
              0x700009 = 0x09
              0x70000a = 0x0a
              0x70000b = 0x0b
              0x70000c = 0x0c
              0x70000d = 0x0d
              0x70000e = 0x0e
              0x70000f = 0x0f
             ----------------------------------


  • 以下は以前の情報です。
  • 2004-08-24 (火) 01:47:10
    • H8MAXでDRAMを拡張するには
      • Aki3069/3068net(AE-3069/AE-3068)ならば、西本さん記事の方法でDRAMが拡張出来そうです。
      • AE-3068のDRAM追加
    • H8MAXでもDRAMを拡張したいと考えています。(MMU無しの背景からも)
      • CFroot時のメモリ情報(現状)
        Sash command shell (version 1.1.1)
        /> cat /proc/meminfo
                total:    used:    free:  shared: buffers:  cached:
        Mem:   1052672   847872   204800        0    12288    32768
        Swap:        0        0        0
        MemTotal:         1028 kB
        MemFree:           200 kB
        MemShared:           0 kB
        Buffers:            12 kB
        Active:              4 kB
        Inactive:           40 kB
        HighTotal:           0 kB
        HighFree:            0 kB
        LowTotal:         1028 kB
        LowFree:           200 kB
        SwapTotal:           0 kB
        SwapFree:            0 kB
  • H8MAXメモリマップの関係から連続空間にならないので、CF用エリア3( 0060000c-0060000c : ide0)をDRAMエリアにすれば、まずは動きそうです。
  • 別途外付けでCFを配線し、使用エリアを変更したideドライバに変更すればCF併用も出来る可能性有りですが、手強そうです。
    /> cat /proc/ioports
    00200000-00200000 : ide0
    00200002-00200002 : ide0
    00200004-00200004 : ide0
    00200006-00200006 : ide0
    00200008-00200008 : ide0
    0020000a-0020000a : ide0
    0020000c-0020000c : ide0
    0020000e-0020000e : ide0
    0060000c-0060000c : ide0
    00800600-0080061f : eth0


添付ファイル: fileredboot.elf.h8max.4mb.mot.gz [詳細] filedrcra.c [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: Sun, 19 Jun 2005 20:14:03 JST (4270d)