在线系统升级功能(一)—mtd工具实现嵌入式设备在线升级

一、flash相关概念

TI COM335 升级功能,板子采用的是一个512M的nand flash,使用mtd管理分区,mtd同时提供了字符设备节点和块设备节点读写flash分区内容:
Nand flash特性:
1)每一位只能从1写0,不能从1写0
2) 虽以block为单位,真正读写按照page
在这里插入图片描述
当然可以借助mtd命令或者uboot阶段的flash读写命令直接擦除烧写flash,但是当系统启动以后运行文件系统,这种方式明显有问题,比如flash_erase擦除mtd下的分区时候会有部分进程使用这些flash,会有报错,回退版本以及升级失败变砖的可能都会发生。

二、ubifs文件系统

1、 生成根文件系统镜像
命令: mkfs.ubifs -q -F -r rootfs -m 2048 -e 126976 -c 1963 -o am335x_ubifs.img

参数说明:
-F: 特殊标志位,使第一次挂载文件系统时修整 Nandflash 剩余空间,以防文件系统认为 ECC 错误;
-r rootfs: 制定镜像的源文件(rootfs)也就是通过编译buildroot生成的文件系统
-m 2048: 页面大小,由 Nandflash 属性决定(evb335x 使用的 nangdflash 为 K9F2G08,其 page 大小为 20482KB);
-e 126976: 逻辑擦除块大小。K9F2G08 的 block size 为 131072128KB),但每个 block 前两个 page
分别用来存放 ubi 的 EC Header 和 VID header,因此逻辑擦除块大小为:
131072-2*2048=126976-c 1963: 用于 ubi 的最大逻辑擦除块数量, 由 Nand 分区 rootfs 大小决定(参考本文档“2.2 Nand Flash
分区”,rootfs size = 0x0f580000,其 block 数量等于:0x0f580000/131072=1964),MTD
官
网上提到,其中一个 block 保留给 ubi,所以此处为 1963(注:如果是 512M 的 Nandflash,
则此处应该为 4011-o am335x_ubifs.img: 生成的镜像文件名(可自定义)。

2、生成可以烧写的的镜像
命令: ubinize -o root.ubi -m 2048 -p 128KiB -s 512 -O 2048 ubinize.cfg

1)、ubinize.cfg文件内容
      ubifs]
		mode=ubi
		image=am335x_ubifs.img //上一步生成的根文件系统镜像
		vol_id=0
		vol_size=100MiB
		vol_type=dynamic
		vol_name=rootfs
		vol_flags=autoresize
  2)参数讲解
    -o root.bin: 生成的根文件系统烧录镜像文件(名称可自定义,但用 SD 卡自动烧录时 u-boot 默认
    -m 2048: 页面大小,由Nand flash属性决定(evb335x 使用的 nangdflash 为 K9F2G08,其页面大小(每个           block 大小为2048B, 2KB);
    -p 128 KiB:物理擦出块大小, 属性由Nand flash决定(K9F2G08 每个 block 大小为 128KB);
    -s 512: sub-page 大小,由 Nandflash 属性决定(K9F2G08 每个 page 包含 4 个 sub-page ,sub-page 为 512B);
    -O 2048:存放 VID header 的起始位置,(每个 block 第 0 个 page 存放 EC header,第 1 个 page存放VID header,每个page 大小为 2048B,因此 VID header 的起始位置为 2048)。

三、烧写验证

1、查看当前系统的ubi情况
在这里插入图片描述
2、将sys/class/ubi/ubi0_0挂载到本地mnt目录下
在这里插入图片描述
3、修改增加删除mnt目录下的文件
发现文件系统根目录下的文件也发生了改变,当重启开发板以后刚才的修改被保存了下来,不需要再进行umount解除挂载

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您解答这个问题。 首先,让我们来了解一下相位检波和MTD的基本原理。 相位检波(Phase Demodulation):将一个调制信号的相位信息提取出来,主要应用于解调调频(FM)信号和调相(PM)信号。相位检波的基本原理是将调制信号与一个参考信号进行相乘,然后将相乘后的信号进行低通滤波,滤掉高频分量,得到的就是调制信号的相位信息。 MTD(Moving Target Detection):移动目标检测,主要应用于雷达信号处理。MTD的基本原理是对雷达接收到的信号进行多普勒频移处理,将移动目标的特征提取出来。 下面是Matlab代码实现相位检波和MTD的示例: ```matlab % 相位检波 fs = 1000; % 采样频率 t = 0:1/fs:1; % 时间序列 fmod = 10; % 调制频率 Amod = 1; % 调制幅度 fref = 100; % 参考频率 Aref = 1; % 参考幅度 phi = pi/2; % 初始相位 mod_sig = Amod*cos(2*pi*fmod*t+phi); % 调制信号 ref_sig = Aref*cos(2*pi*fref*t); % 参考信号 demod_sig = mod_sig.*ref_sig; % 相乘 [b,a] = butter(4,0.1,'low'); % 低通滤波器设计 filtered_sig = filter(b,a,demod_sig); % 低通滤波 figure; subplot(2,1,1); plot(t,mod_sig); % 绘制调制信号 title('调制信号'); subplot(2,1,2); plot(t,filtered_sig); % 绘制相位信息 title('相位信息'); % MTD fs = 1000; % 采样频率 t = 0:1/fs:1; % 时间序列 fc = 100; % 载频频率 fif = 20; % 中频频率 A = 1; % 发射信号幅度 B = 1; % 接收信号幅度 v = 10; % 目标速度 d = 30; % 目标距离 tau = 2*d/c; % 时延 fD = 2*v*fc/c; % 多普勒频移 tx_sig = A*cos(2*pi*fc*t); % 发射信号 rx_sig = B*cos(2*pi*(fc+fD)*t-2*pi*fif*t); % 接收信号 [b,a] = butter(4,[fif-10 fif+10]/(fs/2)); % 带通滤波器设计 filtered_sig = filter(b,a,rx_sig); % 带通滤波 figure; subplot(2,1,1); plot(t,tx_sig); % 绘制发射信号 title('发射信号'); subplot(2,1,2); plot(t,filtered_sig); % 绘制多普勒频移信号 title('多普勒频移信号'); ``` 以上代码仅为示例,具体实现需要根据具体的应用场景进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值