Flash基础入门之无法生成sysupgrade.bin 及分区结构
小标 2019-01-24 来源 : 阅读 1142 评论 0

摘要:本文主要向大家介绍了Flash基础入门之无法生成sysupgrade.bin 及分区结构,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

本文主要向大家介绍了Flash基础入门之无法生成sysupgrade.bin 及分区结构,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

1. make menuconfig 后编译没有生成openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin ,究其原因是因为image超出了flash定义的大小,实际的flash是8M的,编译703N的时候没有修改配置编译成4M的了 ,修改下面两个文件(trunk 版本)
1. 
vi tools/firmware-utils/src/mktplinkfw.c
.id = "TL-WR703Nv1",                .hw_id          = HWID_TL_WR703N_V1,                .hw_rev         = 1,                .layout_id      = "4Mlzma",//将4Mlza改为8Mlzma保存即可。
 
2.
vi target/linux/ar71xx/image/Makefile
define Device/tl-wr703n-v1    $(Device/tplink-8mlzma)  //将4mIzma 修改为8mIzma    BOARDNAME := TL-WR703N    DEVICE_PROFILE := TLWR703    TPLINK_HWID := 0x07030101    CONSOLE := ttyATH0,115200endef
 
系统结构
在上一章我们已经完成了刷机工作,这个时候系统进行了首次启动,并且格式化了它的"可写"分区。那么在设备里分区到底是怎么样进行的呢?我们首先需要知道:不同的处理器下OpenWRT分区是略微有所区别,不是所有的分区都完全相同的。在路由器的FLASH上,内核中所使用的驱动是MTD设备驱动。
MTD(Memory Technology Devices,内存技术设备)是用于访问内存类设备(ROM、FLASH)的Linux驱动子系统。它的主要目的使FLASH类设备更加容易被访问,为此它在硬件和上层提供了一个抽象的接口,使得在操作系统下我们可以像操作硬盘一样操作这个设备。仔细观察过Linux启动信息的朋友会看到这么一段话:

[ 0.690000] 5 tp-link partitions found on MTD device spi0.0[ 0.700000] Creating 5 MTD partitions on "spi0.0":[ 0.700000] 0x000000000000-0x000000020000 : "u-boot"[ 0.710000] 0x000000020000-0x00000012a290 : "kernel"[ 0.730000] 0x00000012a290-0x0000007f0000 : "rootfs"[ 0.760000] 0x000000300000-0x0000007f0000 : "rootfs_data"[ 0.760000] 0x0000007f0000-0x000000800000 : "art"[ 0.770000] 0x000000020000-0x0000007f0000 : "firmware"



这些信息表示当前系统识别到的FLASH分区。我们可以用电脑中的计算器计算一下,打开计算器,选择科学型、十六进制,输入名为art的分区容量用(800000-7f0000)结果为10000(十六进制),这个时候点击十进制,系统会自动将结果转换为十进制,再除以1024结果为64(K)表示这个分区容量为64k。在openwrt的系统中现在对atheros方案实现了自动查找分区结尾。
上面的几个分区,我来说明下(分区名称、分区容量、分区作用):

"u-boot":128KB,设备初始化程序+引导程序代码本身
"kernel" :1MB,存放系统内核的二进制代码,按照x86下的讲法是Raw分区,就是这里只有内核的二进制,不存在文件系统。
"rootfs":6.7MB,完整的系统文件包含只读和可写
"rootfs_data":4.9MB,在rootfs中的可写部分的位置
"art":64KB,EEPROM分区,在Atheros的方案中这个分区保存了无线的硬件参数
"firmware":7.9MB,完整的固件位置包含了除"u-boot"和"art"之外全部的内容



看的晕了? 这,我马上画个简单的图给大家看看:

这个是它的分区逻辑。请不要太在意这个地方,有点晕也没关系,继续往后面看,这个地方留着后边慢慢理解。
在系统中,可以执行以下指令查看当前系统分区:

每个分区在flash中的位置是/dev/mtdblockX这样的位置,比如你想把art分区里的数据读出来看看,那么就执行:

然后执行hexdump -C /tmp/1就可以看到这个分区的内容了。
系统的文件结构
好了,我们这一节将的非常重要。上一节说过系统在第一次启动的时候会格式化"可写分区",这在逻辑上到底是啥关系呢?

首先uboot启动了kernel完成之后,由kernel加载"ROM分区"(就是rootfs减去rootfs_data得到的那一块分区)
ROM分区采用的是Linux内核支持的squashFS文件系统(一种压缩只读文件系统),加载完毕后将其挂载到/rom目录(同时也挂载为根文件系统)。
系统将使用JFFS2文件系统格式化rootfs_data这部分并且将这部分挂载到/overlay目录。
将/overlay透明挂载为/分区。
将一部分内存挂载为/tmp目录。



这个时候大家一定有一个问题:到底根文件系统是哪个?这个是OpenWRT设计的一个优点,它采用了一种叫Overlay透明挂载技术,首先将/rom挂载为/根文件,然后再用/overlay覆盖在/之上,这样,当你进行文件系统的变更,修改,所做的操作将在overlay中记录。rom是不改变的。而最简单的恢复出厂设置方法,即是删除掉/overlay下所有文件。

大致上而言,系统的启动流程类似CentOS这类x86下的发行版。

以上就介绍了Flash的相关知识,希望对Flash有兴趣的朋友有所帮助。了解更多内容,请关注职坐标常用软件Flash频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程