squashfsイメージファイルの中身を取り出す
$sudo su -(owner:rootが変ってしまうのでrootで作業)
$sudo unsquashfs -d rootfs rootfs.bin(デフォルトではsquashfs-root/に展開される)
中身を修正
rootfsの所は主にパスワードの再設定。
/etc/passwd のdefaultを1行削除
/etc/shadow のdefaultを1行削除
root,adminの暗号化されたパスワードを別のLinuxで作成したコードに置き換える。
(カメラにvipwコマンドが無い、busyboxにリンク貼ると使えるのかも知れないけど、無かった)
パスワード関連が丸見えなのでパーミッション設定
chmod 644 /etc/passwd chmod 644 /etc/group chmod 640 /etc/shadow
再構成の前に、Compression-typeとBlock sizeを確認。
unsquashfs -s rootfs.bin Found a valid SQUASHFS 4:0 superblock on rootfs.bin. Creation or last append time Tue Aug 15 11:34:04 2017 Filesystem size 1817.96 Kbytes (1.78 Mbytes) Compression xz Block size 262144 Filesystem is exportable via NFS Inodes are compressed Data is compressed Fragments are compressed Always-use-fragments option is not specified Xattrs are not stored Duplicates are removed Number of fragments 3 Number of inodes 178 Number of ids 1パラメータ指定してsquashfs作成
$sudo mksquashfs rootfs rootfs.new -comp xz -b 262144 -rw-rw-r-- 1 ub ub 1900544 5月 5 10:52 rootfs.bin -rw-r--r-- 1 root root 1863680 9月 17 16:53 rootfs.newパーテーションサイズ1900544に満たない部分36864byteを0x00で埋める必要がある。
cp rootfs.new rootfs.fil head -c 36864 /dev/zero >> rootfs.filmtd.binも同様にsquashfs展開して修正して再構成して0x00埋め。
修正内容はwebとかSDカード突っ込むと強制フォーマットされるとことか、
conf.binはjffs2なのでカメラにLoginして逐次修正します。
修正が終わったら結合
cp boot.bin new.bin dd if=bootenv.bin bs=1024 seek=192 of=new.bin dd if=kernel.bin bs=1024 seek=256 of=new.bin dd if=rootfs.fil bs=1024 seek=1600 of=new.bin dd if=mtd.bin bs=1024 seek=3456 of=new.bin dd if=conf.bin bs=1024 seek=6528 of=new.bin #逆エンディアン byteorder4 new.bin new.romW25Q128-SOPが安かった(送料込み5個で425円)のでテスト用に買ってて、
せっかくなので0xFFで後半8MB埋めて焼いてみる。
0xffのfilは「ddで0xffを書き込む方法」とかぐぐってください。
えいっ
#焼き(Raspberry-pi sudo flashrom -V -p linux_spi:dev=/dev/spidev0.0 -c "W25Q128.V" -E sudo flashrom -V -p linux_spi:dev=/dev/spidev0.0 -c "W25Q128.V" -w new.rom起動してrootloginできるようになりました。
0 件のコメント:
コメントを投稿