固件打包与解包
文件系统
squashfs
squashfs 是一个常见于嵌入式设备的只读文件系统格式。其只读的特性,使得我在与其打交道的过程中遇到了不少麻烦(如不支持 fanotify 内核接口、直接模拟固件时不可写入)。
对 squashfs 进行操作,少不了的工具肯定是 squashfs-tools。这里是它的 GitHub 地址:https://github.com/plougher/squashfs-tools
正经人直接 make
、 make install
。魔道人可以在软件源里搜索安装(应该不会没有):
▶ pacman -Ss squashfs
extra/squashfuse 0.1.104-2
FUSE filesystem to mount squashfs archives
community/squashfs-tools 4.4_git.1-1 [已安装]
Tools for squashfs, a highly compressed read-only filesystem for Linux.
关于 squashfs-tools 的使用方式,记录在了原仓库里的 USAGE 文件中:https://github.com/plougher/squashfs-tools/blob/master/USAGE
其中的主要命令行工具就是:
mksquashfs 用于打包 squashfs 格式的文件系统
unsquashfs 用于解包 squashfs 格式的文件系统镜像文件
cramfs
假设要解压的文件是LJD2440-II.cramfs
将 LJD2440-II.cramfs 拷贝到任意目录下
在该目录下建立两个文件:
mkdir roms mkdir tmp
将LJD2440-II.cramfs 挂接到 roms 目录:
mount LJD2440-II.cramfs roms –o loop
将 roms 目录下的内容压缩
tar –cvf 1.tar roms
这样将在 roms 的上一级目录产生一个 1.tar 的包将包解压到 tmp 目录下
umount roms
卸载挂载cd .
.进入上一级目录mv 1.tar tmp ; cd tmp ; tar –xvf 1.tar ;
将打包的根文件系统里的内容解压rm 1.tar
jffs2
挂载读取
root@tater-VirtualBox:~/tmp# cat /proc/filesystems | grep jffs2
root@tater-VirtualBox:~/tmp# modprobe jffs2
root@tater-VirtualBox:~/tmp# modprobe mtdblock
root@tater-VirtualBox:~/tmp# modprobe mtdram total_size=122880
root@tater-VirtualBox:~/tmp# ls /dev/mtdblock?
/dev/mtdblock0
root@tater-VirtualBox:~/tmp# dd if=mtd8.bin of=/dev/mtdblock0
9984+0 records in
9984+0 records out
5111808 bytes (5.1 MB, 4.9 MiB) copied, 0.0123768 s, 413 MB/s
root@tater-VirtualBox:~/tmp# mkdir mtd8_mnt
root@tater-VirtualBox:~/tmp# mount -t jffs2 /dev/mtdblock0 mtd8_mnt/
root@tater-VirtualBox:~/tmp# ls mtd8_mnt/
etc www
root@tater-VirtualBox:~/tmp#
使用 jefferson 解包
jefferson filesystem.img -d outdir
使用 jefferson 速度要远慢于直接挂载(60MB的jffs2文件直接跑炸了我的vultr皇帝机),且解出来的结果和挂载得到的结果不同,比较诡异,暂不明白原因。
最后更新于