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 . -depth -print | cpio -ov > /tmp/initrd.new root@qube:/srv/tftp/ls400-111#オリジナルは /tmp/initrd
root@qube:/srv/tftp/ls400-111# !bash bash 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, 7.6144 s, 1.6 MB/s + gunzip /tmp/initrd.gz + mkdir root + cd root + cat /tmp/initrd + cpio -id 52829 blocks + find . -depth -print + cpio -ov ./usr/lib/libreadline.so.6.2 ./usr/lib/libstdc++.so.6.0.16-gdb.py ./usr/lib/libkmod.so.2 : : ./www/cgi-bin/resume.cgi ./www/cgi-bin/query.cgi ./www/cgi-bin ./www . 52612 blocks + exit root@qube:/srv/tftp/ls400-111#
root@qube:/srv/tftp/ls400-111# ls -l /tmp/initrd* -rw-r--r-- 1 root root 27048448 Sep 28 16:49 /tmp/initrd -rw-r--r-- 1 root root 26937344 Sep 28 16:49 /tmp/initrd.new root@qube:/srv/tftp/ls400-111#オリジナルのほうが大きい。なぜ?
ファイルフォーマットは、、
root@qube:/srv/tftp/ls400-111# file !$ file /tmp/initrd* /tmp/initrd: ASCII cpio archive (SVR4 with no CRC) /tmp/initrd.new: cpio archive root@qube:/srv/tftp/ls400-111#がー。これかぁ??
initramfs バッファフォーマットは "newc" もしくは "crc" CPIO フォーマット に基づいておりと書いてある。
ASCII cpio archive は -H newc で作るとのこと。
root@qube:/srv/tftp/ls400-111# !vi vi remakeinitrd.sh : : root@qube:/srv/tftp/ls400-111# cat !$ 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 . -depth -print | cpio -ovH newc > /tmp/initrd.new root@qube:/srv/tftp/ls400-111#cpio に -H newc オプションを追加する。
root@qube:/srv/tftp/ls400-111# rm -fr root root@qube:/srv/tftp/ls400-111# rm /tmp/initrd* root@qube:/srv/tftp/ls400-111# !bash bash 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, 7.78992 s, 1.5 MB/s + gunzip /tmp/initrd.gz + mkdir root + cd root + cat /tmp/initrd + cpio -id 52829 blocks + cpio -ovH newc + find . -depth -print ./usr/lib/libreadline.so.6.2 ./usr/lib/libstdc++.so.6.0.16-gdb.py ./usr/lib/libkmod.so.2 : : ./www/cgi-bin/resume.cgi ./www/cgi-bin/query.cgi ./www/cgi-bin ./www . 52829 blocks + exit root@qube:/srv/tftp/ls400-111#
root@qube:/srv/tftp/ls400-111# ls -l /tmp/initrd* -rw-r--r-- 1 root root 27048448 Sep 28 17:00 /tmp/initrd -rw-r--r-- 1 root root 27048448 Sep 28 17:00 /tmp/initrd.new root@qube:/srv/tftp/ls400-111#一致!!
ファイルフォーマットは、、
root@qube:/srv/tftp/ls400-111# file !$ file /tmp/initrd* /tmp/initrd: ASCII cpio archive (SVR4 with no CRC) /tmp/initrd.new: ASCII cpio archive (SVR4 with no CRC) root@qube:/srv/tftp/ls400-111#一致!
中身は、、、
root@qube:/srv/tftp/ls400-111# cmp !$ cmp /tmp/initrd* /tmp/initrd /tmp/initrd.new differ: char 8, line 1 root@qube:/srv/tftp/ls400-111#作り直しているので、もちろん中身は違う
root@qube:/srv/tftp/ls400-111# !vi vi remakeinitrd.sh : : root@qube:/srv/tftp/ls400-111# cat !$ 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 . -depth -print | cpio -ovH newc > /tmp/initrd gzip /tmp/initrd 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#ar に -H newc をつけただけで、それ以外は、ほぼ以前のもの
root@qube:/srv/tftp/ls400-111# rm -fr root root@qube:/srv/tftp/ls400-111# rm /tmp/initrd* root@qube:/srv/tftp/ls400-111# !bash bash 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, 7.51199 s, 1.6 MB/s + gunzip /tmp/initrd.gz + mkdir root + cd root + cat /tmp/initrd + cpio -id 52829 blocks + find . -depth -print + cpio -ovH newc ./usr/lib/libreadline.so.6.2 ./usr/lib/libstdc++.so.6.0.16-gdb.py : : ./www/cgi-bin/resume.cgi ./www/cgi-bin/query.cgi ./www/cgi-bin ./www . 52829 blocks + cd .. + rm -fr root + gzip /tmp/initrd + 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: Sat Sep 28 17:13:00 2013 Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 11925158 Bytes = 11645.66 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#できた。
root@qube:/srv/tftp/ls400-111# ls -l ../initrd.buffalo -rwxr-xr-x 2 root yamasita 11925222 Sep 28 17:13 ../initrd.buffalo root@qube:/srv/tftp/ls400-111# ls -l initrd.buffalo -rwxr-xr-x 2 root yamasita 11925222 Sep 28 17:13 initrd.buffalo root@qube:/srv/tftp/ls400-111#よし。
Func ボタンを押す。白点滅になり、
root@qube:/srv/tftp/ls400-111# !tail tail -f /var/log/daemon.log : : Sep 28 17:16:23 qube in.tftpd[2295]: connect from 192.168.11.150 (192.168.11.150) Sep 28 17:16:23 qube tftpd[2296]: tftpd: trying to get file: uImage.buffalo Sep 28 17:16:23 qube tftpd[2296]: tftpd: serving file from /srv/tftp Sep 28 17:16:24 qube in.tftpd[2297]: connect from 192.168.11.150 (192.168.11.150) Sep 28 17:16:24 qube tftpd[2298]: tftpd: trying to get file: initrd.buffalo Sep 28 17:16:24 qube tftpd[2298]: tftpd: serving file from /srv/tftptftp サーバに取りに来た。
中身を変えず touch でタイムスタンプを変えても問題なくブートしてきた
サイズを変えたらブートしなくなった。
同じサイズで作りなおし(=中身を変え)たらブートしなくなった。
つまり、単にサイズやタイムスタンプで見ているのではなく、
initrd の中身をチェックしているということか。。。
|
← BUFFALO さん、GPLに従い、LS410Dのカーネルソースを開示してください! |
ハックの記録 LinkStation/玄箱 をハックしよう |
→ カーネルソースが開示された! |
Copyright (C) 2003-2013 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp 山下康成@京都府向日市