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系统相关推荐

  1. Linux下的十个好用的命令工具:查看系统版本,显示目录的大小,查看硬盘HDD/SSD,硬盘测速,ssh时自动输入密码,查看程序的内存使用情况,查看I/O的速度,查看ssh密码错误日志,查找文件

    文章目录 1.查看系统版本 2.显示目录的大小 3.查看硬盘是HDD还是SSD 4.硬盘测速 5.在ssh的时候自动输入密码 6.查看程序的内存使用情况 7.查看I/O的速度 8.查看ssh密码错误日 ...

  2. matlab求系统全响应,利用matlab求LTI连续系统的响应

    <利用matlab求LTI连续系统的响应>由会员分享,可在线阅读,更多相关<利用matlab求LTI连续系统的响应(3页珍藏版)>请在人人文库网上搜索. 1.实验3 利用mat ...

  3. cad系统是指利用计算机来帮助,CAD系统是指利用计算机来帮助设计人员进行设计工作的系统...

    CAD系统是指利用计算机来帮助设计人员进行设计工作的系统 更多相关问题 判断(1分) 上海借助世博会的成功举办,将推进文化创意产业的发展. 判断(1分) 多个线程并发地访问共享资源而且涉及到数据的修改 ...

  4. 老挑毛 win7 linux,图解老挑毛u盘启动工具怎么重装系统

    现在的新型电脑为了追求轻便,所以就将光驱取消了,但是这样一来用户不能通过光驱重装系统了,怎么办?别慌,我们还有一个法宝,那就是u盘,而且U盘装系统更加方便.那要怎么使用老毛桃u盘重装系统呢?接下来,小 ...

  5. linux禁止软件连接指定网站,利用iptables来配置linux禁止所有端口登陆和开放指定端口...

    1.关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放. 下面是命令实现: iptables -P INPUT DROP iptables -P FORWARD DROP ipta ...

  6. 电脑向linux服务器传输文件,windows如何通过ssh工具向linux服务器上传和下载文件?...

    这个是很简单的.我用win10和kali给你举例子.kali自带了ssh,只不过我们需要开启它.kali下运行ps -e | grep ssh,你会发现已经有了ssh.只是没有启动,启动方法是/etc ...

  7. 你要了解的11款面向Linux系统的一流备份实用工具

    个人计算机或者服务器上的备份对于防止数据丢失很重要.系统管理员每天需要处理大量的企业级数据,甚至个人计算机上的数据,所以要深入了解不同的备份工具. 经常备份计算机上的数据是个好的做法,它可以手动完成, ...

  8. windows7系统适合哪个python_Python3.6.4在Windows7系统下安装配置教程

    Python3.64在Windows7系统下安装配置教程 工具/原料 Windows7系统 python3.6.4版本 方法/步骤 1 双击应用程序打开如图所示的界面这里是应用程序向导界面 这里建议勾 ...

  9. win7备份工具_Win7/10系统如何一键还原系统?一键备份还原系统方法图文教程

    Windows是全球目前使用最广泛的操作系统之一,大家在使用Windows系统的过程中,难免会出现各种系统故障或者中病毒的情况,甚至系统奔溃导致无法开机进入桌面的情况,遇到这些问题,我们只有重新安装系 ...

最新文章

  1. envoy实现_微服务之服务治理:Envoy 全局 gRPC 限速服务 lyft/ratelimit 详解
  2. BFPRT 算法 (TOP-K 问题)——本质就是在利用分组中位数的中位数来找到较快排更合适的pivot元素...
  3. oracle的函数索引怎么建,如何创建oracle函数索引
  4. 爬楼梯—leetcode70
  5. Python在Linux实现代码特效,关于在Linux系统上的Ubuntu上基于python3、shell语言代码的实现...
  6. 在Mysql中遇到关于区间范围内的索引优化
  7. c++ primer plus 内存模型和名称空间
  8. html图表实现,用 Flotr2 实现的 HTML5 图表
  9. Matlab 输入输出操作
  10. android holder 一定要内部类吗,Android ViewHolder
  11. 显示器色彩精度测试软件,色域及色彩精准度测试_液晶显示器_液晶显示器评测-中关村在线...
  12. 郑捷《机器学习算法原理与编程实践》学习笔记(第六章 神经网络初步)6.2 BP神经网络...
  13. Hinton最新演讲:前向-前向神经网络训练算法
  14. AI智能视频分析系统提升水泥厂安全监管解决方案
  15. 解决关于VS无法加载解决方案中的项目的问题
  16. Photoshop学习(十四):使用快速蒙版
  17. 简单定制统信UOS镜像的方法
  18. 如何用计算机做函数图像,用计算机画函数图像 优秀教学实录
  19. java.sql.SQLException: ORA-00918: 未明确定义列ORA-00918
  20. P7选修 深度学习介绍

热门文章

  1. 解密一个话费慢充的灰产项目
  2. 影评系统的机遇和挑战
  3. 三升序列20210314-20210413
  4. 生产docker run 卡住没反应故障排查思路
  5. 从两张Excel表格中筛选相同的值
  6. 微信小程序开发--组织通讯录
  7. NetworkInterface网速监测
  8. Excel VBA多行连续数据分类合并
  9. “偶遇” 爱可生 与 MYSQL 大型应用
  10. 弘辽科技:拼多多批发单算销量吗?拼多多刚开店怎么有销量