前回インストールした時には文章を残さなかったので、2回目の今日はちゃんと書く。 いくつか確認のために調べつつ、失敗と試行錯誤があって一日かかりました。
16GB SD カードの mkfs.ext4 は Notebook PC でやりました。実機(カーネル: 2.6.32-5-kirkwood (Debian 2.6.32-31))ではできませんでした。 8GB miniSD カードをアダプタつけた方は実機でも mkfs できました。
インストール対象は、昨年(2010年) FSIJ で購入した Kuro Sheeva です。
U-boot を書き込んで更新する
入っている U-boot が古いので更新します。 Setting Up OpenOCD Under Linux を参照のこと。
古い U-boot 自身から更新する方法もありますが、こちらは USB が動かなくて TFTP のサーバーを用意することになるので、やめ。
新しめの OpenOCD が squeeze にあるので、これを使って書き込むこめます。
まず、u-boot のバイナリを取ってきます。Martin Michlmayr さんのところから拝借しました。 こちら: u-boot.bin-3.4.19
Sheeva に電源を入れて、PC に USB でつなぎます。僕は OpenOCD を使うため に /etc/modprobe.d/blacklist.conf に
# blacklist ftdi_sio
と書いてあります。そうでない場合は、rmmod ftdi_sio しましょう。
書き込みは、こんな感じです(openocd は squeeze のではありません):
$ openocd -f board/sheevaplug.cfg -c init -c sheevaplug_reflash_uboot -c exit Open On-Chip Debugger 0.5.0-dev-00629-g778b789-dirty (2010-12-02-17:53) Licensed under GNU GPL v2 For bug reports, read http://openocd.berlios.de/doc/doxygen/bugs.html Info : only one transport option; autoselect 'jtag' 2000 kHz trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain adapter_nsrst_delay: 200 jtag_ntrst_delay: 200 dcc downloads are enabled Warn : use 'feroceon.cpu' as target identifier, not '0' sheevaplug_load_uboot Info : clock speed 2000 kHz Info : JTAG tap: feroceon.cpu tap/device found: 0x20a023d3 (mfg: 0x1e9, part: 0x0a02, ver: 0x2) Info : Embedded ICE version 0 Info : feroceon.cpu: hardware has 1 breakpoint/watchpoint unit target state: halted target halted in ARM state due to debug-request, current mode: Supervisor cpsr: 0x000000d3 pc: 0xffff0000 MMU: disabled, D-Cache: disabled, I-Cache: disabled NAND flash device 'NAND 512MiB 3,3V 8-bit (Samsung)' found erased blocks 0 to 5 on NAND flash device #0 'NAND 512MiB 3,3V 8-bit' $
書き込むのに時間は 2分かかりません。シェルプロンプトまでこなくて止まっちゃうこともあります。
U-boot の設定 (その1)
書き込めたら、U-boot を設定します。Sheeva をリセットします。
PC で ftdi_sio ドライバを load します。
# modprobe ftdi_sio
これでシリアルでつながります。僕は古き UUCP の中の cu を使ってます。:
$ cu -l /dev/ttyUSB1 -s 115200
U-boot を Enter で止めて、下記のコマンドを実行。:
setenv mainlineLinux yes setenv arcNumber 2678 saveenv reset
Debian インストーラを起動する
USBメモリに Debian インストーラを置いて、下記のように u-boot で入力しました。:
usb start fatload usb 0:1 0x00800000 /uImage fatload usb 0:1 0x01100000 /uInitrd
それで、:
setenv bootargs console=ttyS0,115200n8 base-installer/initramfs-tools/driver-policy=most bootm 0x00800000 0x01100000
SD カードに Debian をインストール
SD カードを挿入してこれにインストールする。パーティションは全体で一つとしました。
下記のタスクを選択してインストール。
- DNS server
- SSH server
- System utilities
U-boot の設定 (その2)
SD カードから読むようにして boot するようにする。:
setenv bootargs_console console=ttyS0,115200 setenv bootcmd_mmc 'mmcinit; ext2load mmc 0:1 0x00800000 /uImage; ext2load mmc 0:1 0x01100000 /uInitrd' setenv bootcmd 'setenv bootargs $(bootargs_console); run bootcmd_mmc; bootm 0x00800000 0x01100000' saveenv
boot させる。:
boot
パッケージの整理
下記のものは削除。apt-get remove --purge
- dc
- discover
- mutt
- nano
- nfs-common
- portmap
- tcpd
- whois
- xauth
- texinfo
- ftp
- lwresd
さらに、apt-get autoremove --purge すると下記もなくなります。
- libpth20
- libdiscover2
- libx11-data
- libxmuu1
- libnss-lwres
- libxcb1
- libxau6
- libxdmcp6
- libx11-6
- libgpgme11
- discover-data
- libxext6
パッケージの導入
下記のパッケージを apt-get install でインストール。
- mtd-utils
- ntpdate
ここまでで SD カードに Debian がインストールできました。
時計の設定
ntpdate で時刻が設定されたら hwclock -w で書き込んでおきます。
内蔵 flash ROM をシステムに使う
SD カードに一旦いれましたが、システムは内蔵の flash ROM に UBIFS で入れます。:
ubiformat /dev/mtd2 -s 512 ubiattach /dev/ubi_ctrl -m 2 ubimkvol /dev/ubi0 -N rootfs -m mount -t ubifs ubi0:rootfs /mnt
として flash ROM を UBIFS として設定してマウント。
ここに SD カードの内容をコピー。
mkdir /tmp/rootfs mount -o bind / /tmp/rootfs/ cd /tmp/rootfs sync cp -a . /mnt/
このファイルシステムを使うように、/etc/fstab を作ります。
cat <<EOF > /mnt/etc/fstab /dev/root / ubifs defaults,noatime,rw 0 0 tmpfs /var/run tmpfs size=1M,rw,nosuid,mode=0755 0 0 tmpfs /var/lock tmpfs size=1M,rw,noexec,nosuid,nodev,mode=1777 0 0 tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0 EOF
で、リブート。:
shutdown -r now
U-boot で下記のように設定を加えました。
setenv bootargs_root 'ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs' setenv bootcmd 'setenv bootargs $(bootargs_console) $(bootargs_root); run bootcmd_mmc; bootm 0x00800000 0x01100000' saveenv
別の SD カードに /boot と /home を
その後、もう一つの SD カードに /boot と /home を用意して、/etc/fstab を変更し、もともとあった /boot と /home の内容をこちらに移して運用することにしました。
/etc/ssh/sshd_config の設定
こちらでは、SSH の login で root を許しません。パスワードでの login も止めます。
PermitRootLogin no PasswordAuthentication no