« Xandros sdbからの起動のお勉強 | トップページ | Xandros をsdbで起動成功! »

2009年5月20日 (水)

Xandros のinit比較

ここ最近Xandrosをsdbから起動出来ずスタック中。

そんな中、initファイルの編集でsdbがマウントできる(XEPC1.7)との情報をメールで頂いたが1.6.1と1.7ではinitの記述が違うようで応用できず。
昨夜はsdb起動出来ていた頃のXEPC1.6.1中文と出来ない標準Xandrosのinitファイルを比較してみた。
initファイルの中身はいちいちinitramfs-eeepc.imgを展開しないと見れないので記述しておく。
中身はほとんど同じでXEPC1.6.1版のほうが記述がやや多い(青字部

initの中身
黒字が標準Xandros、青字がXEPC1.6.1版オリジナル赤字がsdb起動用に変更部

-----------------------------------------------------------------
#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sys /sys
echo "0 0 0 0">/proc/sys/kernel/printk

if [ -n "$XANDROSBOOTDEBUG" ]; then
    /bin/busybox sh
    set -x
fi

/bin/insmod /modules/zlib_inflate.ko
/bin/insmod /modules/squashfs.ko

ROOT=`cat /proc/cmdline | sed 's/.*root=// ; s/ .*//'`
#VERSION=`cat /proc/version | cut -f3 -d" "`

mount -t ext3 -o ro $ROOT /mnt-system-stage
if [ $? -ne 0 ] ; then
    echo Could not mount OS on $ROOT. Starting debugging shell....
    /bin/busybox sh
fi

if [ -f /mnt-system-stage/root.sfs ] ; then
    mount -t squashfs -o loop,ro /mnt-system-stage/root.sfs /mnt-system
    if [ $? -ne 0 ] ; then
            echo Could not mount OS on $ROOT. Starting debugging shell....
            /bin/busybox sh
    fi
fi
if [ $? -ne 0 ] ; then
    echo Could not mount OS on $ROOT. Starting debugging shell....
    /bin/busybox sh
fi

if [ -n "$XANDROSSCAN" ]; then
    exec switch_root /mnt-system /sbin/scanuser.sh
fi

if [ -n "$XANDROSRESTORE" ]; then
    exec switch_root /mnt-system /sbin/formatuser.sh
fi

if [ -z "`grep nosplash /proc/cmdline`" ]; then
    echo -n "[?25l"
    cp /mnt-system/boot/startup.fb /dev/fb/0
fi

if [ -n "$XANDROSSAFEMODE" ]; then
    mount -t tmpfs -o rw,noatime,size=128M /dev/ram0 /mnt-user
el
if ! mount -t ext3 -o rw,noatime /dev/sdb2 /mnt-user; then
    echo Error mounting user partition. Must run filesystem scan!
    exec switch_root /mnt-system /sbin/scanuser.sh
fi

# Factory auto-format functionality
if [ -f /mnt-user/.autoformat ]; then
    umount /mnt-user
    exec switch_root /mnt-system /sbin/formatuser.sh -- --auto
fi

#insmod /mnt-system/lib/modules/$VERSION/kernel/fs/aufs/aufs.ko > /dev/null
mount -t aufs -o br:/mnt-user:/mnt-system none /mnt
if [ $? -ne 0 ]; then
    echo Could not mount aufs on USER partition. Starting debugging shell....
    /bin/busybox sh
fi

mount --move /mnt-system /mnt/.ro
umount -l /mnt-system-stage
mount --move /mnt-user /mnt/.rw

umount /sys
umount /proc

if [ -n "$INIT" ]; then
    if [ -n "$XANDROSBOOTDEBUG" ]; then
    exec switch_root /mnt $INIT </mnt/dev/console >/mnt/dev/console
    else
    exec switch_root /mnt $INIT </mnt/dev/null >/mnt/dev/null
    fi
else
    exec switch_root /mnt /sbin/fastinit "$@" </mnt/dev/console >/mnt/dev/console
fi

echo
echo Init Failed. Starting emergency shell....
/bin/busybox sh
-----------------------------------------------------------------

これ使えば標準Xandrosでもsdbがマウント出来るんじゃあるまいか?
とinitを上記に変更して試すもダメ。
そもそもXANDROSBOOTDEBUG=yでレスキューモードに入る際は編集した/temp/src内のカーネルイメージ読んでいるわけじゃ無いんじゃなかろうか?

う~ん、煮詰まってきた。。。

追記
その後成功いたしました。手順はこちら

|

« Xandros sdbからの起動のお勉強 | トップページ | Xandros をsdbで起動成功! »

コメント

こんばんは。
ハズしているかも知れませんが、参考情報です。
日経Linux 2008.4号p107~p108にEeePCのXandros起動プロセスについて少し解説があります。
この記事によると一般のLinuxの/sbin/initに代えてEeePCのXandrosでは/sbin/fastinitが起動されるそうです。
ファイルシステムのマウントもfastinitが処理しています。しかし、この記事の時点でfastinitのソースコードは公開されていないとなっています。Xandrosが高速で起動するヒミツもこのfastinitにある、とこの記事に書かれています。
記事自体は「EeePCで最新カーネルを使おう!」というタイトルでp95~始まります。
もし記事をお読みになりたい場合は、有料で時間が掛かりますが、お近くの公共図書館で全国図書館の蔵書を調べてもらいコピーサービスで取り寄せることが出来ると思います。
ただ。記事を読んで問題が解決できるかどうかは分かりません。
また記事の時期からEeePC初期モデル(G4-X)が対象で900Aは違っているかもしれません。

投稿: DK | 2009年5月20日 (水) 18時45分

こりゃまた親切な情報ありがとうございます。
fastinitの存在は知りませんでした。
実はメールで対処法を教えていただいたので今晩試そうと思っております。
今度こそ成功の記事が書きたいものです。happy01

投稿: アンビンバンコ | 2009年5月20日 (水) 19時17分

コメントを書く



(ウェブ上には掲載しません)




« Xandros sdbからの起動のお勉強 | トップページ | Xandros をsdbで起動成功! »