|
本帖最后由 testios 于 2018-5-31 23:06 编辑
案例
好奇来源
这是我做的 联想 NewifiD1 Pandorabox17.05 Flash 空间分区图
联想 NewifiD1 Pandorabox17.05 重启
reboot -f
得到 启动的信息
dmesg //系统初始化输出
--》
- [ 2.108000] device id : c2 20 19 c2 0 (2019c200)
- [ 2.112000] SPI flash chip: MX25L25635F (c2 2019c220) (32768 Kbytes)
- [ 2.120000] Creating 5 MTD partitions on "raspi":
- [ 2.124000] 0x000000000000-0x000000030000 : "u-boot"
- [ 2.132000] 0x000000030000-0x000000040000 : "u-boot-env"
- [ 2.140000] 0x000000040000-0x000000050000 : "Factory"
- [ 2.144000] 0x000000000000-0x000002000000 : "fullflash"
- [ 2.152000] 0x000000050000-0x000002000000 : "firmware"
- [ 2.208000] 3 uimage-fw partitions found on MTD device firmware
- [ 2.212000] 0x000000050000-0x0000001c4a32 : "kernel"
- [ 2.220000] mtd: partition "kernel" must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only
- [ 2.232000] 0x0000001c4a32-0x000001fe0000 : "rootfs"
- [ 2.236000] mtd: partition "rootfs" must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only
- [ 2.252000] mtd: device 6 (rootfs) set to be root filesystem
- [ 2.256000] 1 squashfs-split partitions found on MTD device rootfs
- [ 2.264000] 0x000000b30000-0x000001fe0000 : "rootfs_data"
- [ 2.272000] 0x000001fe0000-0x000002000000 : "panic_oops"
- [ 2.276000] mtdoops: ready 0, 1 (no erase)
- [ 2.276000] mtdoops: Attached to MTD device 8
- [ 2.284000] rdm_major = 251
- [ 2.288000] EEPROM:Read from [Factory] offset 0xe000,length 0x6.
复制代码
分区结构 整理
- [root@PandoraBox:/root]#cat /proc/mtd
- dev: size erasesize name
- mtd0: 00030000 00010000 "u-boot"
- mtd1: 00010000 00010000 "u-boot-env"
- mtd2: 00010000 00010000 "Factory"
- mtd3: 02000000 00010000 "fullflash"
- mtd4: 01fb0000 00010000 "firmware"
- mtd5: 00174a32 00010000 "kernel"
- mtd6: 01e1b5ce 00010000 "rootfs"
- mtd7: 014b0000 00010000 "rootfs_data"
- mtd8: 00020000 00010000 "panic_oops"
复制代码
如何备份编程器固件
一、编程器固件备份(所有分区)
-------------------------------------------------------------------------------------------------------
计算机ssh连接D1后,按如下操作输入命令
1、将固件保存到内存
- dd if=/dev/mtd3 of=/tmp/all.bin
复制代码
或者
- cat /dev/mtd0 /dev/mtd1 /dev/mtd2 /dev/mtd4 >/tmp/all.bin
复制代码
基础参考十六进制
基址
kernel mtd 分区与UBOOT 分区的理解
08000000 //十六进制
等于
134217728 字节 // 十进制
128 MB (134,217,728 字节)
在线进制转换 //十六进制转 10
U-Boot移植相关硬件地址空间分配为:
FLASH 2MB 0x80000000~0x801FFFFF; 10: 2147483648 2149580799 等于空间差 2047k
PSRAM 8MB 0x81000000~0x817FFFFF; 10进制 等于 8191kb
如何理解字节地址为0x8000 0000~0x80ff ffff,是如何设置的?
SDRAM被映射到C6713的CE0存储空间,工作频率为100MHZ,Z支持8/16/32位访问,字节地址为0x8000 0000~0x80ff ffff如何理解字节地址为0x8000 0000~0x80ff ffff,是如何设置,在哪设置的啊?我可以设置成0x9000 0000~0x90ff ffff 吗?
CE0空间的起始地址为0x8000 0000 根据SDRAM的容量,扩展空间到0x80ff ffff
https://zhidao.baidu.com/question/1957856978709493460.html
https://img-blog.csdn.net/20160902152134665
关于加载地址和运行地址理解
https://blog.csdn.net/yanlutian/article/details/52414226
关于Nand Flash行地址和列地址的计算
https://blog.csdn.net/Sloane0/article/details/73065027
kernel mtd 分区与UBOOT 分区的理解
https://blog.csdn.net/maopig/article/details/17285119
回想我们在烧写程序时候的操作,比如我们选择烧写内核镜像,此时,uboot实际执行了一条语句,类似
#define kernel 0x00200000
memcpy(kernel,0x30000000,SZ_3M)
里我们烧写程序的入口地址是0x30000000,也就是说,uboot的下载模式将我们烧写到内存0x30000000处的数据,搬到了NAND flash的kernel处,保存了起来,因此,这里要清楚,我们烧写程序时,实际是将程序先烧写到了内存当中,然后由内存搬运到NAND flash中
当然,之前操作的都是物理地址,当内核真正运行起来以后,将开始使用虚拟地址。
https://zhidao.baidu.com/question/344268845.html
0X00000000 请问这是什么表达方式?
0X00000000这是16进制表达方式,前面的0X或者0x表示这个数字为16进制的,不是“0乘以多少”的意思。
追问
先谢谢了!00000000H为什么不是这种呢?0X怎么也不像16进制符号啊?
追答
16进制数有两种写法:一种是在数字前加0X或者0x,另一种就是再数字后面加H。
https://zhidao.baidu.com/question/519253294970292205.html
简单的说,就是操作系统在你的大小不同的物理内存上,虚拟出了一个一样大小的逻辑内存。
http://blog.sina.com.cn/s/blog_3e3a29b301016uif.html
UBoot常用命令手册
4、cp
cp [.b, .w, .l] source target count
- copy memory
cp命令可以在内存中复制数据块,包括对Flash的读写操作。
第1个参数source是要复制的数据块起始地址。
第2个参数target是数据块要复制到的地址。这个地址如果在Flash中,那么会直接调用写Flash的函数操作。所以U-Boot写Flash就使用这个命令,当然需要先把对应Flash区域擦净。
第3个参数count是要复制的数目,根据cp.b cp.w cp.l分别以字节、字、长字为单位。
7、erase
erase start end
- erase FLASH from addr 'start' to addr 'end'
erase N:SF[-SL]
- erase sectors SF-SL in FLASH bank # N
erase bank N
- erase FLASH bank # N
erase all
- erase all FLASH banks
erase命令可以擦Flash。
参数必须指定Flash擦除的范围。
按照起始地址和结束地址,start必须是擦除块的起始地址;end必须是擦除末尾块的结束地址。这种方式最常用。举例说明:擦除0x20000 – 0x3ffff区域命令为erase 20000 3ffff。
按照组和扇区,N表示Flash的组号,SF表示擦除起始扇区号,SL表示擦除结束扇区号。另外,还可以擦除整个组,擦除组号为N的整个Flash组。擦除全部Flash只要给出一个all的参数即可。
用法:
写入数据之前必须先执行该命令
用法: erase 0xc******* +0xYYYYYYYY
说明: 擦除从0xc******* 开始的0xYYYYYYYY字节(字节必须块对齐)
例:
Z228 # erase 0xc4040000 +0x180000
........................ done
Erased 24 sectors
附加: erase 1:0-2(就是对每一块FLASH的0-2扇区进行删除)
h. cp.b
拷贝数据,从指定源地址到目标地址,地址可以是ram,也可以是nor flash
用法: cp.b 0x******** 0x######## 0xYYYYYYYY
说明: 拷贝源0x********到目标0x########,共拷贝0xYYYYYYY字节
例:
Z228 # cp.b 0x200000 0xc4040000 0x180000
Copy to Flash... done
25、tftpboot
tftpboot [loadAddress] [bootfilename]
tftpboot命令可以使用TFTP协议通过网络下载文件。按照二进制文件格式下载。另外使用这个命令,必须配置好相关的环境变量。例如serverip和ipaddr。
第1个参数loadAddress是下载到的内存地址。
第2个参数是要下载的文件名称,必须放在TFTP服务器相应的目录下。
http://wiki.openwrt.org/toh/netgear/r7000
Openwrt dmesg
[ 2.309917] Creating 14 MTD partitions on "bcm_nand":
[ 2.316263] 0x000000000000-0x000000080000 : "boot"
[ 2.324160] 0x000000080000-0x000000200000 : "nvram"
[ 2.334398] 0x000000200000-0x000002200000 : "firmware"
[ 2.414534] 0x00000020001c-0x000000600000 : "linux"
[ 2.430549] 0x000000600000-0x000002200000 : "ubi"
[ 2.500998] 0x000002200000-0x000002240000 : "board_data"
[ 2.508925] 0x000002240000-0x000002280000 : "POT"
[ 2.516123] 0x000002280000-0x000002400000 : "POT"
[ 2.526171] 0x000002400000-0x000002440000 : "ML"
[ 2.533275] 0x000002440000-0x000002480000 : "ML"
[ 2.540387] 0x000002480000-0x0000024c0000 : "ML"
[ 2.547469] 0x0000024c0000-0x000002500000 : "ML"
[ 2.554547] 0x000002500000-0x000002540000 : "ML"
[ 2.561625] 0x000002540000-0x000008000000 : "ML"
https://blog.csdn.net/leekwen/article/details/53635462
路由固件的逆向解包及破解方法
https://zhidao.baidu.com/question/651503631891359365.html
如何从uboot中推算路由器flash烧写地址
http://blog.sina.com.cn/s/blog_3e3a29b301016uif.html
UBoot常用命令手册
https://www.right.com.cn/forum/thread-212299-1-1.html
【固件改造】腾达AC9官方固件结构及改造过程
https://www.right.com.cn/forum/thread-112987-1-1.html
简单方法提取OpenWrt的bin文件中的内容
https://www.right.com.cn/forum/thread-184418-1-1.html
padavan固件启动过程分析
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|