1 提取板载根文件系统

串口

设备串口参数通常是115200 8n1 ,即波特率115200,数据位8位,无检验,停止位一位。将设备的串口与PC主机串口相连。使用串口终端工具,如secureCRT,配置好相应参数,连接上相应串口。

查看uboot参数

设备上电,查看uboot的打印信息,可以获取flash类型、块大小等参数。在uboot阶段stop,进入uboot命令状态。

#pri

打印出uboot的变量,查看bootargs和bootcmd,分析出文件系统所在flash偏移位置及其大小。
一般bootargs中会携带flash分区信息。
如: mtdparts=hi_sfc:1M(boot),2M(uImage),13M(rootfs)
上述分区在flash的情况就是:

bootuImagerootfs
1M2M13M



1M(boot),表示分区大小1M,分区名boot。
rootfs字样通常是根文件系统,由上述分区信息,可以得出文件系统大小13M(0xd00000), 在flash偏移3M(0x300000)处。

通过tftp将根文件系统上传到服务器

tftp的使用,可参见:http://blog.csdn.net/c20130911/article/details/73469032
以SPI FLASH为例,此处直接给出命令:
sf probe 0;sf read 0x82000000 0x300000 0xd00000;tftp 0x82000000 rootfs.jffs2 0xd00000
执行成功后,即可在tftp服务器在主目录下生成rootfs.jffs2文件,大小13M,至此就将flash的文件系统镜像拷贝出来了。
本文是以设备中根文件系统类型为jffs2为例阐述,其他类型大同小异。

2 在PC上挂载编辑根文件系统

环境:在PC上的linux系统下(如ubuntu)
切换到root用户操作:

1. #modprobe mtdblock   //加载mtdblock内核模块

2. #modprobe mtdram total_size=13312 erase_size=64   
    //加载mtdram模块,将设备大小total_size指定为根文件系统大小
    13M,将块擦除大小erase_size指定为flash块大小64KB(可查看设
    备uboot启动打印信息获得);此处这两个数值单位都是KB

3. #dd if=rootfs.jffs2 of=/dev/mtdblock0     //使用dd命令,将根文件系统复制到/dev/mtdblock0, 生成设备/dev/mtdblock0

4. #mount -t jffs2 /dev/mtdblock0 /mnt/dev_rootfs   
   //将mtdblock0设备mount到目录dev_rootfs,此时访问/mnt/dev_rootfs,就是完整的文件系统目录了

5. 编辑dev_rootfs/etc/passwd文件,将root所在行,root后两个冒号
   之间的内容(密码)清空,即去除telnet的密码

6. 编辑dev_rootfs/etc/inittab文件,
    找到“#::respawn:/sbin/getty -L ttyS000 115200 vt100 -n root -I "Auto login as root ...”类似行,
    将前面的注释符号#去掉,这样操作设备起来后就会自动进入串口终端

7. 有时设备应用程序启动后,会更新密码,可修改启动脚本
    etc/init.d/rcS,在最后延时一段时间(等系统完全启动修改密码),
    如sleep 10, 加上一行命令再次修改下我们知道的密码,如:
     echo root:12345 | chpasswd   //修改root的密码为12345

8. 如果设备未开启telnet、ftp等服务,可以修改etc/init.d/rcS脚本,
   增加上去,如telnetd & (&表示在后台运行)

9.修改完成后,直接使用dd命令,将设备重新拷贝成根文件系统镜像
   dd if=/dev/mtdblock0 of=rootfs.jffs2
   至此我们就得到修改过后的根文件系统rootfs.jffs2,知道telnet的密码,支持串口终端 

3 将编辑过的根文件系统镜像重新烧写回板载FLASH中

将修改过的根文件系统rootfs.jffs2烧写回板子的FLASH, 通过uboot下tftp烧写。
tftp的使用,可参见:http://blog.csdn.net/c20130911/article/details/73469032

此处以SPI FLASH为例,贴出完整的命令:
mw.b 0x82000000 0xff 0xd00000;tftp 0x82000000 rootfs.jffs2;sf probe 0;sf erase 0x300000 0xd00000;sf write 0x82000000 0x300000 0xd00000;reset

设备重新启动后,即可使用telnet及串口终端了。

Logo

更多推荐