快讯
HOME
快讯
正文内容
mtdblock nand读写 Linux mtd子系统专栏分析之一概述
发布时间 : 2025-03-15
作者 : 小编
访问数量 : 23
扫码分享至微信

Linux mtd子系统专栏分析之一概述

从今天开始,我们进行linux mtd子系统的分析。mtd子系统即为内存技术设备子系统,主要包括nor flash、nand flash等闪存设备相关的子系统模块,而针对sd、tf等存储设备,则主要由mmc子系统模块进行管理并创建对应的块设备。而针对mtd子系统,则会基于mtd原始设备,创建mtd字符设备与mtd块设备,从而在上层与vfs系统进行关联。

针对mtd子系统,主要涉及如下几个方面的介绍:

一、MTD子系统概述

二、MTD设备驱动模型相关数据结构说明

三、MTD块设备与字符设备

四、MTD上层接口与nor/nandflash驱动的关联关系

五、nandflash驱动介绍

六、norflash驱动简要介绍

七、spi nor flash驱动简要介绍

八、应用层完成对flash中存储的镜像升级功能

本篇主要介绍MTD子系统的概念,并简要说明mtd子系统的架构,主要包括mtd子系统与上层文

件系统、与底层驱动间的关联等。

设备间的逻辑关联图与抽象

下图是norflash 、nandflash与cpu之间的关联。针对norflash,可直接与cpu关联,也可通过spi controller与cpu相连;而针对nandflash,即可以通过nandflash controller、spi controlloer与cpu相连。 而针对spi controller、spi device、spi driver的抽象及关联,已在之前的专栏中介绍。而针对nandflash controller,我们在后面会详细说明。

而mtd驱动模型则通过对nor flash、nandflash等闪存设备进行抽象,对上层模块抽象成统一成设备模型(mtd_info),对下则通过mtd_info完成与具体闪存设备驱动的绑定,从而完成对闪存设备的访问操作。此处mtd的抽象,就和vfs抽象类似。

MTD设备驱动模型与VFS及FLASH驱动的关联

如下为mtd设备驱动模型、vfs、flash设备驱动之间的关联图。

针对mtd驱动模型,其对上关联文件系统、对下则主要关联具体的存储驱动。其中mtd block、mtd char均属于mtd驱动模型的部分,而FTL、NFTL则不属于mtd驱动模型部分 ,由具体的文件系统来实现,如ubi文件系统挂载时,则是通过设备文件/dev/ubiX_Y进行挂载;而针对yaffs2文件系统,其可以直接使用/dev/mtdblockX进行挂载(当然其也可以不借助mtdblock)。

Mtd char 的作用

而针对mtd char,主要实现对相应的flash设备进行顺序访问,那mtd char可具体实现什么功能

呢?

可能的应用一:当我们想在文件系统下实现对bootloader、kernel、文件系统镜像的升级操作时,则可以通过读写/dev/mtdX(mtd 字符设备),实现针对bootloader、kernel、filesystem的升级操作。

针对mtd block、mtd char,其均是同调用mtd_info(即mtd设备),实现对具体flash芯片的读写操作的。而mtd_info则代表一个flash芯片或一个flash芯片的分区,当flash设备(nandflash设备、nor flash设备)的驱动初始化时,则会根据分区划分,创建对应的mtd_info,并完成mtd_info与该芯片驱动的绑定操作。而在mtd_info的创建过程中,则会创建对应的mtd char、mtd block,从而完成与vfs的关联。

本篇主要对mtd设备驱动模型做一个大致的概述(已经一个多月没有更新了,人忽然间就懒下来了,本篇即是开个头,以便督促自己继续更新)。

基于AM335X开发板 ARM Cortex-A8——NAND FLASH版本核心板使用说明

前 言:

NAND FLASH版本和eMMC版本核心板使用方法基本一致。本文主要描述U-Boot编译、基础设备树文件编译、固化Linux系统NAND FLASH分区说明和NAND FLASH启动系统、固化Linux系统、AND FLASH读写测试等,NAND FLASH版本与eMMC版本核心板在使用方面的不同之处,相同之处将不重复描述。

创龙科技TL335x-EVM-S是一款基于TI Sitara系列AM3352/AM3354/AM3359 ARM Cortex-A8高性能低功耗处理器设计的评估板。

评估板接口资源丰富,引出双路千兆网口、LCD、HDMI、GPMC、CAN等接口,方便用户快速进行产品方案评估与技术预研,应用在通讯管理、数据采集、人机交互、运动控制、智能电力等典型领域。

U-Boot编译

进行U-Boot编译选项配置时,请执行如下命令。

Host# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x_evm_s_nandboot_defconfig

图 1

我司提供经过验证的U-Boot镜像文件位于产品资料“4-软件资料\Linux\U-Boot\image\u-boot-2017.01-[Git系列号]-[版本号]\”目录下,分别为MLO-nand、u-boot.img-nand。系统启动卡制作完成后,请将MLO-nand和u-boot.img-nand文件复制到系统启动卡BOOT分区下,备份原有的eMMC版本MLO、u-boot.img文件,并将MLO-nand和u-boot.img-nand文件重命名为MLO、u-boot.img。

图 2

Host# sudo cp MLO-nand MLO

Host# sudo cp u-boot.img-nand u-boot.img

图 3

基础设备树文件编译

基础设备树源文件为内核源码“arch/arm/boot/dts/”目录下的tl335x-evm-s-nandflash.dts和tl335x-evm-s-nandflash-hdmi.dts,重新编译基础设备树时请使用此文件。我司提供经过验证的基础设备树文件为产品资料“4-软件资料\Linux\Kernel\image\linux-rt-4.9.65-[Git系列号]-[版本号]\”目录下的tl335x-evm-s-nandflash.dtb和tl335x-evm-s-nandflash-hdmi.dtb,请将其分别复制到系统启动卡rootfs分区以及rootfs-backup分区的boot目录下。

图 4

请执行如下命令将tl335x-evm.dtb软链到tl335x-evm-s-nandflash.dtb文件。tl335x-evm-s-nandflash.dtb支持LCD显示,如需使用HDMI显示,则将tl335x-evm.dtb软链到tl335x-evm-nandflash-hdmi.dtb文件即可。

Host# sudo rm tl335x-evm.dtb

Host# sudo ln -s tl335x-evm-s-nandflash.dtb tl335x-evm.dtb

Host# ls -l

图 5

使用替换了U-Boot和基础设备树文件的Linux系统启动卡启动评估板,进入文件系统执行如下命令可查看到NAND FLASH分区信息,即说明文件替换成功。

Target# cat /proc/mtd

图 6

固化Linux系统

本章节介绍Linux系统固化过程,包括固化U-Boot、内核、设备树和文件系统至NAND FLASH。

NAND FLASH分区说明

进入评估板系统后执行如下命令,查看NAND FLASH分区信息。

Target# cat /proc/mtd

图 7

表 1

NAND FLASH

MTD0

nand.spl:存放U-Boot第一阶段启动文件MLO

MTD1

nand.u-boot:存放U-Boot第二阶段启动文件u-boot.img

MTD2

nand.env:存放环境变量

MTD3

nand.devicetree:存放设备树文件

MTD4

nand.kernel:存放内核镜像

MTD5

nand.logo:存放LOGO文件

MTD6

nand.mini-fs:备用分区,一般存放小型文件系统(暂未使用)

MTD7

nand.rootfs:存放文件系统

固化Linux系统

Linux系统启动卡制作时,已将系统固化的脚本文件mknandboot.sh复制到了Linux系统启动卡文件系统的“/opt/tools/”目录下。

图 8

执行如下命令进行一键固化。

Target# /opt/tools/mknandboot.sh

图 9

脚本会进行如下操作:

擦除NAND FLASH。将Linux系统启动卡BOOT分区中的U-Boot、LOGO固化至NAND FLASH对应分区。将Linux系统启动卡rootfs-backup分区中的文件系统boot目录下的内核镜像和基础设备树文件固化至NAND FLASH对应分区。将Linux系统启动卡rootfs-backup分区中的文件系统固化至NAND FLASH对应分区。

用时约5~10min,Linux系统固化成功,同时串口调试终端打印提示信息。

从NAND FLASH启动系统

评估板断电,将Linux系统启动卡从评估板Micro SD卡槽中取出,根据评估底板丝印将拨码开关拨为10110(1~5),此档位为NAND FLASH启动模式。评估板上电,串口调试终端将会打印如下类似启动信息。

图 10

图 11

NAND FLASH读写测试

本章节对NAND FLASH的MTD6分区进行读写速度测试。MTD6是NAND FLASH的备用分区,一般存放小型文件系统,大小为32MByte。读写测试会将该分区内容擦除,请做好数据备份。

执行如下命令查询NAND FLASH分区,确认MTD6分区大小(读写请勿超出分区大小),将该分区内容擦除。

Target# cat /proc/mtd

Target# flash_erase /dev/mtd6 0 0

图 12

NAND FLASH写速度测试

进入评估板文件系统,执行如下命令对NAND FLASH进行写速度测试。

Target# time dd if=/dev/zero of=/dev/mtd6 bs=1024k count=30

图 13

此处一共写30MByte测试数据到NAND FLASH的MTD6分区下,可看到本次测试的NAND FLASH写速度约为:30MByte/7.79s=3.85MB/s。

NAND FLASH读速度测试

重启评估板,进入评估板文件系统,执行如下命令对NAND FLASH进行读速度测试。

Target# time dd if=/dev/mtd6 of=/dev/null bs=1024k count=30

图 14

此处从NAND FLASH的MTD6分区读取30MByte数据,可看到本次测试的NAND FLASH读速度约为:30MByte/4.44s=6.75MB/s。

相关问答

MTD 是什么意思?

说到NANDflash类文件系统,不得不提到之前的Yaffs2以及UBIFS。这两种文件系统都是基于linux的MTD层而实现的。MTD层就是linux对于NANDflashdriver封装的一...

小米路由器ax6s刷梅林固件?

命令打完,刷完,拔电源重启路由器第六步:把openwrt刷入到rootfs_1分区1.scp把固件openwrt-ipq807x-generic-xiaomi_ax6-squashfs-nand...

imx6q开发板可以烧录vxworks吗?

应该是可以的,其实mtd层也是调用flash本身的驱动然后在tffs文件系统下实现对flash的基本操作,你可以看看Tornado\target\src\drv\tffs下面和你flash比较相似的....

 崔鹏飞  龚家龙 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2025  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部