カーネルとユーザランドの統合単一イメージ †
機能について †
- ログイン
- シリアルコンソール(ttySC1)
- USBシリアル(ttyUSB0)
- telnetよりアクセス可能(user=root,passwd=landisk)
ただしセキュリティは未考慮です。
- ネットワーク
- DHCPクライアント機能によりIPアドレスを自動で設定
- wget, telnetd
- レスキュー機能
- システム構築/修復に役立つコマンドを収録
本イメージ単体でシステム構築が可能です。
fdisk, mkfs.(ext2,ext3,reisrfs),fsck.(ext2,ext3,reisrfs),lilo, etc.
- usb-strageを使用可能
USB経由で、CompactFlash, MicroDrive, HDD, USB-stick等を使用可能。
構成の詳細 †
- kernel
- linux-2.6.22-rc2-landisk ベース
- usb-strageとusb-serial(pl2303, ftdi_sio) をカーネル組み込む済み
- initramfs 内蔵コマンド (詳細はinitramfs.tgz を参照)
- lilo
- kexec, shutdown(script)
- strace
- reiserfs関連 … mk.reiserfs, fsck.reiserfs
- landisk制御 … ledctrl, btnctrl, gio2
- busybox
BusyBox v1.2.1 (2007.05.25-11:04+0000) multi-call binary
Currently defined functions:
[, [[, addgroup, adduser, adjtimex, ar, arping, ash, awk, basename, bbconfig,
bunzip2, busybox, bzcat, cal, cat, catv, chattr, chgrp, chmod, chown, chroot,
chvt, cksum, clear, cmp, comm, cp, cpio, crond, crontab, cut, date, dc,
dd, deallocvt, delgroup, deluser, devfsd, df, diff, dirname, dmesg, dnsd,
dos2unix, dpkg, dpkg-deb, du, dumpkmap, dumpleases, e2fsck, e2label, echo,
ed, egrep, eject, env, ether-wake, expr, fakeidentd, false, fbset, fdflush,
fdformat, fdisk, fgrep, find, findfs, fold, free, freeramdisk, fsck, fsck.ext2,
fsck.ext3, fsck.minix, ftpget, ftpput, fuser, getopt, getty, grep, gunzip,
gzip, halt, hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock,
id, ifconfig, ifdown, ifup, inetd, init, insmod, install, ip, ipaddr, ipcalc,
ipcrm, ipcs, iplink, iproute, iptunnel, kill, killall, klogd, lash, last,
length, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger,
login, logname, logread, losetup, ls, lsattr, lsmod, lzmacat, makedevs,
md5sum, mdev, mesg, mkdir, mke2fs, mkfifo, mkfs.ext2, mkfs.ext3, mkfs.minix,
mknod, mkswap, mktemp, modprobe, more, mount, mountpoint, msh, mt, mv, nameif,
nc, netstat, nice, nohup, nslookup, od, openvt, passwd, patch, pidof, ping,
ping6, pipe_progress, pivot_root, poweroff, printenv, printf, ps, pwd, rdate,
readlink, readprofile, realpath, reboot, renice, reset, rm, rmdir, rmmod,
route, rpm, rpm2cpio, run-parts, runlevel, rx, sed, seq, setarch, setconsole,
setkeycodes, setlogcons, setsid, sh, sha1sum, sleep, sort, start-stop-daemon,
stat, strings, stty, su, sulogin, sum, swapoff, swapon, switch_root, sync,
sysctl, syslogd, tail, tar, tee, telnet, telnetd, test, tftp, time, top,
touch, tr, traceroute, true, tty, tune2fs, udhcpc, udhcpd, umount, uname,
uncompress, uniq, unix2dos, unlzma, unzip, uptime, usleep, uudecode, uuencode,
vconfig, vi, vlock, watch, watchdog, wc, wget, which, who, whoami, xargs,
yes, zcat, zcip
メモ … 作成方法 †
- initramfsの補足事項
initramfsの構造は見てわかるとおり、rootfsになるファイル/ファイル構造そのものです。
initramfsの構築で最も重要なことは、ルート直下にinitを置く ことです。
- /initの例
下記は次のような動作を行う initの例です。
- ケース1:USBシリアルケーブルを接続して起動した場合は、initramfsから起動。
- ケース2:それ以外は/proc/cmdlineで指定されたrootデバイスから起動(※1)。
- ケース3:もし、rootデバイスが未指定だった場合は、initramfsから起動。
- その他 :rcSスクリプトの選択機能(青文字部分)
(※1)switch_root を使って、rootfsを指定のデバイスへ切り替えます。
#!/bin/sh
export PATH=/sbin:/bin:/usr/bin
/bin/mount -t proc proc /proc
# check cmdline device
CMDLINE=`cat /proc/cmdline`
BOOTLD=/etc/init.d/rcS
for param in $CMDLINE ; do
case "$param" in
root=/dev* ) ROOT=$(echo $param | cut -d= -f2-) ;;
bootld=* ) BOOTLD=$(echo $param | cut -d= -f2-) ;;
esac
done
echo "::sysinit:$BOOTLD" >> /etc/inittab
# set /dev/console
stty -F /dev/ttyUSB0 > /dev/null 2>&1
if [ $? -eq 0 ] ; then
ROOT=""
echo "ttySC1::askfirst:-/bin/sh" >> /etc/inittab
ln -sf ttyUSB0 /dev/console
else
ln -sf ttySC1 /dev/console
fi
# exec real init
if [ "$ROOT" = "" ] ; then
echo "INIT: boot from initramfs"
umount -l /proc
exec /sbin/init </dev/console >/dev/console 2>&1
else
echo "INIT: boot from $ROOT"
mkdir /new_root
mount -r $ROOT /new_root
umount -l /proc
exec /sbin/switch_root -c /dev/console /new_root /sbin/init
fi
- ケース1と3の補足
本ケースでは、その後、initramfs内の/sbin/initへ処理が移り、最終的には /etc/init.d/rcSにてシステムの初期化が行われます。
/etc/init.d/rcSはこんな感じです。
#! /bin/sh
# mount
/bin/mount -a
# Network
hostname landisk
ifup -a
# Daemon
inetd
btnctrl /etc/btn_action.conf &
ledctrl pwr=0 status=1 buzzer=10
/etc/network/interfacesはこんな感じです。
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
- Link address offset を変更
カーネルサイズが巨大になるため、オフセットを0x00800000→0x01000000へ変更。
つまり、Kernel-2.4 サイズ制限緩和パッチの(2')の値を大きくしてカーネルロードサイズの制限を緩和する。
(結果的には、今回、変更する必要なかったみたいです。)
Boot options --->
(0x01000000) Link address offset for booting
- USB serial, storageをカーネル組み込みへ
Device Drivers --->
USB support --->
<*> USB Mass Storage support
…
USB Serial Converter support --->
<*> USB Serial Converter support
[*] USB Serial Console device support (EXPERIMENTAL)
<*> USB FTDI Single Port Serial Driver (EXPERIMENTAL)
<*> USB Prolific 2303 Single Port Serial Driver
comment †
#comment
|