无法生成sysupgrade.bin 及分区结构

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,115200
endef

系统结构

在上一章我们已经完成了刷机工作,这个时候系统进行了首次启动,并且格式化了它的"可写"分区。那么在设备里分区到底是怎么样进行的呢?我们首先需要知道:不同的处理器下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就可以看到这个分区的内容了。

系统的文件结构

好了,我们这一节将的非常重要。上一节说过系统在第一次启动的时候会格式化"可写分区",这在逻辑上到底是啥关系呢?

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

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

大致上而言,系统的启动流程类似CentOS这类x86下的发行版。由于本文读者多是熟悉linux的朋友,关于系统的启动流程不做详细解释了。

时间: 2024-12-18 14:47:24

无法生成sysupgrade.bin 及分区结构的相关文章

全是干货:MBR分区结构以及GPT分区结构

一.MBR分区结构 ? ?MBR磁盘分区是一种使用最为广泛的分区结构,它也被称为DOS分区结构,但它并不仅仅应用于Windows系统平台,也应用于Linux,基于X86的UNIX等系统平台.它位于磁盘的0号扇区(一扇区等于512字节),是一个重要的扇区(简称MBR扇区).MBR扇区由以下四部分组成:引导代码:引导代码占MBR分区的前440字节,负责整个系统启动.如果引导代码被破坏,系统将无法启动.Windows磁盘签名:占引导代码后面的4字节,是Windows初始化磁盘写入的磁盘标签,如果此标签

MBR与GPT的分区结构

1.MBR的结构    MBR :Master Boot Record(主引导记录) 作用是读取磁盘分区表里面所设定的活动分区 ,位于硬盘的柱面0.磁头0.扇区1的位置,即0磁道位置. 那么从右侧分区表结构中我们可以看到起始扇区和扇区大小分别为4bytes 所以它的极限就是16^8(16的8次方)bytes=2199023255552bytes=2.2TB 这就是MBR结构分区表2.2TB的限制由来. 2.GPT分区的结构 GPT :GUID Partition Table(全局唯一标识分区表)

zynq生成boot.bin的批处理...方便啊!

在xilinx的SDK下生成boot.bin的过程,有时非常让人恼火... 得手动选几个文件xx.fsbl, xx.bit, xx.elf.....选来选去的非常麻烦, 而且SDK还常常Browse时...还不指定在当前工程目录下... 所以,我一怒之下,想写个批处理...没有写出来...拖延症严重.. *_* 最后还是高老师出马,我基本照抄...写了个简单注释... 总之是非常方便,手动把要转的bit,fsbl.elf,xx.elf一起拖到这个批处理中.... 如xxxx.bit,  xxx_

自动生成版本信息,重新编译指定文件,一键编译IAR工程同时生成hex,bin,out文件

平台:IAR + windows_bat 1.自动生成版本信息 目的: 脚本自动更新程序svn对应的的版本号 前提: svn需要安装command line (参考 https://jingyan.baidu.com/article/a3a3f8113f89198da2eb8aed.html) 主要技术点: 具体.bat脚本主要来源于网络,文件放置在agv_dev_platform->User目录下,编译脚本将生成svnversion.h文件,文件内容仅是SVN_REVISION的一个宏,最终程

ThinkPHP5.0中的build.php自动生成所需的目录结构的详细方法

一.来到根目录下,找到bulid.php文件进行改写. 改写方法:保留常用的目录结构,其余按照需求改吧! 二.复制一份build.php文件到application目录下 此时根目录下的bulid.php文件可以删除了,tp5生成目录结构和文件用到的是application里面的bulid.php文件, 但是根目录下的建议留下下次使用. 三.打开cmd来到tp5.0的根目录下. 四.运行以下代码(开始编译生成文件). php think build --config build.php 五.生成

Word报告自动生成(例如 导出数据库结构)

将很早之前写的一个小组件重新整理优化一下,做成一个通用的功能.适用于导出数据库的结构(表.字段等)到Word或将体检数据自动生成Word版的体检报告等.代码:Github 一.主要需要完成功能: 1. 灵活的配置规则及word样式设置(文本.表格.图表.颜色等). 2. 支持表格. 3. 支持图表. 4. 支持章节内容循环生成. 5. 支持目录. 6.支持文档结构图 7.更新指定位置的文字 8.支持pdf导出. 最后结果如下: 图一 图二 图三 二.需求分析与实现方式   功能主要涉及3个比较重

磁盘分区结构划分

一.硬盘分区由五部分构成(FAT文件系统) 1> MBR-主引导记录 2> DBR-系统引导记录 3> FAT-文件分配表 4> FDT-文件目录表 5> DATA-数据区 MBR-硬盘主引导记录,它是由FDISK建立在柱面0.磁头0,扇区1的磁盘引导记录数据区,它不属于任何操作系统.用于硬盘启动时将系统控制权转给用户指定的,并在分区表中登记了的某个操作系统区.一个物理硬盘只有一个MBR. DBR-由FORMAT高级格式化写到磁盘逻辑0扇区上的,主要功能室完成DOS系统的自举

PHP生成MySQL数据字典 数据表结构

<?php /** * 生成mysql数据字典 */ // 配置数据库 $database = array(); $database['DB_HOST'] = '127.0.0.1'; $database['DB_NAME'] = 'cqhshop'; $database['DB_USER'] = 'root'; $database['DB_PWD'] = '123456'; $mysql_conn = @mysql_connect("{$database['DB_HOST']}"

TP支持菜单动态生成RBAC权限系统数据库结构设计方案

最简单基于RBAC权限系统数据库结构设计 包括如下几个表 1. 用户表 -- Table "t_user" DDL CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(100) DEFAULT NULL, `password` varchar(100) DEFAULT NULL, `name` varchar(100) DEFAULT NULL, `status` int(11