使用linux集体升级系统,1.3. 利用mtd工具升级Linux系统
1.3. 利用mtd工具升级Linux系统
利用mtd工具升级系统,其实说白了,就是:
用flasherase擦除数据
先用flasherase擦除对应mtd分区中的内容
用nandwrite写入数据
然后将对应的数据(uboot或uImage或rootfs)用nandwrite写入到对应的mtd中对应的位置即可。
前面介绍过了,对于常见的是把uboot(和kernel)放到nor flash中,而把kernel和rootfs放在nand flash中的。
而我此处的举的例子,是另外一种,即全部内容都放在nand flash上的。
但是,不论是是nor flash,还是nand flash,都在Linux的MTD框架下,管理起来,都是一样的。都是可以用对应的mtd的工具去操作的。所以,如果你本身是要升级对应的uboot(和kernel)到nor flash,对于整个过程,也是一样的,自己照葫芦画瓢即可。
关于我此处举例所用的MTD的分区是如何的,此处先给出相关部分的代码:
#define UBOOT_SIZE (SZ_1M)
#define KERNEL_SIZE (SZ_8M)
#define ROOTFS_SIZE (SZ_1M*200)
#define TEMP_SIZE (SZ_1M*64)
#define BEFORE_DATA_PARTION_SIZE \
(ROOTFS_SIZE + KERNEL_SIZE + UBOOT_SIZE + TEMP_SIZE)
。。。
static struct mtd_partition XXX_default_nand_part[] = {
[0] = {
.name= "U-Boot",
.offset= 0,
.size= UBOOT_SIZE,
},
[1] = {
.name= "Kernel",
.offset = UBOOT_SIZE,
.size= KERNEL_SIZE
},
[2] = {
.name= "Root filesystem",
.offset = UBOOT_SIZE + KERNEL_SIZE,
.size= ROOTFS_SIZE,
},
[3] = {
.name= "Temp",
.offset = UBOOT_SIZE + KERNEL_SIZE + ROOTFS_SIZE,
.size= TEMP_SIZE,
},
[4] = {
.name= "Data",
.offset= BEFORE_DATA_PARTION_SIZE,
.size= 0, /* set in XXX_init_nand_partion() */
},
};
对应的用图表来说明,如下:
图 1.1. Linux系统中的Nand MTD分区
下面就来介绍,如何一步步升级uboot,kernel和rootfs。
1.3.1. 升级Uboot
擦除uboot所在分区的所有数据
./util/flash_eraseall /dev/mtd0
擦除旧的uboot的环境变量
./util/flash_erase /dev/mtd1 0x700000 2
0x800000~0x900000
即/dev/mtd1中的0x700000~0x800000, 用于存放uboot中的环境变量。
重新升级uboot的同时,先把旧的环境变量擦除掉。
写入uboot数据
./util/nandwrite -p -s 0x80000 /dev/mtd0 u-boot_addHeader.bin
-p参数
表示如果要写入的数据不是页大小的整数倍,会自己加填充数据即,如需要,自动padding。
0x80000
是当前4K的pagesize的nand flash的一个块的大小。
1.3.2. 升级Kernel
擦除旧的kernel数据
./util/flash_erase /dev/mtd1 0 10
其中的参数0,表示从/dev/mtd1起始位置开始擦除
参数10是表示要擦除的block数目
/dev/mtd1的物理起始地址是0x100000,而0x100000~0x600000之间,是用于保存uImage的数据,所以:
要擦除的block的数目
= 要擦除的大小/块大小
= 0x500000/块大小
= 5M/512KB
= 10
其中,当前用的是这个4K pagesize的nand的块大小是512KB。
写入kernel数据
./util/nandwrite -p /dev/mtd1 uImage
1.3.3. 升级rootfs
擦除rootfs所在分区数据
./util/flash_eraseall /dev/mtd2
写入新的rootfs
./util/nandwrite -o /dev/mtd2 rootfs.4k.arm.yaffs2
因为此处的rootfs镜像文件是yaffs2文件系统,包含了oob数据。所以此处加上参数-o,意思是写入页数据同时也写入oob数据,而且,加了-o 参数同时就不能再像之前的uboot和uImage一样,加-p参数了,因为包含了oob数据的rootfs,本身就是页大小的整数倍,不需要padding。
不论实际使用的是4K+128 还是对于4K+218(内部处理为4K+192)的nand,此处都是使用4K+128的rootfs镜像。
使用linux集体升级系统,1.3. 利用mtd工具升级Linux系统相关推荐
- Linux下的十个好用的命令工具:查看系统版本,显示目录的大小,查看硬盘HDD/SSD,硬盘测速,ssh时自动输入密码,查看程序的内存使用情况,查看I/O的速度,查看ssh密码错误日志,查找文件
文章目录 1.查看系统版本 2.显示目录的大小 3.查看硬盘是HDD还是SSD 4.硬盘测速 5.在ssh的时候自动输入密码 6.查看程序的内存使用情况 7.查看I/O的速度 8.查看ssh密码错误日 ...
- matlab求系统全响应,利用matlab求LTI连续系统的响应
<利用matlab求LTI连续系统的响应>由会员分享,可在线阅读,更多相关<利用matlab求LTI连续系统的响应(3页珍藏版)>请在人人文库网上搜索. 1.实验3 利用mat ...
- cad系统是指利用计算机来帮助,CAD系统是指利用计算机来帮助设计人员进行设计工作的系统...
CAD系统是指利用计算机来帮助设计人员进行设计工作的系统 更多相关问题 判断(1分) 上海借助世博会的成功举办,将推进文化创意产业的发展. 判断(1分) 多个线程并发地访问共享资源而且涉及到数据的修改 ...
- 老挑毛 win7 linux,图解老挑毛u盘启动工具怎么重装系统
现在的新型电脑为了追求轻便,所以就将光驱取消了,但是这样一来用户不能通过光驱重装系统了,怎么办?别慌,我们还有一个法宝,那就是u盘,而且U盘装系统更加方便.那要怎么使用老毛桃u盘重装系统呢?接下来,小 ...
- linux禁止软件连接指定网站,利用iptables来配置linux禁止所有端口登陆和开放指定端口...
1.关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放. 下面是命令实现: iptables -P INPUT DROP iptables -P FORWARD DROP ipta ...
- 电脑向linux服务器传输文件,windows如何通过ssh工具向linux服务器上传和下载文件?...
这个是很简单的.我用win10和kali给你举例子.kali自带了ssh,只不过我们需要开启它.kali下运行ps -e | grep ssh,你会发现已经有了ssh.只是没有启动,启动方法是/etc ...
- 你要了解的11款面向Linux系统的一流备份实用工具
个人计算机或者服务器上的备份对于防止数据丢失很重要.系统管理员每天需要处理大量的企业级数据,甚至个人计算机上的数据,所以要深入了解不同的备份工具. 经常备份计算机上的数据是个好的做法,它可以手动完成, ...
- windows7系统适合哪个python_Python3.6.4在Windows7系统下安装配置教程
Python3.64在Windows7系统下安装配置教程 工具/原料 Windows7系统 python3.6.4版本 方法/步骤 1 双击应用程序打开如图所示的界面这里是应用程序向导界面 这里建议勾 ...
- win7备份工具_Win7/10系统如何一键还原系统?一键备份还原系统方法图文教程
Windows是全球目前使用最广泛的操作系统之一,大家在使用Windows系统的过程中,难免会出现各种系统故障或者中病毒的情况,甚至系统奔溃导致无法开机进入桌面的情况,遇到这些问题,我们只有重新安装系 ...
最新文章
- envoy实现_微服务之服务治理:Envoy 全局 gRPC 限速服务 lyft/ratelimit 详解
- BFPRT 算法 (TOP-K 问题)——本质就是在利用分组中位数的中位数来找到较快排更合适的pivot元素...
- oracle的函数索引怎么建,如何创建oracle函数索引
- 爬楼梯—leetcode70
- Python在Linux实现代码特效,关于在Linux系统上的Ubuntu上基于python3、shell语言代码的实现...
- 在Mysql中遇到关于区间范围内的索引优化
- c++ primer plus 内存模型和名称空间
- html图表实现,用 Flotr2 实现的 HTML5 图表
- Matlab 输入输出操作
- android holder 一定要内部类吗,Android ViewHolder
- 显示器色彩精度测试软件,色域及色彩精准度测试_液晶显示器_液晶显示器评测-中关村在线...
- 郑捷《机器学习算法原理与编程实践》学习笔记(第六章 神经网络初步)6.2 BP神经网络...
- Hinton最新演讲:前向-前向神经网络训练算法
- AI智能视频分析系统提升水泥厂安全监管解决方案
- 解决关于VS无法加载解决方案中的项目的问题
- Photoshop学习(十四):使用快速蒙版
- 简单定制统信UOS镜像的方法
- 如何用计算机做函数图像,用计算机画函数图像 优秀教学实录
- java.sql.SQLException: ORA-00918: 未明确定义列ORA-00918
- P7选修 深度学习介绍