Sheeva Plug への Debian Wheezy のインストールに関するページです。

debootstrap を使う方法

基本的には debian:debootstrap:kirkwood [diGriz's Chunk of Web]のやり方にしたがう。SheevaPlug/Debian/Squeeze と同じ。

母艦での作業

rootfs のイメージファイルを作成する作業を母艦上で行う。今回は、VirtualBox 上の Debian Wheezy x86 を母艦とした。具体的な作業内容は、debian:debootstrap [diGriz's Chunk of Web]Installing Debian on the Marvell SheevaPlug and OpenRD にほぼ準拠している。

debootstrap によるルートファイルシステムの構築

母艦に以下のパッケージをインストールする。

  • debootstrap
  • qemu-user-static
  • binfmt-support
  • uboot-mkimage
$ sudo apt-get install debootstrap qemu-user-static binfmt-support uboot-mkimage

作業用ディレクトリを作成し、debootstrap を実行する。

$ mkdir workdir
$ cd workdir
$ sudo debootstrap --verbose --foreign --arch=armel --variant=minbase \
  --include=module-init-tools,udev,aptitude,ifupdown,iproute,pump,nano,vim-tiny, \
  wget,netbase,locales,openssh-server,openssh-client,bzip2,unzip,ntpdate, \
  uboot-mkimage,devio,mtd-utils,isc-dhcp-client \
  wheezy rootfs http://ftp.jp.debian.org/debian

この段階ではターゲット用のパッケージが展開されただけなので、qemu-user-static を利用して debootstrap のセカンドステージを実行する。

$ sudo cp /usr/bin/qemu-arm-static rootfs/usr/bin/
$ sudo chroot rootfs
# ./debootstrap/debootstrap --second-stage

カーネルイメージとubifsのイメージファイル作成と書き込みに必要なパッケージをインストールする。

# apt-get install linux-image-3.0.2.4-kirkwood uboot-mkimage tftp-hpa mtd-utils

細々とした設定をする。

# apt-get clean
# export LANG=C; dpkg-reconfigure tzdata
geographic area -> 6 (Asia)
city or region -> 75 (Tokyo) を選択
# passwd
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
# exit
# rm rootfs/usr/bin/qemu-arm-static 

最後に不要なファイルを削除し、いくつかの設定ファイルを作成する。

# find rootfs/var/lib/apt/lists -type f -delete
# rm -r rootfs/dev/.udev
# : > rootfs/etc/hostname
# : > rootfs/etc/resolv.conf
# ln -s /dev/null rootfs/etc/blkid.tab
# ln -s /proc/mounts rootfs/etc/mtab
# : > rootfs/etc/udev/rules.d/70-persistent-net.rules
# echo 'APT { Install-Recommends "false"; };' > rootfs/etc/apt/apt.conf.d/no-recommends
# sed -i -e '/^RAM\(RUN\|LOCK\)=/ s/^\(.*\)=.*$/\1=yes/' rootfs/etc/default/rcS
# echo CONCURRENCY=shell >> rootfs/etc/default/rcS
# cat <<EOF > rootfs/etc/network/interfaces
> # This file describes the network interfaces available on your system
> # and how to activate them. For more information, see interfaces(5).
>
> # The loopback network interface
> auto lo
> iface lo inet loopback
>
> # The primary network interface
> allow-hotplug eth0
> iface eth0 inet dhcp
> EOF

# cat <<EOF > rootfs/etc/apt/sources.list
> deb http://ftp.jp.debian.org/debian/ wheezy main contrib non-free
> #deb-src http://ftp.jp.debian.org/debian/ wheezy main contrib non-free
>
> deb http://security.debian.org/ wheezy/updates main contrib non-free
> #deb-src http://security.debian.org/ wheezy/updates main contrib non-free
>
> # wheezy-updates, previously known as 'volatile'
> deb http://ftp.jp.debian.org/debian/ wheezy-updates main contrib non-free
> #deb-src http://ftp.jp.debian.org/debian/ wheezy-updates main contrib non-free
> EOF

/etc/fstab はインストール先の媒体により、適宜変更する。

# vi rootfs/etc/fstab
  • NAND flash の場合
    # /etc/fstab: static file system information.
    #
    # <file system>	<mount point>	<type>	<options>	<dump>	<pass>
    proc		/proc		proc	defaults	0	0
    Wheezy では /run は tmpfs としてマウントされるので、/etc/fstab に記述する必要はない。
    さらに、/etc/default/tmpfs を編集する。
    # vi rootfs/etc/default/tmpfs
    
    #RAMTMP=noRAMTMP=yes
  • SDカード(partition 1: /boot(ext2), partition 2: swap, partition 3: /(ext3))の場合
    root@ubuntu13:/somewhere/workdir# cat <<EOF > rootfs/etc/fstab
    # /etc/fstab: static file system information.
    #
    # <file system> <mount point>   <type>  <options>               <dump>  <pass>
    proc            /proc           proc    defaults                0       0
    /dev/mmcblk0p1  /boot           ext2    defaults                0       0
    /dev/mmcblk0p3  /               ext2    errors=remount-ro       0       0
    /dev/mmcblk0p2  swap            swap    defaults                0       0
    EOF

シリアルコンソールが使えるように /etc/inittab を書き換える

# Example how to put a getty on a serial line (for a terminal)
#
T0:23:respawn:/sbin/getty -L ttyS0 115200 linux
#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100

NAND にインストールする場合は、doc など不要なファイルを削除して容量を節約する。

$ sudo find rootfs/usr/share/doc/ -type f -exec rm -f {} \;
$ sudo find rootfs/usr/share/man/ -type f -exec rm -f {} \;
$ sudo find rootfs/usr/share/doc-base/ -type f -exec rm -f {} \;

PlugComputer.org – Reduce Flash Writesにしたがい、Flashへの不要なアクセスを減らすように設定を変更する。

  • /etc/sysctl.conf
    以下を追加する。
    #
    # PlugComputer.org -- Reduce Flash Writes
    # http://www.plugcomputer.org/Documentation/reduce-flash-writes/
    #
    # Reduce Swapping
    vm.swappiness=0
    #
    # Enable Laptop Mode
    vm.laptop_mode=5
    #
    # Reduce Cache Writeback Time
    vm.dirty_writeback_centisecs=1500
    vm.dirty_expire_centisecs=1500
  • /etc/sysctl.d/10-process-security.conf
    以下の内容で作成する。
    vm.mmap_min_addr = 32768

UBIFS イメージの作成

インストールした rootfs から uImage と uInitrd を作成する。(なお、uInitrd は ubifs イメージを NAND フラッシュに書き込む際の起動時にだけ使う。)

# mkimage -A arm -O linux -T kernel  -C none -n uImage  -a 0x00008000 -e 0x00008000 -d rootfs/vmlinuz uImage
# mkimage -A arm -O linux -T ramdisk -C none -n uInitrd                             -d initrd.img.gz  uInitrd

# cat <<EOF > ubi.cfg
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_size=128MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
EOF

ubifsイメージファイルを作成する前の準備。

# SUBPAGE=512
# MIN_IO_SIZE=2048
# PEB_SIZE=131072
# FLASH_MB=512
# UBOOT_MB=1
# KERNEL_MB=4
# PART_MB=$(( FLASH_MB-UBOOT_MB-KERNEL_MB ))
# echo $PART_MB
507
# [ "$((2*SUBPAGE))" -lt "$MIN_IO_SIZE" ] && LEB_SIZE=$(( PEB_SIZE-MIN_IO_SIZE )) || LEB_SIZE=$(( PEB_SIZE- 2*MIN_IO_SIZE ))
# MAX_LEB_COUNT=$(( (PART_MB*1024*1024)/LEB_SIZE +1 ))

ubifsイメージファイルを作成する。

# mkfs.ubifs -v -r rootfs -m $MIN_IO_SIZE -e $LEB_SIZE -c $MAX_LEB_COUNT -o ubifs.img
mkfs.ubifs
	root:         rootfs/
	min_io_size:  2048
	leb_size:     129024
	max_leb_cnt:  4121
	output:       ubifs.img
	jrn_size:     8388608
	reserved:     0
	compr:        lzo
	keyhash:      r5
	fanout:       8
	orph_lebs:    1
	space_fixup:  0
	super lebs:   1
	master lebs:  2
	log_lebs:     5
	lpt_lebs:     2
	orph_lebs:    1
	main_lebs:    851
	gc lebs:      1
	index lebs:   16
	leb_cnt:      862
	UUID:         75559222-FF2C-4D92-A20F-7E0D92216770
Success!

# ubinize -v -m $MIN_IO_SIZE -s $SUBPAGE -p $PEB_SIZE ubi.cfg -o ubi.img
ubinize: LEB size:                  129024
ubinize: PEB size:                  131072
ubinize: min. I/O size:             2048
ubinize: sub-page size:             512
ubinize: VID offset:                512
ubinize: data offset:               2048
ubinize: UBI image sequence number: 408237854
ubinize: loaded the ini-file "ubi.cfg"
ubinize: count of sections: 1

ubinize: parsing section "ubifs"
ubinize: mode=ubi, keep parsing
ubinize: volume type: dynamic
ubinize: volume ID: 0
ubinize: volume size: 134217728 bytes
ubinize: volume name: rootfs
ubinize: volume alignment: 1
ubinize: autoresize flags found
ubinize: adding volume 0
ubinize: writing volume 0
ubinize: image file: ubifs.img

ubinize: writing layout volume
ubinize: done

# ls -lh uImage uInitrd ubi.img
-rw-r--r-- 1 root root 1.6M  1月  5 13:30 uImage
-rw-r--r-- 1 root root  74M  1月  5 13:31 uInitrd
-rw-r--r-- 1 root root 108M  1月  5 13:55 ubi.img

実機でNANDに書き込み

uImage, uInitrd, ubi.img を tftp サーバに転送して、SheevaPlug を再起動して、シリアルコンソールで U-Boot のメニューに入り、NAND から起動するように環境変数を変更する。

Marvell>> setenv mainlineLinux yes
Marvell>> setenv arcNumber 2097
    Open-rd base: 2325
    Open-rd client: 2361
    Open-rd- Ultimate: 2884

Marvell>> setenv mtdids nand0=nand_mtd
Marvell>> setenv mtdparts mtdparts=nand_mtd:0x100000@0x000000(uboot),0x400000@0x100000(uImage),0x1fb00000@0x500000(root)

Marvell>> setenv x_bootcmd_kernel nand read 0x1000000 uImage
Marvell>> setenv x_bootargs console=ttyS0,115200 panic=10 ubi.mtd=root
Marvell>> setenv x_bootargs_root root=ubi0:rootfs rootfstype=ubifs rw
Marvell>> setenv bootcmd '${x_bootcmd_kernel setenv bootargs ${x_bootargs} ${x_bootargs_root}; bootm 0x1000000'};

Marvell>> saveenv
Marvell>> reset

再起動後、TFTP サーバから uImage をダウンロードして NAND に書き込む。

Marvell>> &color(blue){setenv ipaddr 192.168.x.50);
Marvell>> setenv serverip 192.168.x.1
Marvell>> tftp 0x1000000 uImage
Marvell>> nand erase 0x100000 0x400000
Marvell>> nand write 0x1000000 uImage

uInitrd をダウンロードして、uImage と uInitrd を使って起動する。(この起動は一度きりなので、環境変数は保存しない。)

Marvell>> tftp 0x2000000 uInitrd
Marvell>> setenv bootargs ${x_bootargs} root=/dev/ram0 rdinit=/sbin/init
Marvell>> bootm 0x1000000 0x2000000

起動したら、DHCP で IP アドレスが取得できているはずなので、TFTP サーバから ubi.img をダウンロードして NAND に書き込む。

# mount /tmp/ -o remount,size=256M
# tftp -m binary 192.168.1`x.1 -c get ubi.img /tmp/ubi.img
# ubidetach /dev/ubi_ctrl -m 2
# ubiformat -s 512 -f /tmp/ubi.img /dev/mtd2
# reboot

起動

U-Boot 2014.10-rc3-17415-g8fdd6f0 (Dec 25 2014 - 23:06:29)
OpenRD-Base

SoC:   Kirkwood 88F6281_A0
DRAM:  512 MiB
WARNING: Caches not enabled
NAND:  512 MiB
MMC:   MVEBU_MMC: 0
In:    serial
Out:   serial
Err:   serial
Net:   egiga0
88E1116 Initialized on egiga0
Warning: Your board does not use generic board. Please read
doc/README.generic-board and take action. Boards not
upgraded by the late 2014 may break or be removed.
Hit any key to stop autoboot:  0 

NAND read: device 0 offset 0x100000, size 0x400000
 4194304 bytes read: OK
## Booting kernel from Legacy Image at 01000000 ...
   Image Name:   uImage
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1613272 Bytes = 1.5 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 3.2.0-4-kirkwood (debian-kernel@lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 Debian 3.2.63-2+deb7u2
[    0.000000] CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=00053977
[    0.000000] CPU: VIVT data cache, VIVT instruction cache
[    0.000000] Machine: Marvell OpenRD Base Board
[    0.000000] Memory policy: ECC disabled, Data cache writeback
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
[    0.000000] Kernel command line: console=ttyS0,115200 panic=10 ubi.mtd=root root=ubi0:rootfs rootfstype=ubifs rw realtime
[    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Memory: 512MB = 512MB total
[    0.000000] Memory: 514968k/514968k available, 9320k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xe0800000 - 0xfe800000   ( 480 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xe0000000   ( 512 MB)
[    0.000000]     modules : 0xbf000000 - 0xc0000000   (  16 MB)
[    0.000000]       .text : 0xc0008000 - 0xc03e85c0   (3970 kB)
[    0.000000]       .init : 0xc03e9000 - 0xc040d000   ( 144 kB)
[    0.000000]       .data : 0xc040e000 - 0xc0448ca0   ( 236 kB)
[    0.000000]        .bss : 0xc0448cc4 - 0xc04ac35c   ( 398 kB)
[    0.000000] NR_IRQS:114
[    0.000000] sched_clock: 32 bits at 200MHz, resolution 5ns, wraps every 21474ms
[    0.000000] Console: colour dummy device 80x30
[   13.958817] Calibrating delay loop... 1196.85 BogoMIPS (lpj=5984256)
[   14.048702] pid_max: default: 32768 minimum: 301
[   14.048826] Security Framework initialized
[   14.048898] Mount-cache hash table entries: 512
[   14.049226] Initializing cgroup subsys cpuacct
[   14.049250] Initializing cgroup subsys memory
[   14.049275] Initializing cgroup subsys devices
[   14.049286] Initializing cgroup subsys freezer
[   14.049296] Initializing cgroup subsys net_cls
[   14.049304] Initializing cgroup subsys blkio
[   14.049324] Initializing cgroup subsys perf_event
[   14.049411] CPU: Testing write buffer coherency: ok
[   14.050658] devtmpfs: initialized
[   14.052462] print_constraints: dummy: 
[   14.052704] NET: Registered protocol family 16
[   14.053488] Kirkwood: MV88F6281-A0, TCLK=200000000.
[   14.053502] Feroceon L2: Enabling L2
[   14.053537] Feroceon L2: Cache support initialised.
[   14.054798] Kirkwood PCIe port 0: 
[   14.054805] link down, ignoring
[   14.056533] bio: create slab <bio-0> at 0
[   14.056913] vgaarb: loaded
[   14.057436] Switching to clocksource orion_clocksource
[   14.071582] NET: Registered protocol family 2
[   14.081790] IP route cache hash table entries: 4096 (order: 2, 16384 bytes)
[   14.082403] TCP established hash table entries: 16384 (order: 5, 131072 bytes)
[   14.082755] TCP bind hash table entries: 16384 (order: 4, 65536 bytes)
[   14.082933] TCP: Hash tables configured (established 16384 bind 16384)
[   14.082942] TCP reno registered
[   14.082951] UDP hash table entries: 256 (order: 0, 4096 bytes)
[   14.082972] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[   14.083174] NET: Registered protocol family 1
[   14.083357] NetWinder Floating Point Emulator V0.97 (double precision)
[   14.083818] audit: initializing netlink socket (disabled)
[   14.083851] type=2000 audit(0.110:1): initialized
[   14.084909] VFS: Disk quotas dquot_6.5.2
[   14.084991] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[   14.085090] JFFS2 version 2.2. (NAND) (SUMMARY)  © 2001-2006 Red Hat, Inc.
[   14.085407] msgmni has been set to 1005
[   14.086916] alg: No test for stdrng (krng)
[   14.087027] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
[   14.087041] io scheduler noop registered
[   14.087048] io scheduler deadline registered
[   14.087101] io scheduler cfq registered (default)
[   14.087176] mv_xor_shared mv_xor_shared.0: Marvell shared XOR driver
[   14.087207] mv_xor_shared mv_xor_shared.1: Marvell shared XOR driver
[   14.117503] mv_xor mv_xor.0: Marvell XOR: ( xor cpy )
[   14.157502] mv_xor mv_xor.1: Marvell XOR: ( xor fill cpy )
[   14.197501] mv_xor mv_xor.2: Marvell XOR: ( xor cpy )
[   14.237501] mv_xor mv_xor.3: Marvell XOR: ( xor fill cpy )
[   14.237877] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
[   14.258393] serial8250.0: ttyS0 at MMIO 0xf1012000 (irq = 33) is a 16550A
[   14.681959] console [ttyS0] enabled
[   14.686459] NAND device: Manufacturer ID: 0xad, Chip ID: 0xdc (Hynix NAND 512MiB 3,3V 8-bit)
[   14.694963] Scanning device for bad blocks
[   15.003240] Creating 3 MTD partitions on "orion_nand":
[   15.008489] 0x000000000000-0x000000100000 : "u-boot"
[   15.014384] 0x000000100000-0x000000500000 : "uImage"
[   15.020201] 0x000000500000-0x000020000000 : "root"
[   15.026417] UBI: attaching mtd2 to ubi0
[   15.030296] UBI: physical eraseblock size:   131072 bytes (128 KiB)
[   15.036590] UBI: logical eraseblock size:    129024 bytes
[   15.042025] UBI: smallest flash I/O unit:    2048
[   15.046748] UBI: sub-page size:              512
[   15.051389] UBI: VID header offset:          512 (aligned 512)
[   15.057246] UBI: data offset:                2048
[   15.843367] UBI: max. sequence number:       1047
[   15.862535] UBI: attached mtd2 to ubi0
[   15.866306] UBI: MTD device name:            "root"
[   15.871228] UBI: MTD device size:            507 MiB
[   15.876212] UBI: number of good PEBs:        4056
[   15.880939] UBI: number of bad PEBs:         0
[   15.885402] UBI: number of corrupted PEBs:   0
[   15.889868] UBI: max. allowed volumes:       128
[   15.894506] UBI: wear-leveling threshold:    4096
[   15.899232] UBI: number of internal volumes: 1
[   15.903689] UBI: number of user volumes:     1
[   15.908154] UBI: available PEBs:             0
[   15.912618] UBI: total number of reserved PEBs: 4056
[   15.917606] UBI: number of PEBs reserved for bad PEB handling: 40
[   15.923728] UBI: max/mean erase counter: 3/1
[   15.928017] UBI: image sequence number:  186229835
[   15.932831] UBI: background thread "ubi_bgt0d" started, PID 28
[   15.939150] mousedev: PS/2 mouse device common for all mice
[   15.945068] rtc-mv rtc-mv: rtc core: registered rtc-mv as rtc0
[   15.951031] i2c /dev entries driver
[   15.954946] cpuidle: using governor ladder
[   15.959153] cpuidle: using governor menu
[   15.963860] TCP cubic registered
[   15.967103] NET: Registered protocol family 17
[   15.971599] Registering the dns_resolver key type
[   15.976802] registered taskstats version 1
[   15.981285] rtc-mv rtc-mv: setting system clock to 2015-01-05 07:32:27 UTC (1420443147)
[   15.989392] Initializing network drop monitor service
[   16.105890] UBIFS: mounted UBI device 0, volume 0, name "rootfs"
[   16.111943] UBIFS: file system size:   516225024 bytes (504126 KiB, 492 MiB, 4001 LEBs)
[   16.119991] UBIFS: journal size:       9033728 bytes (8822 KiB, 8 MiB, 71 LEBs)
[   16.127333] UBIFS: media format:       w4/r0 (latest is w4/r0)
[   16.133199] UBIFS: default compressor: lzo
[   16.137307] UBIFS: reserved for root:  0 bytes (0 KiB)
[   16.143307] VFS: Mounted root (ubifs filesystem) on device 0:13.
[   16.149782] Freeing init memory: 144K
INIT: version 2.88 booting
[info] Using makefile-style concurrent boot in runlevel S.
[ ok ] Starting the hotplug events dispatcher: udevd.
[....] Synthesizing the initial hotplug events...[   17.558930] mv643xx_eth: MV-643xx 10/100/1000 ethernet driver version 1.4
[   17.565851] mv643xx_eth smi: probed
done.
[   17.886051] mv643xx_eth_port mv643xx_eth_port.0: eth0: port 0 with MAC address 00:50:43:01:a1:85
[   17.925274] usbcore: registered new interface driver usbfs
[   17.940401] mmc0: mvsdio driver initialized, using GPIO 29 for card detection
[....] [   17.964535] usbcore: registered new interface driver hub
Waiting for /dev to be fully populated...[   17.996694] SCSI subsystem initialized
[   18.000604] usbcore: registered new device driver usb
[   18.057803] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[   18.064434] orion-ehci orion-ehci.0: Marvell Orion EHCI
[   18.079115] mmc0: host does not support reading read-only switch. assuming write-enable.
[   18.105593] orion-ehci orion-ehci.0: new USB bus registered, assigned bus number 1
[   18.113296] mmc0: new high speed SDHC card at address 1234
[   18.153241] mmcblk0: mmc0:1234 SA04G 3.68 GiB 
[   18.170238]  mmcblk0: p1 p2
[   18.179867] orion-ehci orion-ehci.0: irq 19, io mem 0xf1050000
[   18.197847] orion-ehci orion-ehci.0: USB 2.0 started, EHCI 1.00
[   18.203868] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[   18.210713] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   18.217975] usb usb1: Product: Marvell Orion EHCI
[   18.222698] usb usb1: Manufacturer: Linux 3.2.0-4-kirkwood ehci_hcd
[   18.229004] usb usb1: SerialNumber: orion-ehci.0
[   18.235004] hub 1-0:1.0: USB hub found
[   18.238973] hub 1-0:1.0: 1 port detected
[   18.243460] sata_mv sata_mv.0: slots 32 ports 2
[   18.267314] scsi0 : sata_mv
[   18.275796] scsi1 : sata_mv
[   18.281603] ata1: SATA max UDMA/133 irq 21
[   18.285735] ata2: SATA max UDMA/133 irq 21
[   18.637491] ata1: SATA link down (SStatus 0 SControl F300)
[   18.987480] ata2: SATA link down (SStatus 0 SControl F300)
done.
[ ok ] Activating swap...done.
[ ok ] Cleaning up temporary files... /tmp.
[ ok ] Activating lvm and md swap...done.
[....] Checking file systems...fsck from util-linux 2.20.1
done.
[ ok ] Mounting local filesystems...done.
[ ok ] Activating swapfile swap...done.
[ ok ] Cleaning up temporary files....
[ ok ] Setting kernel variables ...done.
[ ok ] Configuring network interfaces...done.
[....] Cleaning up temporary files...[   23.344980] NET: Registered protocol family 10
. ok 
INIT: Entering runlevel: 2
[info] Using makefile-style concurrent boot in runlevel 2.
[   23.810589] ADDRCONF(NETDEV_UP): eth0: link is not ready
[ ok ] Starting NTP server: ntpd.
[ ok ] Starting OpenBSD Secure Shell server: sshd.

Debian GNU/Linux 7 openrd01 ttyS0

hostname login: 

ディスク、メモリ使用量

ntp など若干のパッケージをインストールした後の状態。

  • ディスク
    # df -m
    ファイルシス   1M-ブロック  使用 使用可 使用% マウント位置
    rootfs                 463   173    290   38% /
    ubi0:rootfs            463   173    290   38% /
    tmpfs                   51     1     51    1% /run
    tmpfs                    5     0      5    0% /run/lock
    tmpfs                   10     0     10    0% /dev
    tmpfs                  101     0    101    0% /run/shm
    tmpfs                  101     0    101    0% /tmp
  • メモリ
    # free
                 total       used       free     shared    buffers     cached
    Mem:        515132      22620     492512          0          0      10632
    -/+ buffers/cache:      11988     503144
    Swap:            0          0          0

ルートファイルシステムの tar ball

root のパスワードは SheevaPlug の 初期パスワードと同じ。

設定

IPv6 の無効化

大学ではまだ IPv6 のメリットがないので、IPv6 を無効化しておく。
/etc/modprobe.d/ipv6.conf を以下の内容で作成する。

install ipv6 /bin/false

再起動すると、ipv6 モジュールが読み込まれなくなる。

(情報:Re: Disable loading ipv6 on wheezy NSLU2 - resolved

NAND への書き込み回数削減

tmpfs を活用して NAND への書き込みを極力減らす。

HDD レスシステムでフラッシュデバイスへのアクセスを極力減らす

Installing Debian on a Sheevaplug into Flash | Matthias Blaicher にしたがって NAND ブートさせる方法

母艦を使う方法で NAND ブートを試みたがうまくいかなかったので、Debian/Squeeze では成功しているこの方法を試してみた。ただし、2013-09-14 現在の stable 版のインストーラは Wheezy 用となっているが、手順はほとんど同じ。

U-Boot の更新

自分でビルドした U-Boot 2013.07 でもよかったと思うが、念の為Installing Debian on a Sheevaplug into Flash | Matthias Blaicher で薦めている git 版に更新した。書き換えは OpenOCD を使って行った。

$ wget http://static.blaicher.com/msc/u-boot.kwb
$ cp u-boot.kwb uboot.bin
$ sudo openocd -s /usr/share/openocd/scripts/ \
    -f interface/sheevaplug.cfg -f board/sheevaplug.cfg -c init \
    -c sheevaplug_reflash_uboot

U-Boot 書き換え後は環境変数が初期化されるので、MAC アドレスを設定して保存しておく。

Marvell>> setenv ethaddr 00:50:43:xx:xx:xx
Marvell>> saveenv

インストーラを用いた USB フラッシュメモリへのインストール

Debian のインストーラでは直接 NAND にインストールすることはできないので、一旦USB フラッシュメモリへ最小限の Wheezy をインストールして、それを使って NAND にインストールすることになる。

別途用意した TFTP サーバに netboot 用の uImage と uInitrd をダウンロードしておく。

$ cd /srv/tftp
$ sudo wget ftp://ftp.debian.org/debian/dists/stable/main/installer-armel/current/images/kirkwood/netboot/marvell/sheevaplug/uImage
$ sudo wget ftp://ftp.debian.org/debian/dists/stable/main/installer-armel/current/images/kirkwood/netboot/marvell/sheevaplug/uInitrd

SheevaPlug の U-Boot メニューで環境変数を設定し、TFTP サーバから uImage と uInitrd をダウンロードしてインストーラを起動する。

Marvell>> setenv serverip 192.168.xxx.aaa	# TFTP サーバの IP アドレスを指定
Marvell>> setenv ipaddr 192.168.xxx.bbb		# SheevaPlug の IP アドレスを指定
Marvell>> tftpboot 0x00800000 uImage
Marvell>> tftpboot 0x01100000 uInitrd
Marvell>> setenv bootargs console=ttyS0,115200n8 base-installer/initramfs-tools/driver-policy=most
Marvell>> bootm 0x00800000 0x01100000
Marvell>> run bootcmd

インストーラが起動するので、画面の指示にしたがって Wheezy をインストールする。

NAND へのインストール

USB フラッシュメモリへのインストールが終了したら、USB フラッシュメモリで起動する。

Marvell>> setenv bootargs_console console=ttyS0,115200
Marvell>> setenv bootcmd_usb 'usb start; ext2load usb 0:1 0x00800000 /uImage; ext2load usb 0:1 0x01100000 /uInitrd'
Marvell>> setenv bootcmd 'setenv bootargs $(bootargs_console); run bootcmd_usb; bootm 0x00800000 0x01100000'
Marvell>> run bootcmd

Wheezy が立ち上がってきたら root でログインして、mtd-utils をインストールする。

# apt-get install mtd-utils

NAND フラッシュを ubifs でフォーマットして /mnt にマウントする。

# ubiformat /dev/mtd2 -s 512
# ubiattach /dev/ubi_ctrl -m 2
# ubimkvol /dev/ubi0 -N rootfs -m
# mkfs.ubifs --compr=zlib /dev/ubi0_0
# mount -t ubifs ubi0:rootfs /mnt

USB フラッシュメモリから NAND フラッシュに必要なファイルをコピーする。

# mkdir /tmp/rootfs
# mount -o bind / /tmp/rootfs/
# cp -a /tmp/rootfs/* /mnt/
# cp -a /boot /mnt/

/mnt/etc/fstab を NAND ブート用に編集する。Wheezy から /var/run と /var/lock はそれぞれ /run と /run/lock へのシンボリックリンクになったので、/etc/fstab に記述しなくて良い。(参考:Debian Wheezy mounts /tmp as tmpfs by default – not anymore | Legen ... d(i)ary!

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
ubi0:rootfs     /               ubifs   defaults,noatime,rw                 0 0

NAND からブートする

U-Boot の環境変数を以下のように変更し、NAND フラッシュから起動する。

Marvell>> setenv mtdids nand0=orion_nand
Marvell>> setenv mtdparts mtdparts=orion_nand:0xa0000@0x0(u-boot),0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs)
Marvell>> setenv bootargs_ubi 'console=ttyS0,115200 ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs'
Marvell>> setenv bootcmd_ubi 'ubi part nand0,2; ubifsmount ubi0:rootfs; ubifsload 0x1100000 /boot/uInitrd; ubifsload 0x800000 /boot/uImage'
Marvell>> setenv bootcmd 'setenv bootargs $(bootargs_ubi); run bootcmd_ubi; bootm 0x00800000 0x01100000'
Marvell>> saveenv
Marvell>> run bootcmd

ubifsmount のオプションを上記赤字のように変更しないと、例のエラーが出て起動しなかった。

UBI error: vtbl_check: volume table check failed: record 0, error 9
UBI error: ubi_init: cannot attach mtd1
UBI error: ubi_init: UBI error: cannot initialize UBI, error -22
UBI init error 22
UBIFS error (pid 0): ubifs_get_sb: cannot open "rootfs", error -22
UBIFS error (pid 0): ubifs_mount: Error reading superblock on volume 'rootfs' errno=-22!

NAND の寿命を伸ばすための設定

NAND フラシュへの書き込みを減らすために、いくつかの設定ファイルを変更する。

  • /etc/sysctl.conf
    以下の内容を追加する。
    #
    # PlugComputer.org -- Reduce Flash Writes
    # http://www.plugcomputer.org/Documentation/reduce-flash-writes/
    #
    # Reduce Swapping
    vm.swappiness=0
    #
    # Enable Laptop Mode
    vm.laptop_mode=5
    #
    # Reduce Cache Writeback Time
    vm.dirty_writeback_centisecs=1500
    vm.dirty_expire_centisecs=1500
  • /etc/default/tmpfs
    赤字の箇所を変更する。
    # Configuration for tmpfs filesystems mounted in early boot, before
    # filesystems from /etc/fstab are mounted.  For information about
    # these variables see the tmpfs(5) manual page.
    
    # /run is always mounted as a tmpfs on systems which support tmpfs
    # mounts.
    
    # mount /run/lock as a tmpfs (separately from /run).  Defaults to yes;
    # set to no to disable (/run/lock will then be part of the /run tmpfs,
    # if available).
    RAMLOCK=yes
    
    # mount /run/shm as a tmpfs (separately from /run).  Defaults to yes;
    # set to no to disable (/run/shm will then be part of the /run tmpfs,
    # if available).
    RAMSHM=yes
    
    # mount /tmp as a tmpfs.  Defaults to no; set to yes to enable (/tmp
    # will be part of the root filesystem if disabled).  /tmp may also be
    # configured to be a separate mount in /etc/fstab.
    RAMTMP=yes
    
    # Size limits.  Please see tmpfs(5) for details on how to configure
    # tmpfs size limits.
    #TMPFS_SIZE=20%VM
    #RUN_SIZE=10%
    #LOCK_SIZE=5242880 # 5MiB
    #SHM_SIZE=
    #TMP_SIZE=
    
    # Mount tmpfs on /tmp if there is less than the limit size (in kiB) on
    # the root filesystem (overriding RAMTMP).
    #TMP_OVERFLOW_LIMIT=1024

NAND 使用量の削減

NAND からブートする場合、容量がわずか500MBほどしかないので、不要なファイルを削除するとよい。

# find /usr/share/doc/ -type f -exec rm -f {} \;
# find /usr/share/man/ -type f -exec rm -f {} \;
# find /usr/share/doc-base/ -type f -exec rm -f {} \;

SSDOptimization - Debian Wiki あたりも参考になるかも。

ディスク、メモリ使用量

ntp など若干のパッケージをインストールした後の状態。

  • ディスク
    $ df -m
    Filesystem     1M-blocks  Used Available Use% Mounted on
    rootfs               463   215       248  47% /
    udev                  10     0        10   0% /dev
    tmpfs                 51     1        51   1% /run
    ubi0:rootfs          463   215       248  47% /
    tmpfs                  5     0         5   0% /run/lock
    tmpfs                101     0       101   0% /run/shm
    tmpfs                101     0       101   0% /tmp
  • メモリ
    $ free
                 total       used       free     shared    buffers     cached
    Mem:        515128      29920     485208          0          0      14076
    -/+ buffers/cache:      15844     499284
    Swap:            0          0          0

参考


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-01-05 (月) 17:55:34 (1295d)