一筋の光!

LS410D

LinkStation で Debian を動かすために、 これまで initrd.buffalo 内の initrd を修正していたのだが、
LS410D では initrd を変えるとブートしなくなった。
いろいろ試行錯誤したが、 回避策を見つけられなくて initrd.buffalo を変更するのは諦め、
次の手として、 別パーティションに Debian の / を 置く方法をとってみていたのだが、 それも知識不足から難航。

そんなおり、、、、

一筋の光

filesystems/ramfs-rootfs-initramfs.txt に、こんな記述を見つけた。

注:cpio マニュアルページは、その通りに行うとあなたの initramfs アーカ
イブを壊してしまう幾つかの悪いアドバイスを含んでいます。曰く、「ファイ
ル名の一覧を作る典型的な方法は find コマンドを用いる事で、書き込み不可
またはサーチ不可なディレクトリ上のパーミッションによる問題を最小化する
為に find コマンドに -depth オプションを与えるべきです。」
initramfs.cpio.gz イメージを作成する際はこの通りにしないで下さい。やっ
た場合は動きません。Linux カーネルの cpio 展開ルーチンは、ディレクトリ
が存在しない場合にはその中のファイルを生成しませんので、ディレクトリ中
のファイル群のエントリの前にそのディレクトリのエントリが来ないといけま
せん。上記のスクリプトは一覧を正しい順序で得ます。

Buffalo のトラップでもなんでもなくて、これちゃうの??

たしかに、

find . -depth -print | cpio -ov > /tmp/initrd
として、find に -depth オプションを付けて initrd を作っていたし、、、

スクリプトの修正

filesystems/ramfs-rootfs-initramfs.txt の例、
    (cd "$1"; find . | cpio -o -H newc | gzip) > "$2"
に倣ってスクリプトを修正する。
root@qube:/srv/tftp/ls400-111# vi remakeinitrd.sh
	:
	:
root@qube:/srv/tftp/ls400-111# cat remakeinitrd.sh
set -x

dd if=initrd.buffalo.orig of=/tmp/initrd.gz bs=64 skip=1
gunzip /tmp/initrd.gz

mkdir root
cd root
cat /tmp/initrd | cpio -id
find . | cpio -o -H newc | gzip > /tmp/initrd.gz
cd ..
#rm -fr root

mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d /tmp/initrd.gz initrd.buffalo

rm -f /tmp/initrd.gz

rm -f ../initrd.buffalo
ln initrd.buffalo ..
root@qube:/srv/tftp/ls400-111#

スクリプトの実行

root@qube:/srv/tftp/ls400-111# sh remakeinitrd.sh
+ dd if=initrd.buffalo.orig of=/tmp/initrd.gz bs=64 skip=1
185731+1 records in
185731+1 records out
11886820 bytes (12 MB) copied, 28.3328 s, 420 kB/s
+ gunzip /tmp/initrd.gz
+ mkdir root
+ cd root
+ cat /tmp/initrd
+ cpio -id
52829 blocks
+ find .
+ cpio -o -H newc
+ gzip
52829 blocks
+ cd ..
+ mkimage -A ARM -O Linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d /tmp/initrd.gz initrd.buffalo
Image Name:   initramfs
Created:      Sun Oct 20 15:35:37 2013
Image Type:   ARM Linux RAMDisk Image (gzip compressed)
Data Size:    11927045 Bytes = 11647.50 kB = 11.37 MB
Load Address: 0x00000000
Entry Point:  0x00000000
+ rm -f /tmp/initrd.gz
+ rm -f ../initrd.buffalo
+ ln initrd.buffalo ..
root@qube:/srv/tftp/ls400-111#

tftp Boot

LS410D の電源ON
E06
FUNC ボタンを押す
白点滅、、、
白点滅、、、

白点灯!!

きたか?

[root@LS410D06E ~]#
きたー!

LS410D

楽天市場
Amazon


別パーティションに Debian の / を置く(4)
ハックの記録
LinkStation/玄箱 をハックしよう

永かった。。。

ツイート Tweet to @yasunari_y @yasunari_yをフォロー

Copyright (C) 2003-2013 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp 山下康成@京都府向日市