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的情況就是:
boot | uImage | rootfs |
---|---|---|
1M | 2M | 13M |
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及串口終端了。