|
このページは「24環境」の情報です 第20回 CompactFlash Boot(CAT709) †海老原祐太郎
2004/1/23
CAT709のCompactFlashブートについて検証します。 CFカードにrootファイルシステムを作る †まず普通にCFをメモリーカードを認識させ、現在のオンボードメモリのファイル群をCFにコピーしましょう。 # cfdisk /dev/sda ← 環境による。PCでどのデバイスで認識されるか?USB接続ならsdaとなるだろう。 # mke2fs /dev/sda1 CFをCAT709のソケット0 (CAT709 CPUボードのソケット)に刺して起動します。cardmgrを立ち上げて認識させます。 # cardmgr cardmgr[123]: watching 3 sockcs: IO port probe 0x0000-0x0fff:ets clean. cat709_set_global_base ba000000 cat709_make_irq_demux(34 -> 9) cat709_port_map(start(0x000),stop(0x00f),offset(0xba000000)) cat709_set_global_base 00000000 hde: SanDisk SDCFB-32, CFA DISK drive ide2 at 0x000-0x007,0x00e on irq 9 hde: attached ide-disk driver. hde: task_no_data_intr: status=0x51 { DriveReady SeekComplete Error } hde: task_no_data_intr: error=0x04 { DriveStatusError } hde: 62720 sectors (32 MB) w/1KiB Cache, CHS=490/4/32 Partition check: hde: hde1 ide_cs: hde: Vcc = 3.3, Vpp = 0.0 cat709_set_global_base ba008000 cat709_set_global_base ba00a000 # mount /dev/hde1 /mnt -t ext2 hde: hde1 hde: hde1 mount するときに必ず -t ext2 として タイプを指定してください。省略するとVFATでマウントしてしまいます。(kernelのbug?) 無事マウントしたら現在のファイルをコピーします。 # ls / bin dev floppy initrd mnt root tmp var cdrom etc home lib proc sbin usr var.rom このうち /mnt と /proc /var は単純なコピーではうまくいかないのでコピーしません。 この3つのディレクトリは単にディレクトリを作るだけでokです。 # /mnt # cp -a /bin /cdrom /dev /etc /floppy /home /initrd /lib /root /sbin /tmp /usr /var.rom . # mkdir proc # mkdir mnt # mkdir var 続いてvi /mnt/etc/fstab で編集します。 root のデバイスを /dev/hda1 に書き換え、ファイルシステムをext2にします # /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> /dev/hda1 / ext2 defaults,ro,noatime 0 0 proc /proc proc defaults 0 0 続いて vi /mnt/etc/modules で、こちらも書き換えます。次節で述べますが、CFからブートする場合はIPLROMでCFカードの初期化を行い、 # sh3_ss base=0xb8000000,0xb8008000,0xb800a000 irq=34,32,33 sh3_ss base=0xb8008000,0xb800a000 irq=32,33 base=0xb8000000とirq=34がsocket0になりますので、オリジナルはコメントアウトして残しておき、socket0のベースアドレスとIRQ番号を外します。
# cd .. # umount /mnt 以上です。umountしましょう。 そもそもCAT709のCFソケットは †CAT709のCFソケットはCompactFlashメモリーカードをはじめ、無線LANカードやPHSモデムなど、各種のCFタイプカードを識別し認識できるようになっています。 Linux起動後に、CFソケットに刺さっているカード種別を判断してドライバをロードするには cardmgr を使うわけですが、 従って、CFからブートするということはIPLROMでCFを初期化することでありこの場合は/dev/hdaにきめウチします。 カーネルはどこから来るのか? †カーネルはどこからロードされて来るのでしょうか?カーネルとはzImageというただひとつのバイナリーになります。 CAT709仕様書より。カーネル(zImage)はオンボードFLASHの 0x00020000番地に保存されている。~ linux起動後にはこの番地は /dev/mtd1 デバイスとして読み書きができる。 前節で書いたようにCFの初期化には選択肢があります。
カーネルのロード方法も以下から選択します
本章では上記1と2の両方の起動手順を個別に解説します。 1.オンボードFLASHのカーネルからの起動 †オンボードFLASHに保存されているカーネルから起動しますので、起動手順は通常通り's'キーによる起動と変わりありません。 console=ttySC0,115200 ide0=0xba0001f0,0xba0003f6,34 root=0301 ro ide0= I/Oアドレス、I/アドレス、割り込み番号 ← CFをIDEデバイスとして初期化させるための指示 ? --- Show this message (HELP) b --- Boot the system g --- Invoke GDB stub l --- Show about license w --- Show about (no)warranty k --- download kernel r --- download rootfs c --- setup kernel cmdline example) console=ttySC0,115200 root=1f02 ro m --- setup mac address s --- start linux command line is console=ttySC0,115200 root=1f02 ro > c input kernel command line, and stripe return key console=ttySC0,115200 ide0=0xba0001f0,0xba0003f6,34 root=0301 ro > > s loading linux Uncompressing Linux... Ok, booting the kernel. Linux version 2.4.21 (root@boss) (gcc version 3.0.3) #2 2003年 6月 23日 月曜日 14:09:40 JST setup_cat709 中略 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: SanDisk SDCFB-32, CFA DISK drive ide0 at 0xba0001f0-0xba0001f7,0xba0003f6 on irq 34 hda: attached ide-disk driver. hda: task_no_data_intr: status=0x51 { DriveReady SeekComplete Error } hda: task_no_data_intr: error=0x04 { DriveStatusError } hda: 62720 sectors (32 MB) w/1KiB Cache, CHS=490/4/32 Partition check: hda: hda1 Amd/Fujitsu Extended Query Table v1.1 at 0x0040 number of CFI chips: 1 cfi_cmdset_0002: Disabling fast programming due to code brokenness. Creating 3 MTD partitions on "CAT709 Flash1": 0x00000000-0x00020000 : "ipl" 0x00020000-0x00100000 : "kernel" 0x00100000-0x00800000 : "Flash FS" 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 2048 bind 4096) NET4: Unix domain sockets 1.0/SMP for Linux NET4.0. hda: hda1 hda: hda1 VFS: Mounted root (ext2 filesystem) readonly. 略 これでrootファイルシステムをCFにおくことが出来ましたので、アプリケーションのVersionUp目的であればこれでも十分です。 2.CFカードの /boot/vmlinuz ファイルからカーネルを読み込む †コンパクトフラッシュの/boot/vmlinuzをカーネルとしてbootするにはPCと同じくliloブートローダが必要になります。 ブートローダーとしてsh用のliloをインストールしなければなりません。 無事CFをIDEデバイス(/dev/hda1)として認識し、rootファイルシステムとして起動できましたか? INIT: Entering runlevel: 2 Starting system log daemon: syslogd. Starting kernel log daemon: klogd. Starting HTTP server: boa. Starting internet superserver: inetd. Starting NFS common utilities: statd. supercat login:root Password:root supercat:~# rommode rw supercat:~# vi /etc/lilo.conf 以下の書式で /etc/lilo.confを作ります。 linear boot = /dev/hda disk = /dev/hda bios=0x80 append="ro root=0301 console=ttySC0,115200 ide0=0xba0001f0,0xba0003f6,34 " delay = 30 image = /boot/vmlinuz label = linux root = /dev/hda1 read-only 次にいくつかのファイルをCAT709にダウンロードしておきます。
これで /boot/vmlinuz をカーネルとして起動できるよう、liloが書き込まれました。以下が要注意なのですが、 liloでブートするときのカーネルパラメータは、/etc/lilo.confのappend=行が使用される。iplromの'c'で書き込む文字列は利用されない という点に注意してください。 > b Disk drive detected: SanDisk SDCFB-32 Vdg 1.21 06120202025 Set Transfer Mode result: 51 Initialize Device Parameters result: 50 IDLE result: 50 LILO boot: first-image Loading linux..................done. Uncompressing Linux... Ok, booting the kernel. Linux version 2.4.21 (ebihara@boss) (gcc version 3.0.3) #84 2003年 12月 4日 木曜日 17:37:26 JST setup_cat709 略 自動起動 †さて上記まで進み無事 'b' キーでCFのカーネルのブートができるようになりました。 そこでipl-romに対して'b'に対する自動ブートを付け加えましたが、単純にDIPSW-2 sh-stub-2004-01-23.bin (version 0.11_Jan 23 2004 15:58:39)をダウンロードしてipl-romをバージョンアップしてください # cp sh-stub-2003-01-23.bin /dev/mtd0 ←完了するまで絶対に電源を切らない!! 再起動 SH IPL+g version 0.11_Jan 23 2004 15:58:39, Copyright (C) 2001 Free Software Foundation, Inc. This software comes with ABSOLUTELY NO WARRANTY; for details type `w'. This is free software, and you are welcome to redistribute it under certain conditions; type `l' for details. RTC clock is 2004/01/23 17:41:08 mac addr:00:03:82:02:00:7c IDE: device not detected. > h SH IPL+g version 0.11_Jan 23 2004 15:58:39, Copyright (C) 2001 Free Software Foundation, Inc. ? --- Show this message (HELP) b --- Boot the system g --- Invoke GDB stub l --- Show about license w --- Show about (no)warranty k --- download kernel r --- download rootfs c --- setup kernel cmdline example) console=ttySC0,115200 root=1f02 ro m --- setup mac address s --- start linux o --- boot_key ←今回増やした boot_key=[b] command line is console=ttySC0,115200 root=1f02 ro オプションの 'o' が増えています。 > o boot_key select type [s] or [b] -->boot_key set to 'b' 'o'を押すと、自動ブートに's'を使うのか'b'を使うのか聞いてきますので1文字押して ください。 DIPSWは必ず絶対に!つまようじなどやわらかめの物で動かしてください。 針やドライバーの先、ボールペンなどで動かすと接触不良になってしまいます |