首先,你的在某宝买一个别人家量产的产品或者开发模组,然后你的有一定的硬件基础或者如果你不懂可以先叫人家硬件工程师帮你接出来。然后用串口,如果能中断进入Uboot,那么恭喜你,有戏在后头,看flash的块大小,一般有如Block:64KB(说明这块flash块大小为64kb),看rootfstype
在uboot里输入printenv查看下启动参数:
如一家公司的:
bootargs=mem=160M console=ttyAMA0,115200 root=1f01 rootfstype=cramfs mtdparts=hi_sfc:512K(boot),4M(romfs),5632K(usr),1536K(web),3M(custom),256K(logo),1280K(mtd)
可以看到rootfstype=cramfs整个根文件系统是cramfs的,cramfs制作的根文件系统可以挂载到本地的
如另外一家公司的:
bootargs=mem=58M console=ttyAMA0,115200 root=/dev/mtdblock3 noinitrd rootfstype=squashfs mtdparts=hi_sfc:256K(boot),2048K(kernel),512K(userdata),13568K(rootfs)
可以看到rootfstype=squashfs 整个根文件系统是squashfs 的,squashfs 制作的根文件系统可以挂载到本地的
下面针对两种文件系统的解密:
依据bootargs显示的各个分区大小可以计算出各自在flash的烧录地址,以解读下一家公司的文件系统为例:
rootfs大小为13568K即0xD40000,起始地址为0x2c0000,起始地址如果你幸运的话可以在串口打印中看到,如果别人加密了看不到也不要紧,自己计算起始地址。
依据以上计算,打开tftp,匹配好uboot的ipaddr以及serverip。然后将rootfs上传到PC端tftp目录下。具体如下:
mw.b 0x81000000 0xff 0xD40000
sf probe 0
sf read 0x81000000 0x2c0000 0xD40000
tftp 0x81000000 rootfs 0xD40000
至此,已经将flash上的rootfs拷贝到你的PC端tftp目录下,然后复制到你的虚拟机上,下面针对两种文件系统解密:
1)squashfs 文件系统
如果你的虚拟机没有unsquashfs命令,请安装squashfs-tools工具,如Ubuntu下安装apt-get install squashfs-tools
然后执行unsquashfs -i rootfs,这样就已经解压了rootfs,就会看到生成一个目录,为方便讲解,假设生成了目录squashfs-root。想要修改成自己的调试版,那就要修改etc/password里面的信息,改为
root:$1$$qRPK7m23GJusamGpoGLby/:0:0::/root:/bin/sh
即将串口密码设置为空,然后执行
mksquashfs ./squashfs-root rootfs.squashfs.img -b 64K -comp xz
64K即为前面说的flash的块大小,xz即为压缩格式,rootfs.squashfs.img为压缩生成的可烧录文件
2)cramfs文件系统
如果你的虚拟机没有cramfsck 命令,请安装cramfsprogs工具,如Ubuntu下安装apt-get install cramfsprogs
然后执行cramfsck rootfs -x cramfs-boot,这样就已经解压了rootfs,就会看到生成一个目录cramfs-boot。想要修改成自己的调试版,那就要修改etc/password里面的信息,改为
root:$1$$qRPK7m23GJusamGpoGLby/:0:0::/root:/bin/sh
即将串口密码设置为空,然后执行以下命令制作cramfs的文件系统
mkcramfs cramfs-boot cramfs.img
cramfs.img为压缩生成的可烧录文件
最后就是烧录了,以rootfs.squashfs.img 为例:
mw.b 0x81000000 0xff 0xD40000
tftp 0x81000000 rootfs.squashfs.img
sf probe 0;sf erase 0x2c0000 0xD40000;sf write 0x81000000 0x2c0000 0xD40000
至此reset启动,如果一切正常你就能进入串口开启自己的调试之路了