某公司3531板子调试笔记--转载

来自http://www.youback.net/arm/%E6%9F%90%E5%85%AC%E5%8F%B83531%E6%9D%BF%E5%AD%90%E8%B0%83%E8%AF%95%E7%AC%94%E8%AE%B0.html

因工作需要需要需要调试某公司的3531板子,运行我们的程序,从整个调试过程中中还是学到一些知识的现在记录下。
拿到板子找到串口挂上,上电串口消息如下:

1 U-Boot 2010.06-svn83 (Jan 06 2013 - 17:36:14)
2 DRAM: 256 MiB
3 NAND: Special Nand id table Version 1.35
4 Nand ID: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
5 No NAND device found!!!
6 0 MiB
7 Spi(cs1) ID: 0xC2 0x20 0x18 0xC2 0x20 0x18
8 Spi(cs1): Block:64KB Chip:16MB Name:"MX25L128"
9 envcrc 0x8197ccc1
10 ENV_SIZE = 0x3fffc
11 In: serial
12 Out: serial
13 Err: serial
14 boardvalue: 0x1
15 PHY 0x02: OUI = 0x1374, Model = 0x07, Rev = 0x02, PHY not link!
16 user init finish.
17 Press CTRL-C to abort autoboot in 0 secondsCFG_BOOT_ADDR:0x58080000

这个板子的硬件参数就出来了
DDR:256MB
Flash:16M spi-flash
串口继续打印消息内核加载后消息就不输出了,很明显串口信息被关闭了,等整个板子完全启动了telnet下
telnet 192.168.1.10
输入root密码为空尝试登入,登入不了,试了试几个其他的简单密码也登不上,看来telnet 暂时无法连上了得另某出路
看了看uboot的启动信息有这么一句Press CTRL-C to abort autoboot in 0 secondsCFG_BOOT_ADDR:0×58080000
重启设备,果断按下Ctrl+c很是走运boot没有加密,有搞头。

在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制作的根文件系统可以挂载到本地的,这样我们就可以查看修改到里面的文件了
还可以基于原来的cramfs重新制作写回去,破解telnet密码的思路顿时有了。
从启动信息里看出来分了6个区,计算出各个分区的偏移地址:
uboot(uboot_xm.bin): 0×0~0×80000 512K(0×80000)
romfs(romfs.cramfs): 0×80000~0×480000 4M(0×400000)
user(user.cramfs): 0×480000~0xA00000 5632K(0×580000)
web(web.cramfs): 0xA00000~0xB80000 1536K(0×180000)
custom(custom.cramfs):0xB80000~0xE80000 3M(0×300000)
logo(not dump): 0xE80000~0xEC0000 512k(0×80000)
mtd(not dump): 0xEC0000~0xFFFFFF 1280K(0×140000)

怎样把4M(romfs)弄出来呢?其实很简单,只要把flash读到内存再从内存了tftp到tftp服务器上就可以了
将uboot里面的tftp服务器地址修改为我的tftp服务器地址:
setenv serverip 192.168.0.7
sa #保存修改的参数,否则重启就丢失了
插上网线使用如下的命令即可将romfs上传到tftp服务器上了

1 mw.b 0x82000000 0xff 0xb00000
2 sf probe 0
3 sf read 0x82000000 0x80000 0x400000
4 tftp 0x82000000 romfs.cramfs 0x400000

没有错误的话就上传到tftp服务器上了,将romfs.cramfs拷贝到本地目录,执行如下命令

1 cramfsck  romfs.cramfs  -x  romfs

(如果找不到cramfsck 或 mkcramfs 命令请参见我的另一片博文 fedora下找不到mkfs.jffs2 genext2fs mkcramfs的解决方法)
这样就把romfs.cramfs解压到romfs里了,查看了下他的启动脚本
etc/inittab 没有什么可看的
etc/init.d/rcS倒是有很多信息

1 #!/bin/sh
2 mount -t cramfs /dev/mtdblock2 /usr
3 mount -t cramfs /dev/mtdblock3 /mnt/web
4 mount -t cramfs /dev/mtdblock4 /mnt/custom
5 mount -t cramfs /dev/mtdblock5 /mnt/logo
6 mount -t jffs2 /dev/mtdblock6 /mnt/mtd
7 .....
8 ...
9 cd /usr/etc
10 ./loadmod
11 .....
12 .....

这里只给出一些重要的信息,可以看到分区基本上都是cramfs ,也就是说这里面的文件对我们没有秘密可言了
使用相同的方法我们就可以将他里面的文件全部弄出来了。
现在要做的就是先破解telnet密码,我们知道telnet密码在etc/password里面打开他将里面的root用户和密码替换成
root:$1$$qRPK7m23GJusamGpoGLby/:0:0::/root:/bin/sh
我们就可以使用root密码为空登入,执行如下命令制作一个cramfs文件系统
mkcramfs romfs rom_root.cramfs
这样就做好cramfs文件系统了,使用刚才tftp命令写回板子上的flash,重启进uboot输入如下命令

1 mw.b 0x82000000 0xff 0xb00000
2 tftp 0x82000000 romfs_root.cramfs
3 sf probe 0
4 sf erase 0x80000 0x400000
5 sf write 0x82000000 0x80000 0x400000 #千万要注意不要把地址搞错否则会破坏flash里面的固件
6 reset

系统重启成功,挂串口的话直接就可以出现如下的提示了:
使用telnet 登入也OK了,

成功登入上telnet

下面就是挂NFS,将我的虚拟机目录root_fs挂载上去,所有的程序都放在了nfs里面包括库等同时到处几个环境变量

1 mount -o nolock 192.168.1.22:/root_fs /home
2 export LD_LIBRARY_PATH=/home/lib:$LD_LIBRARY_PATH
3 export QT_QWS_FONTDIR=/home/lib/font
4 export PATH=/home/lib:$PATH

经过一些的的调试和查看,这货使用的全是静态编译,没有一个系统库文件,我的程序使用的动态库编译的,将系统库glibc等也拷到root_fs下
程序始终运行不了,busybox也裁剪的没有几个命令可用,本来是换个busybox的,但是做出来的romfs.cramfs大于4M了没法子搞,后来
只能使用如下命令来

1 ld-2.11.1.so ./gui_test -qws

报错:
cannot create Qt for Embedded Linux data directory: /tmp/qtembedded-0
我的这个程序是个Qt的界面程序,今天才知道Qt程序运行起来要在tmp目录里写文件,cramfs文件系统是知道的怎么办,把tmp挂到内存里就OK了

1 mount -t tmpfs none /tmp

后话,其实某公司把3531做的还是很好的,把成本压的很低,自然flash这些东西就使用16M。

时间: 2024-07-29 01:47:04

某公司3531板子调试笔记--转载的相关文章

Lattice FPGA 板子 调试笔记

最近在调试LATTICE  FPGA 做的视频板子,颇不顺利,所以记录下来作为以后的参考: 1.FPGA的IO口不是所有的都是双向的,有些有特殊作用的是单向的. 在查阅 LatticeECP3-17EAPinout.CSV 之后, 发现在LEF3-17EA-FN484C中,有以下几个管脚是单向的: C4  G7  G6     : jtag 管脚 C14  C15  B15   B16  :编程管脚 K1   L5   L1   K6   N17  M18   :PLL的反馈(fb)管脚 AB2

《格蠹汇编》调试笔记

以前也就是把Windbg作为一个调试所写驱动的调试器.只进行源码级的调试,运用的比较浅显. 最近研读张银奎老师的<软件调试>获益良多,刚好与之配套的<格蠹汇编>提供了老师大量的调试经验以及实验环境.不拿来好好实践一番简直浪费. 0X01调试笔记之侦查广告插件 俗话说:工欲善其事,必先利其器.对于调试领域来说,更是如此.我们不但要在自己的计算机中安装有WinDbg,还应当使用JIT调试的方法.因为对于Windows系统中的应用程序的崩溃问题,JIT调试是非常有效的办法,而且JIT调试

USB wifi调试笔记

本文以realtek 8192CU WiFi模块为例,介绍USB wifi在Jelly Bean 4.1的调试笔记. 1.WIFI打不开现象概述 WiFi打不开是指您在UI的settings下选中WiFi选项,将其置为on(打开),但最终结果是自动变成off(关闭).正在打开Wi-Fi.正在扫描等一系列不能正常打开WiFi的提示. 2.问题分析流程 WiFi打不开从硬件和软件两方面进行定位,一般是先硬件,然后软件.总体分析流程如图: 3.确认硬件可以识别 8192CU WiFi模块是基于usb接

ImageNet?Classification?with?Deep?Convolutional?Neural?Networks?阅读笔记 转载

ImageNet Classification with Deep Convolutional Neural Networks 阅读笔记 (2013-07-06 22:16:36) 转载▼ 标签: deep_learning imagenet hinton 分类: 机器学习 (决定以后每读一篇论文,都将笔记记录于博客上.) 这篇发表于NIPS2012的文章,是Hinton与其学生为了回应别人对于deep learning的质疑而将deep learning用于ImageNet(图像识别目前最大的

SIM900A基站定位调试笔记 -转

第1步:ATE1 握手并设置回显 第2步:AT+CGMR 查看SIM900的版本信号 第3步:AT+CSQ 查看信号质量 第4步:AT+CREG? 查看GSM是否注册成功 第5步:AT+CGREG? 查看GPRS是否注册成功 第6步:AT+CGATT? 查看GPRS附着状态 第7步:AT+SAPBR=3,1,"CONTYPE","GPRS" 设置网络参数 第8步:AT+SAPBR=3,1,"APN","CMWAP"  //设置

Tomcat调试笔记

调试笔记 在使用Tomcat过程中经常碰到问题,导致tomcat启动失败.如下↓ 由于报错太过笼统,我根本无法找出错误.后来我切换到Console视图下,看到了如下错误信息. 根据报错信息,错误原因是32bit 的Tomcat不能在AMD 64-bit的platform 上面运行,但是经过查看我发现自己的tomcat和java都是64bit的. 查看tomcat的版本号的链接:→ http://jingyan.baidu.com/article/e73e26c0c4b40024adb6a789.

JavaScript特效(调试笔记)

JavaScript特效 一.在网页上显示当前的时间日期,例如:“2016年3月26日 星期六”. js源代码: 1 function getTime() { 2 var today = new Date(); //返回当日的日期和时间. 3 var year = today.getFullYear(); //获得当前的年份 4 var month = today.getMonth() + 1; //获得当前的月份 5 var day = today.getDate(); //获得当前的日期 6

mac安装gdb调试(转载)

转载自:http://blog.plotcup.com/a/129 最近一直用go写一个项目,本想在mac上用gdb调试一下,但xcode4.6带的gdb版 本还是太低了,不支持go,只好自己安装一个.本以为直接brew install gdb就 完事了,后来发现不是那么回事,还要给gdb制作证书签名.下面是操作步骤: 安装gdb brew install gdb 程序编译完成后在/usr/local/bin/下面建立一个gdb的软链,并且将/usr/bin/ 下面的gdb改名. 制作证书 打开

MySql学习笔记(转载)

/* 启动MySQL */net start mysql /* 连接与断开服务器 */mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */mysqld --skip-grant-tables-- 修改root密码密码加密函数password()update mysql.user set password=password('root'); SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- /* 数据库操