交叉编译mtd-utils工具(linux下flash工具)

合集下载

uclinux下Nand+Flash的JFFS2文件系统的移植

uclinux下Nand+Flash的JFFS2文件系统的移植

uclinux下Nand Flash的JFFS2文件系统的移植uclinux下Nand Flash的JFFS2文件系统的移植(写在前面)现在(2005-12-5),linux对mtd设备支持的好得多,远没有我当时(大概2.5年前吧)做得那么复杂了,这里仍然要发原文,是因为想给初学者提供一个参考思路,介绍一下我对linux的学习了解的整个过程,希望对大家有借鉴意义。

但是,建议还是使用最新的mtd补丁,新版本的mtd包括了对2k page 的nand flash的支持,要使用大于128MB的Nand flash,就用这个吧。

文件系统方面,建议在Nor flash上,使用jffs2(jffs3也有,但是,我没用过,没有发言权)。

在Nand flash上强烈建议使用yaffs,这比jffs2快很多,而且支持direct模式,在其他系统,比如:uCOS-II、winCE等都可以使用。

我已经做到了在uCOS-II下和Linux下通过yaffs文件系统实现共享。

但是,要想使用2k page的nand flash,只有使用yaffs2了。

现在,yaffs2开源的代码有点问题,不能直接和mtd设备配合使用,稍作修改可以实现,有兴趣,我可以专门再写一片yaffs2的移植心得。

uclinux下Nand Flash的JFFS2文件系统的移植(1)继续上一篇《uClinux下移植Ne2000兼容的网卡驱动程序》中介绍的平台和操作系统,开始写JFF2的感想。

虽然JFFS2的移植弄出来有一段时间了,但是,前一段时间忙着期末考试,无心写心得。

昨天总算考完了,我就继续罗嗦那段时期的经历吧,希望把我遇到的问题和解决的方法和大家共享。

错误之处也请不吝指出。

我使用的uClinux的硬件平台还是44B0那个板子具体的情况参见《uClinux下移植Ne2000兼容的网卡驱动程序》中的介绍。

Flash我用的是三星公司的K9F2808——16MByte的Nand Flash。

mtd-utils 工具的使用

mtd-utils 工具的使用

一.下载源码包。

二.编译1.修改MakefileCROSS=mipsel-linux-2.make3.将编译生成的可执行文件COP Y到开发板上三.命令的使用使用命令前用cat /proc/mtd 查看一下mtdchar字符设备;或者用ls -l /dev/mtd*#cat /proc/mtddev: si z e erasesi z e namemtd0: 00c00000 00020000 "ROOTFS"mtd1: 00200000 00020000 "BOOTLOADER"mtd2: 00200000 00020000 "KE RNE L"mtd3: 03200000 00020000 "NAND ROOTFS partition"mtd4: 04b00000 00020000 "NAND DATAFS partition"为了更详细了解分区信息用mtd_debug命令#mtd_debug info /dev/mtdX (不能使用mtdblockX, mtdblockX 只是提供用來mount 而已)mtd.type = MTD_NORFLASHmtd.flags =mtd.size = 12582912 (12M)mtd.erasesi z e = 131072 (128K)mtd.oobblock = 1mtd.oobsize = 0mtd.ecctype = (unknown E CC type - new MTD API maybe?)regions = 0命令:flash_erase作用:擦出指定范围内flash的内容,如果不指定,默认擦出起始位置的第一块,使相应flash变为全1 用法:flash_erase MTD-device [start] [cnt (# erase blocks)] [lock]MTD-device:待擦出的分区,如/dev/mtd0start:起始位置设置,这里必须设置为0x20000(128K)的整数倍cnt: 从start开始计算,要擦出的块数lock: 写保护eg: ./flash_erase /dev/mtd0 0x40000 5 //擦出mtd0分区上从0x40000开始的5块数据,128K/块作用:擦出整个分区的数据,同时也会作坏块检测用法:flash_eraseall [OPTION] MTD_DE V ICE-q, --quiet 不显示打印信息-j, --j f fs2 一j f fs2 格式化分区eg: ./flash_eraseall -j /dev/mtd0命令:flashcp作用:copy数据到 flash 中用法:usage: flashcp [ -v | --verbose ] <filename> <device>flashcp -h | --helpfilename:待写入的数据device: 写入的分区,如/dev/mtd0eg:filename制作:mkfs.jffs2 -e 0x20000 -d cq8401 -o cq8401.img -n //这里的-e 0x20000 必须更你芯片的erasesize 相等./flashcp cq8401.img /dev/mtd0 // copy cq8401.img文件系统到/dev/mtd0分区中当然这个命令的功能跟dd i f=/tmp/fs.img of=/dev/mtd0差不多命令:nand write作用:向nand flash中写数据用法:nandwrite [OP TION] MTD_DE VICE INPUTFILE-a, --autoplace Use auto oob layout-j, --jffs2 force j f fs2 oob layout (legacy support)-y, --yaffs force yaffs oob layout (legacy support)-f, --forcelegacy force legacy support on autoplacement enabled mtd device-n, --noecc write w ithout ecc-o, --oob image contains oob data-s addr, --start=addr set start address (default is 0)-p, --pad pad to page size-b, --blockalign=1|2|4 set multiple of eraseblocks to align to-q, --quiet don't di s play progress messages--help display this help and exit--version output version information and exiteg: ./nandwrite -p /dev/mtd0 /tmp/rootfs.j f fs2作用:dump出nand flash一些信息,如:block size,erasesize,oobblock 大小,oob data ,page data等;同时也会作坏块检测用法:nanddump [OP TIONS] MTD-device--help display this help and exit--version output version information and exit-f file --file=file dump to file-i --ignoreerrors ignore errors-l length --length=length length-o --omitoob omit oob data-b --omitbad omit bad blocks from the dump-p --prettyprint print nice (hexdump)-s addr --startaddress=addr start addresseg:./nanddump -p -f nandinfo.txt /dev/mtd0 //dump出nand flash /dev/mtd0数据并保存到nandinfo.txt命令:mtd_debug作用: 对mtd 调试作用用法:usage: mtd_debug info <device>mtd_debug read <device> <offset> <len> <dest-filename>mtd_debug w rite <device> <offset> <len> <source-filename>mtd_debug erase <devi c e> <offset> <len>eg:#./mtd_debug info /dev/mtd0 // 输出/dev/mtd0上的一些信息,这里必须用mtdx#./mtd_debug erase /dev/mtd0 0x0 0x40000 // 擦出/dev/mtd0 分区上从0x0开始的,128K*2 大小的数据#./mtd_debug write /dev/mtdblock0 ox0 0x360810 cq8401.img //向mtdblock0分区,写入 3.6M 大小的文件系统cq8401.img,这里最好用mtdblockx#./mtd_debug read /dev/mtdblock0 ox0 0x360810 read.img //从mtdblock0中读出3.6M 数据保存到read.img# cmp -l cq8401.img read.img // 验证write to flash 和read from flash 中的数据是否一致;也可以使用di f f命令来比较另外针对nand flash,mtd_debug这个工具来测试mtd驱动也不是很好,用nand write和nanddump这两个工具或许更好点。

Hi3516dv300搭建开发环境——编译osdrv(7)-mtd-utils2.0.2的。。。

Hi3516dv300搭建开发环境——编译osdrv(7)-mtd-utils2.0.2的。。。

Hi3516dv300搭建开发环境——编译osdrv(7)-mtd-utils2.0.2的。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%注意1:如果你要安装automake1.15.1,建议你的安装顺序为:M4 -> autoconf -> automake(⼀定要安照这个顺序,不然会出现很多错误,建议从下⾯的3)开始看),这关于这⼏个包以及相关下载地址会在下⾯有⽂字或图⽚解释.有⼀个问题:我指定安装⽬录的时候⽐如安装m4和autoconf的时候为什么在/usr/local/建⽴名为m4⽂件夹,当m4安装到这个⽂件后为什么安装运⾏./configure --prefix=/usr/local/autoconf就⼀直提⽰要你安装m4,但是你都将他们安装在/usr/local/这同⼀⽬录下就不会出现该问题,我想是不是因为安装在不同⽬录系统是不是识别不了才出现这个问题,注意2:下⾯的⼀、⼆、三、四的安装顺序是我按照说明⽂档的安装顺序,亲测这个顺序是有问题的,在其中我插⼊了遇到的⼀些问题,以及对问题的解决%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1、本⽂的autoconf的安装过程可以参考:https:///xlwang1995/p/10604104.html 注意:只参考它的autoconf安装即可,不要按照它的顺序2、本⽂automake1.15.1的安装与autoconf的安装类似3、本⽂安装顺序参考⾃:https:///ubuntucc/article/details/9264165⼀、mtd-utils2.0.2依赖以下⼏个库,以ubuntu为例,安装⽅式请参考下⾯命令:sudo apt-get install zlib1g-dev liblzo2-dev uuid-dev pkg-config⼆、由于mtd-utils2.0.2通过pkg-config⼯具检查各个库是否正常安装,因此请参考如下⽅式设置pkg-config⼯具搜索路径:export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib/x86_64-linux-gnu/pkgconfig"注:这⼀步可参考链接:https:///weixin_41041772/article/details/102767759理解:输⼊指令:pkg-config --variable pc_path pkg-config出现问题:pkg-config命令未发现,可以安装这个包,安装这个包后重新输⼊该指令,发现这个路径/usr/lib/x86_64-linux-gnu/pkgconfig有了,故可进⾏下⼀步三、mtd-utils2.0.2依赖于automake1.15.1版本,请参考如下⽅式安装automake1.15.1版本:1、删除原有automake版本sudo apt-get autoremove automake2、下载1.15.1版本1)Windows系统中使⽤浏览器访问automake⼯程url并下载对应源码包:https:///archive/html/info-gnu/2017-06/msg00007.html2)linux系统中可以使⽤下⾯命令下载:wget ftp:///gnu/automake/automake-1.15.1.tar.gz3、编译安装automake1.15.1tar zxvf automake-1.15.1.tar.gzcd automake-1.15.1/./configure注:安装到这⼀步出错了,原因是autoconf版本太低了,输⼊指令下载autoconf2.65,(我下载的为2.68),1)输⼊下载的指令为:wget ftp:///gnu/autoconf/autoconf-2.68.tar.gz2)解压到指定⽬录(我解压到root⽬录下),-C为指定路径命令3)出现提⽰需要下载另⼀个包m4,同样⽤wget⽅法4)这次解压⽤绝对路径,(绝对路径是不是为在prefix前⾯加两个减号)指定解压位置:指定安装路径:最后安装编译:4.1)执⾏到这⼀步出现三个错误:4.2)第⼀个错误为:c:83:3:error:#error please port gnulib freadahead.c to your platf orm!Look at the..........解决办法:在在该⽬录下的终端(就是从终端进⼊m4-1.4.14⽬录也⾏)输⼊指令:sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.cecho "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h注意:这指令⾥⾯的IO中的I为⼤写的i, lib/stdio-impl.h这⾥⾯的l位⼩写字母l此步参考链接为:第⼆个为:error:get undeclared here (not in a function);did you mean......出现这个问题,参考链接:https:///weixin_34168880/article/details/91842744按照这个⽅法处理后,竟然⼜出现了两个错误4.3)第三个为:/m4-1.4.14/src/path.c:118: undefined reference to `S_ISDIR'的错误参考链接:https:///ubuntucc/article/details/9264165⾮常感谢这个链接的博主,通过这个⽂章我知道我掉坑⾥去了,知道了正确的安装顺序为:M4 -> autoconf -> automake (很重要!!!!)你要是按照osdrv/tools/jffs2_tool/readme_cn.txt⾥⾯的安装步骤你就会以⼀个相反的安装顺序安装并会出现我上⾯所有的问题,⼀个软件还没安装完问题就出现了,⼜解决这个问题解决问题中⼜出现问题到最后⼀个软件也没安装上。

ARM、linux常用服务器+交叉编译工具链

ARM、linux常用服务器+交叉编译工具链

1.tftp服务器在安装linux时通常可供选择是否安装tftp服务器启动后可通过在控制终端输入netstat -a|grep tftp查看是否已经安装若已安装则为如下打印信息:[root@localhost /]# netstat -a|grep tftpudp 0 0 *:tftp *:*若没有安装则可使用rpm –ivh tftp-server-0.42-3.1.i386.rpm进行安装然后建立主要工作目录mkdir /tftpboot接下来配置tftp服务器vim /etc/init.d/tftp# default: off# description: The tftp server serves files using the trivial file transfer \# protocol. The tftp protocol is often used to boot diskless \# workstations, download configuration files to network-aware printers, \# and to start the installation process for some operating systems.service tftp{socket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s /tftpbootdisable = noper_source = 11cps = 100 2flags = IPv4}注意修改server_args = -s /tftpboot为你tftp工作目录。

接下来便是重启tftp 服务器了/etc/init.d/xinetd restart打印出如下信息[root@localhost /]# /etc/init.d/xinetd restartStopping xinetd: [ OK ]Starting xinetd: [ OK ]表示重启成功接下来便可查看是否已经安装成功[root@localhost /]# netstat -a|grep tftpudp 0 0 *:tftp *:*2.nfs服务器首先查看nfs服务器是否被安装(这里为red-had5)rpm –q nfs-utils若打印出如下信息则表示已经被安装[root@localhost ~]# rpm -q nfs-utilsnfs-utils-1.0.9-24.el5若没有安装nfs服务器则先下载相应的nfs服务器包百度一个即可然后rpm –ivh nfs- utils-1.0.9-24.el5.i386.rpm这里使用的nfs版本为utils-1.0.9-24.el5故不同版本安装不同,然后进入nfs配置vi /etc/exports/nfsroot/rootfs 211.67.216.* (rw,sync,no_root_squash)211.67.216.* 配置网段为自己IP地址同一网段然后启动NFS服务器/etc/init.d/nfs start 启动nfs服务器如下所示:[ OK ] Starting NFS quotas: [ OK ] Starting NFS daemon: [ OK ] Starting NFS mountd: [ OK ]然后即可挂载nfs服务器上的共享目录了mount –t nfs xx.xx.xx.xx:/xx /mntxx.xx.xx.xx为nfs服务器ip地址/xx 为需要挂载的目录接下来ls /mnt 即可查看是否挂载成功3.samba服务器在安装linux时选中安装samba服务器然后这里就只需配置即可vim /etc/samba/smb.conf约248行复制6行248 [homes]249 comment = Home Directories250 browseable = no251 writable = yes252 ; valid users = %S253 ; valid users = MYDOMAIN\%S然后粘贴修改如下254 [root]255 comment = Root Directories256 browseable = yes257 writable = yes258 path = /259 ; valid users = smb260 ; valid users = MYDOMAIN\%S这里valid users = smb如果smb用户存在则不需添加否则需要添加useradd smb然后设置smb账户登录密码smbpasswd –a smb重启smb服务器/etc/init.d/smb restart设置好linux ip后在windows命令行运行\\xx.xx.xx.xx 输入账户密码即可访问linux目录了xx.xx.xx.xx为虚拟机linux IP地址通过chmod修改权限即可实现linux和windows文件共享了。

交叉编译工具链的制作

交叉编译工具链的制作

交叉编译⼯具链的制作交叉编译⼯具链的制作前⾔及准备本笔记制作的交叉编译⼯具已通过简单验证,对初次有需求需要搭建交叉⼯具链有⼀定的指导意义,制作⼯具链⽐较耗时,需做好花费⼀整天时间的准备。

资料学习链接linux⼯具、软件安装的基本步骤:下载,配置,编译,安装crosstool-ng下载或使⽤指令新建 arm-linux-tool ⽂件夹⽤于制作⼯具链mkdir arm-linux-toolcd arm-linux-toolwget /download/crosstool-ng/crosstool-ng-1.23.0.tar.bz2tar -xvjf crosstool-ng-1.23.0.tar.bz2新建mkdir crosstool-build crosstool-install src⼀、安装crosstool-ng1.编译依赖sudo apt-get install gperf flex bison texinfo gawk libtool automake libncurses5-dev g++ help2mangperf是完美哈希函数⽣成器;bison和flex是⽤来⽣成语法和词法分析器;texinfo和man类似,⽤来读取帮助⽂档;automake是帮助⽣成Makefile的⼯具;libtool帮助在编译过程中处理库的依赖关系,⾃动搜索路径;gawk是linux下⽤于⽂本处理和模式匹配的⼯具;2.配置、安装cd crosstool-ng-1.23.0./configure --prefix /home/wangh/workspace/wh_tools/arm-linux-tool/crosstool-install/配置过程中出现的缺少安装项通过安装解决配置正常⽣成 makefile 后,进⾏编译安装makemake install验证安装是否成功在 crosstool-install/bin ⽬录下执⾏ ./ct-ng -v为了后⾯使⽤⽅便,配置临时环境变量export PATH=$PATH:/home/wangh/workspace/wh_tools/arm-linux-tool/crosstool-install/bin/⼆、配置交叉编译⼯具链对于常见的架构,⽐如arm,mips,powerpc等等,都有了很多的,已经帮我验证过,可以正常编译的⽰例配置了,所以我们接下来,主要就是:搞懂⾃⼰借⽤哪个配置,然后调⽤默认配置,然后再确认⼀下配置,根据⾃⼰的情况去改⼀改,就差不多,就配置好了。

Linux交叉编译简介

Linux交叉编译简介

Linux交叉编译简介Linux 交叉编译简介主机,⽬标,交叉编译器主机与⽬标编译器是将源代码转换为可执⾏代码的程序。

像所有程序⼀样,编译器运⾏在特定类型的计算机上,输出的新程序也运⾏在特定类型的计算机上。

运⾏编译器的计算机称为主机,运⾏新程序的计算机称为⽬标。

当主机和⽬标是同⼀类型的机器时,编译器是本机编译器。

当宿主和⽬标不同时,编译器是交叉编译器。

为什么要交叉编译?某些设备构建程序的PC,⽤户可以获得适当的⽬标硬件(或模拟器),启动 Linux Release版,在该环境中进⾏本地编译。

这是⼀种有效的⽅法(在处理 Mac Mini时甚⾄可能是⼀个好主意),但对于 linksys 路由器,或 iPod,有⼀些突出的缺点:速度- ⽬标平台通常⽐主机慢⼀个数量级或更多。

⼤多数专⽤嵌⼊式硬件是为低成本和低功耗⽽设计的,⽽不是⾼性能。

由于在⾼性能桌⾯硬件上运⾏,现代模拟器(如 qemu)实际上⽐模拟的许多现实世界的硬件要快。

性能- 编译⾮常耗费资源。

⽬标平台通常没有台式机GB 内存和数百 GB 磁盘空间;甚⾄可能没有资源来构建“hello world”,更不⽤说⼤⽽复杂的包了。

可⽤性-未运⾏过的硬件平台上运⾏ Linux,需要交叉编译器。

即使在 Arm 或 Mips 等历史悠久的平台上,给定⽬标找到最新的全功能预构建本机环境很困难。

如果平台通常不⽤作开发⼯作站,可能没有现成的最新预构建Release版,如果有,则可能已经过时。

如果必须先为⽬标构建Release版,才能在⽬标上进⾏构建,⽆论如何都将返回交叉编译。

灵活性- 功能齐全的 Linux Release版,由数百个软件包组成,但交叉编译环境可以从⼤多数⽅⾯依赖于主机的现有Release版。

交叉编译的重点是构建要部署的⽬标包,不是花时间获取在⽬标系统上运⾏的仅构建先决条件。

⽅便-⽤户界⾯不友好,debug构建中断不⽅便。

从 CD 安装到没有 CD-ROM 驱动器的机器上,在测试环境和开发环境之间来回重新启动。

如何下载交叉编译工具

如何下载交叉编译工具

如何下载交叉编译工具
1.5 安装VMware Tools
VMwareTools可以方便windows系统和linux系统之间拷贝文件,可以直接通过鼠标拖拽的方式将需要传递的文件从Windows系统拷贝到Linux系统。

点击之后会出现如下对话框
通过命令行进入上图文件所在的目录/media/te st/VMare Tools/
将VMwareTools压缩包拷贝到/home/test/目录下
解压压缩包,并进入解压后目录
执行安装脚本进行安装,安装完成后重启系统即可完成安装
1.6 下载交叉编译工具
1.6.1 下载Linux kernel编译工具
下载标注的安装包
安装petalinux需要的依赖
将安装包拷贝到/opt目录下,直接运行安装
配置环境变量,将交叉编译工具链导出,打开文件/etc/bash.bashrc在最后添加一行
执行source命令使配置生效或重启系统
执行如下命令,可以看到交叉编译工具命令已经生效
此编译工具用于编译Linux kernel
1.6.2 下载u-boot编译工具
下载标注的安装包
将安装包拷贝到/opt目录下,并解压
配置环境变量,将交叉编译工具链导出,打开文件/etc/bash.bashrc在最后添加一行
执行source命令使配置生效或重启系统
执行如下命令,可以看到交叉编译工具命令已经生效
此编译工具用于编译u-boot。

Linux系统的在线升级

Linux系统的在线升级

Linux系统的在线升级目前嵌入式Linux系统的升级,即升级uboot,kernel,rootfs等的传统的方式,都是用烧写工具去烧写,相对来说,显得很繁琐和效率比较低,而利用mtd工具的方式去升级系统,相对比较方便。

1.系统升级前的准备工作1.1linux中已实现了U盘挂载,以方便拷贝要升级的文件linux系统中已经有了USB驱动,并且已经实现了USB的自动挂载。

有了U盘挂载,每次升级系统文件,包括uboot、kernel、rootfs 等文件就可以放在U盘。

1.2linux中nor flash和nand flash己能正常工作要用mtd工具升级系统之前,肯定是对应的nand flash以及nor flash都是已经正常工作了,即除了系统正常运行外,通过:cat /proc/mtd ,可以看到对应的nor flash和nand flash所对应的分区信息了。

如下图所示。

图1-1 Nand flash 分区1.3 准备好mtd工具使用交叉工具链编译zlib-1.2.3和mtd,可以得到mtd工具flash_erase、flash_eraseall、nandwrite、nanddump,这四个工具的作用如下表:表1 MTD工具简介MTD工具名称功能Flash_erase 擦除flash(nand或nor)的某个部分Flash_eraseall 擦除flash的某个分区nandwrite 用于将某个文件/数据,写入到某个分区nanddump 用于查看当前某个mtd分区的数据2.利用MTD工具实现Linux系统的升级利用MTD工具升级系统,方法是:先用nand_eraseall擦除对应的mtd分区中的内容,再将对应的数据用nandwrite写入对应的mtd 中对应的位置中。

Nand flash的MTD分区情况可以查看文件arch/arm/plat-s3c24xx /common-smdk.c,代码如下:static struct mtd_partition smdk_default_nand_part[] = {[0] = {.name = "bootloader u-boot-2010.03",.size = SZ_1M,.offset = 0,},[1] = {.name = "kernel linux-2.6.35",.offset = SZ_1M,.size = SZ_4M,},[2] = { .name= "rootfs busybox-1.17.3",.offset = SZ_1M * 5, .size = SZ_1M * 40,}, [3] = { .name = "usrfs",.offset= SZ_1M * 45,.size = SZ_1M * 19,},};图2-1 Linux 系统中的Nand MTD 分区2.1 升级u-boot1. 擦除u-boot 所在分区的数据/tmp/usb/util/flash_eraseall /dev/mtd02. 写入升级的u-boot 数据u-bootKernel根文件系统(cramfs)用户文件系统(yaffs2)0 1000005000002d000004000000/dev/mtd0 /dev/mtd1 /dev/mtd2 /dev/mtd3/tmp/usb/util/nandwrite -p -s 0x4000 /dev/mtd0 /tmp/usb/u-boot.bin 其中,-p参数表示,如果要写入的数据不是页大小的整数倍,会自己加填充数据;0x4000是nand flash的一个块的大小。

虚拟机上安装Linux操作系统ubuntu9.10

虚拟机上安装Linux操作系统ubuntu9.10

1y第4章嵌入式Linux软件开发环境搭建1.1 体验嵌入式linux系统1. 获得光盘image目录提供的映像文件2. 使用h-jtag将u-boot.bin烧写进nor flash中3. 启动超级终端,设置bautrate为115200,8IN1。

重启开发板,将会进入u-boot的命令界面。

表明bootloader已正常运行Dennis Yang >4. 在PC机上安装usb驱动(安装文件位于光盘software\USB Download Driver.exe)5. 用usb线将PC机与开发板连接起来6. 在PC机上启动USB传输软件dnw(位于光盘software\dnw.exe)7. 在开发板上输入usbslave命令,让开发板进入等待接收数据状态Dennis Yang > usbslave 1 0x32000000USB host is connected. Waiting a download8. 在dnw软件界面,单击“USB Port”-->“Transmit/Restore”,找到image目录中的kernel 文件uImage(如果你使用的是天嵌tq2440,请选择uImage-embsky),进行传输。

这将导致uImage被传输到开发板内存的0x32000000处Dennis Yang > usbslave 1 0x32000000USB host is connected. Waiting a download.Now, Downloading [ADDRESS:32000000h,TOTAL:1518826]RECEIVED FILE SIZE: 1518826 (741KB/S, 2S)9. 在u-boot命令行输入命令,将nand flash的0x100000 -- 0x400000区间擦除(格式化)Dennis Yang > nand erase 0x100000 0x300000NAND erase: device 0 offset 0x100000, size 0x30000Erasing at 0x120000 -- 133% complete.OK10. 在u-boot命令行输入命令,将内存0x32000000处的kernel烧写到nand flash的0x100000-- 0x400000区间Dennis Yang > nand write.jffs2 0x32000000 0x100000 0x300000NAND write: device 0 offset 0x100000, size 0x300000Writing data at 0x3ff800 -- 100% complete.3145728 bytes written: OK11. 使用相同的方法将根文件系统(myfs-128M.jffs2,如果使用64M的nand flash,请选择myfs-64M.jffs2)烧写到nand flash的0x400000 -- 0x3c00000区间Dennis Yang > usbslave 1 0x30000000USB host is connected. Waiting a download.Now, Downloading [ADDRESS:30000000h,TOTAL:24594994]RECEIVED FILE SIZE:24594994 (667KB/S, 36S)Dennis Yang > nand erase 0x400000 0x3c00000NAND erase: device 0 offset 0x400000, size 0x3c00000Erasing at 0x3fe0000 -- 100% complete.OKDennis Yang > nand write.jffs2 0x30000000 0x400000 $(filesize)NAND write: device 0 offset 0x400000, size 0x1774a28Writing data at 0x1b74800 -- 100% complete.24594984 bytes written: OK12. 输入启动操作系统命令,将进入linux操作系统Dennis Yang > boot13. 使用触笔进行屏幕校正后,将进入qtopia图形系统如果由于屏幕校正不准确而不能正常使用触摸屏的话,请删除/etc/pointercal文件后,重启开发板,重新进行校正14. 在linux命令提示符下,播放歌曲# madplay /music/pianpianxihuanni.mp3MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al.Title: Track 1Artist: 陳百強Orchestra: 陳百強Album: Best MemoryTrack: 15Genre: Other1.2 Linux操作系统安装1.2.1在Window上安装虚拟机本书基于ubuntu9.10进行开发,它是一个容易安装和使用的Linux发行版,光盘映像文件可以自由从互联网上获得,在配套光盘中提供了该文件(software/ubuntu-9.10-desktop-i386.iso)。

天鹰科技 Tiny-linux 说明书 (Ver1.02)

天鹰科技 Tiny-linux 说明书 (Ver1.02)

Tiny-linux使用说明书(Ver1.02)天鹰科技期待与您的合作支持博客:支持QQ:645076297支持邮箱:********************团购价:400元零售价:450元首先非常感谢您使用Tiny-linux系统,您获得的不仅仅是一套开发板,而是一套高效的linux开发、调试、代码管理的方案,希望我们双方有更深层次的合作。

在使用我们的开发板之前,请阅读下面的注意事项。

●开发板的左下角是电源部分,由于开发板的功率比较大,该部分会有可能发烫,使用者请注意。

●使用者请认真阅读完说明书之后再对开发板进行操作,避免对开发板造成物理损害。

●开发板支持无线和有线网卡两种通信模式。

●开发板提供详细的技术支持,技术支持QQ:645076297,技术支持邮箱:********************开发板由两个部分组成,即核心板与扩展板,主要的功能芯片都在核心板上,核心板为6层板,这样可以有效地减少干扰。

开发板支持的资源如下:● CPU:AT91SAM9260 BGA VERSION B● SDRAM: ISSI IS42S16100G 2片,64M● NAND: NAND01GW3B2AN6● DATAFLASH:ATMEL AT45DB642D● EEPROM: ATMEL 24A512● RTC:EPSON RTC8025● 温度检测:TCN75开发板采用最新的linux2.6.24内核,在官方内核版本上添加相应的芯片驱动,为提高系统的启动速度,开发板一改往常的BOOTSTRAP+UBOOT+LINUX+FILESYS的格式,使用bootstrap直接启动linux内核,可以将linux的启动时间缩短到7秒左右,如果您需要额外的技术支持,可以联系我们,开发板软件资源包括:● Bootstrap,16位总线宽度● UBOOT 1.3.4● LINUX 2.6.24● BUSYBOX 1.13.2● FILE SYSTEM Tiny-System●有线网卡驱动●无线网卡驱动●MTD-Utils工具。

mtd_util

mtd_util

2, compile
zlib
压缩算法
CC=arm-linux-uclibc-gcc ./configure --prefix=/opt/buildroot_350/build_arm/staging_dir
make && sudo make install
安装zconf.h及libz.a(注意要求的是静态库,网上很多资料有错误,配置了生成动态库,导致后面的mtd_util编译不通过)
~ >: cat /proc/partitions
major minor #blocks name
31 0 128 mtdblock0
31 1 256 mtdblock1
31 2 128 mtdblock2
31 3 128 mtdblock3
31 4 5120 mtdblock4
31 5 5120 mtdblock5
31 6 20480 mtdblock6
31 7 1024 mtdblock7
mtd.erasesize = 131072 (128K)
mtd.writesize = 2048 (2K)
mtd.oobsize = 64
regions = 0
2, flash_erase
/tmp >: ./flash_erase --help
Usage: flash_erase [options] MTD_DEVICE <start block> <block count>
compr.o doc_loadbios flash_lock ftl_check mkfs.jffs2 nanddump nftl_format rfdformat

基于linux的MTD的NANDFLASH设备驱动底层实现原理分析(DOC)

基于linux的MTD的NANDFLASH设备驱动底层实现原理分析(DOC)

基于MTD的NANDFLASH设备驱动底层实现原理分析经过UBOOT初步的移植,Linux内核初步的移植,Linux内核总线设备模型的分析,等一系列痛苦的折腾,目的就是想更好的来分析下NANDFLASH的驱动。

大概一共历经了半个月的时间,慢慢的对NANDFLASH驱动程序有感觉了。

一、MTD体系结构:Linux内核提供MTD子系统来建立FLASH针对Linux的统一、抽象接口。

MTD将文件系统与底层的FLASH存储器进行隔离。

引入MTD后Linux系统中对FLASH的设备驱动分为4层设备节点:用户在/dev目录下使用mknod命令建立MTD字符设备节点(主设备号为90),或者MTD块设备节点(主设备号为31),使用该设备节点即可访问MTD 设备。

MTD设备层:基于MTD原始设备层,系统将MTD设备可以定义为MTD字符(在/mtd/mtdchar.c中实现,设备号90)和MTD块设备(在/mtd/mtdblock.c中实现,设备号31)。

MTD原始设备层:MTD原始设备层由两部分构成,一部分是MTD原始设备的通用代码,另一部分是各个特定Flash的数据,如分区。

主要构成的文件有:drivers/mtd/mtdcore.c支持mtd字符设备driver/mtd/mtdpart.c支持mtd块设备Flash硬件驱动层:Flash硬件驱动层负责对Flash硬件的读、写和擦除操作。

MTD设备的Nor Flash芯片驱动位于drivers/mtd/chips/子目录下,Nand Flash 芯片的驱动则位于drivers/mtd/nand/子目录下。

二、Linux内核中基于MTD的NANDFLASH驱动代码布局:在Linux2.6.35内核中,MTD源代码放在driver/mtd目录中,该目录中包含chips、devices、maps、nand、onenand、lpdrr、tests和ubi八个子目录。

其中只有nand和onenand目录中的代码才与NAND驱动相关,不过nand目录中的代码比较通用,而onenand目录中的代码相对于nand中的代码而言则简化了很多,它是针对三星公司开发的另一类Flash芯片,即OneNAND Flash。

经典=建立交叉编译工具链方法1(制作好的=成功实验)

经典=建立交叉编译工具链方法1(制作好的=成功实验)

制作好的交叉编译工具链下载及使用【转载】安装方法在文章后面最常用的编译版本是arm-linux-gcc-2.95.3、arm-linux-gcc-3.4.1和arm-linux-3.3.2的,现在的嵌入式开发基本上用的是这些,2.95.3用于编译2.4的内核,3.4.1的用于编译2.6的内核,而3.3.2的常用于编译busybox,和bootloader(u-boot),编译的版本配合不好的话就会出错,所以要选择好编译版本,如果这个版本不行的话,可以试试其他的版本,在uclinux上用的多的就是arm-elf-tools-20030314arm-linux-gcc-2.95.3 = 编译2.4的内核arm-linux-gcc-3.4.1 = 编译2.6的内核arm-linux-3.3.2 = 编译busybox和u-boot/download/projects/toolchain/arm-linux-g cc-3.4.1.tar.bz2/download/projects/toolchain/arm-linux-g cc-3.3.2.tar.bz2如果系统中又装了3.4.1和3.3.2的版本的话,可以在 .bashrc 中通过设置PATH来指定默认的版本为GCC3.4.1,然后再打开一个新的终端就可以用了,如果需要使用3.3.2的话,可以用具体的路径指定(/usr/local/arm/3.3.2/bin/arm-linux-)。

【同时安装两套】在~/.bashrc最后加入: export PATH=$PATH:/usr/local/arm/3.4.1/bin 如果编译u-boot或者busybox的时候指定3.3.2的版本:CROSS_COMPILE=/usr/local/arm/3.3.2/bin/arm-linux-3.4.1的就直接用arm-linux-就可以了。

arm-linux-gcc-4.2.1的版本在:9981/pub/snapgear/tools/arm-linux/这里可以下载,arm-linux-tools-20070808.tar.gz这个可能是4.2.1的版本,因为下面有编译4.2.1的方法还有相应的代码包,build-arm-linux-4.2.1,此版本由于过大,我没有下载。

mtd_debug:linux下直接读写flash扇区及交叉编译mtd_utils

mtd_debug:linux下直接读写flash扇区及交叉编译mtd_utils

mtd_debug:linux下直接读写flash扇区及交叉编译mtd_utilsmtd_debug是一个linux下直接读写flash扇区的工具,是mtd-utils的一个部件。

具体用法如下:./mtd_debug read <device><offset> <dest-filename> <len> ./mtd_debug write <device><offset> <source-filename> [len]./mtd_debug erase <device><offset> <len>具体使用举例:./mtd_debug erase/dev/mtd/1 0x0 0xc00000 :表示擦写了0x34300000 ~ 0x34f00000共12MB的空间。

以上命令格式中“device”是指/dev/mtd/0,1,2这种mtd char 设备,不要操作/dev/mtdblock/0,1,2这种块设备。

也就是说:mtd 是字符设备,mtdblock是块设备,它们映射的是同一个空间;但是我们在擦写的时候就是操作字符设备,这个请注意。

以上不管是write哪一块,都建议先erase,再write,否则可能导致write失败mtd_debug的获取或者说交叉编译mtd_utils1.获得源码root@:/home/# wget ftp:///pub/mtd-utils/mtd-utils-1.2.0.tar.bz2root@:/home/# wget /zlib-1.2.3.tar.gzroot@:/home/# wget /opensource/lzo/download/lzo-2.03.tar.gzroot@:/home/# tar xzvf zlib-1.2.3.tar.gzroot@:/home/# tar xzvf lzo-2.03.tar.gzroot@:/home/# tar xzvf mtd-utils-1.2.0.tar.bz2说明:zlib和lzo是编译mtd-utils所需库文件,需提前交叉编译完成,以供mtd-utils编译时调用2,编译安装zlib:root@:/home/# cd zlib-1.2.3root@:/home/zlib-1.2.3# CC=arm-linux-gcc ./configure --shared --prefix=/usr/local/openmoko/arm/arm-angstrom-linux-gnueabiroot@:/home/zlib-1.2.3# makeroot@:/home/zlib-1.2.3# make installroot@:/home/zlib-1.2.3# cd ../usr/local/openmoko/arm/arm-angstrom-linux-gnueabi 为交叉编译器路径3,编译安装lzo:root@:/home/# cd lzo-2.03/root@:/home/lzo-2.03# CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/usr/local/openmoko/arm/arm-angstrom-linux-gnueabiroot@:/home/lzo-2.03# makeroot@:/home/lzo-2.03# make installroot@:/home/lzo-2.03#4,编译mtd-utils1) 修改MakefileCROSS=arm-linux-2) make WITHOUT_XATTR=1在这里会提示没有定义AI_ADDRCONFIG,在文件头部加入定义#define AI_ADDRCONFIG 0x0020 就可以了到这里还是有错误提示。

nandwrite 编译

nandwrite 编译

nandwrite 编译nandwrite(也称为Mtd-utils)是一个用于擦写Linux嵌入式系统中的NAND闪存芯片的工具。

它允许用户在Linux上编写自定义软件来在NAND闪存设备上执行特定的写操作。

本文将介绍如何编译nandwrite 工具的详细步骤。

第一步:安装必要的软件包在编译nandwrite之前,我们需要安装一些必要的软件包和工具。

确保您的Linux系统已安装以下软件包:build-essential、gcc、make、git、libmtd-dev和libubi-dev。

这些软件包通常可以通过包管理系统(如apt、yum、zypper等)或从软件包的官方网站上下载。

例如,在Debian或Ubuntu系统上,您可以运行以下命令来安装这些软件包:sudo apt-get install build-essential gcc make git libmtd-devlibubi-dev第二步:下载nandwrite源代码nandwrite源代码托管在GitHub上。

您可以使用git命令来克隆nandwrite的存储库。

在终端中运行以下命令:git clone这将在当前目录下创建一个名为mtd-utils的文件夹,并将nandwrite源代码下载到该文件夹中。

第三步:进入nandwrite源代码目录在终端中,使用cd命令进入mtd-utils目录:cd mtd-utils第四步:配置编译选项在当前源代码目录中,运行configure脚本以配置编译选项:./configureconfigure脚本将检查系统环境和依赖项,并生成适合您的系统的Makefile。

第五步:编译nandwrite运行make命令来编译nandwrite:make这将编译nandwrite源代码并生成可执行文件。

第六步:安装nandwrite最后一步是将编译后的nandwrite工具安装到系统中。

运行以下命令:sudo make install这将安装nandwrite到默认的系统路径(通常是/usr/local/bin)。

交叉编译mtd-utils工具(linux下flash工具)

交叉编译mtd-utils工具(linux下flash工具)

一、下载源码包并解压wget ftp:///pub/mtd‐utils/mtd‐utils‐1.5.1.tar.bz2wget /zlib‐1.2.8.tar.gzwget /opensource/lzo/download/lzo‐2.03.tar.gzwget https:///pub/linux/utils/util‐linux/v2.21/util‐linux‐2.21.1.tar.gztar zxvf zlib‐1.2.8.tar.gztar zxvf lzo‐2.03.tar.gztar jxvf mtd‐utils‐1.5.1.tar.bz2tar zxvf util‐linux‐2.21.1.tar.gz二、编译安装zlib1)cd zlib‐1.2.8CC=arm‐none‐linux‐gnueabi‐gcc ./configure ‐‐prefix= /usr/local/arm‐2007q1/arm‐none‐linux‐gnueabi ‐‐shared(注意:这里的/usr/local/arm‐2007q1/arm‐none‐linux‐gnueabi是交叉编译工具默认目录。

)2)makemake installcd ..3)安装完成后会在/usr/local/arm‐2007q1/arm‐none‐linux‐gnueabi /目录下生成三个目录:include、lib、share。

安装完后检查一下目录/usr/local/arm‐2007q1/zlib/假如 include 中没有 zlib.h 之类的头文件,lib 中没有 libz.so.1.2.3 ,那就自己手动拷到这些目录下去,记着拷的时候把所有的 *.h 都需要拷过去,在拷库的时候用 cp ‐Ca libz.* /…./lib 就行,要用上 ‐Ca 选项。

三、编译安装lzo1)cd lzo‐2.03/CC=arm‐none‐linux‐gnueabi‐gcc ./configure ‐‐host=arm‐none‐linux‐gnueabi ‐‐prefix=/usr/local/arm‐2007q1/arm‐none‐linux‐gnueabi2)makemake installcd ..3)同上四、编译安装uuid1)cd util‐linux‐2.21.1/./configure ‐‐prefix=/usr/local/arm‐2007q1/arm‐none‐linux‐gnueabi ‐‐host=arm‐none‐linux‐gnueabi ‐‐disable‐mount ‐‐disable‐makeinstall‐setuid ‐‐disable‐makeinstall‐chown ‐‐disable‐use‐tty‐group ‐‐disable‐chsh‐only‐listed ‐‐disable‐schedutils ‐‐disable‐wall ‐‐disable‐kill ‐‐disable‐pivot_root ‐‐disable‐switch_root ‐‐disable‐cramfs ‐‐disable‐agetty ‐‐disable‐unshare ‐‐disable‐fallocate ‐‐disable‐mountpoint ‐‐disable‐uuidd ‐‐disable‐partx ‐‐disable‐fsck ‐‐disable‐losetup ‐‐disable‐mount ‐‐disable‐libmount ‐‐disable‐tls ‐‐without‐ncurses2)makemake installcd ..3)同上五、交叉编译mtd‐utils1)cd mtd‐utils‐1.5.1/2)make CROSS=arm‐none‐linux‐gnueabi‐ WITHOUT_XATTR=1查看下mtd‐utils‐1.0.0目录下是否生成了咱们所需要大工具(flashcp,nandwrite......等)。

Linux系统中devmtd与devmtdblock的区别

Linux系统中devmtd与devmtdblock的区别

Linux系统中devmtd与devmtdblock的区别MTD(memory technology device内存技术设备)是⽤于访问memory设备(ROM、flash)的Linux的⼦系统。

MTD的主要⽬的是为了使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了⼀个抽象的接⼝。

MTD的所有源代码在/drivers/mtd⼦⽬录下。

我将CFI接⼝的MTD设备分为四层(从设备节点直到底层硬件驱动),这四层从上到下依次是:设备节点、MTD设备层、MTD原始设备层和硬件驱动层。

MTD字符驱动程序允许直接访问flash器件,通常⽤来在flash上创建⽂件系统,也可以⽤来直接访问不频繁修改的数据。

MTD块设备驱动程序可以让flash器件伪装成块设备,实际上它通过把整块的erase block放到ram⾥⾯进⾏访问,然后再更新到flash,⽤户可以在这个块设备上创建通常的⽂件系统。

1. /dev/mtdN 是Linux 中的MTD架构中,系统⾃⼰实现的mtd分区所对应的字符设备(将mtd设备分成多个区,每个区就为⼀个字符设备),其⾥⾯添加了⼀些ioctl,⽀持很多命令,如MEMGETINFO,MEMERASE等。

⽽mtd-util中的flash_eraseall等⼯具,就是以这些ioctl为基础⽽实现的⼯具,实现⼀些关于Flash的操作。

⽐如,mtd ⼯具中的 flash_eraseall 中的:if (ioctl(fd, MEMGETINFO, &meminfo) != 0) {fprintf(stderr, "%s: %s: unable to get MTD device info\n", exe_name, mtd_device);return 1;}其中,MEMGETINFO,就是Linux MTD中的drivers/mtd/mtdchar.c中的:static int mtd_ioctl(struct inode *inode, struct file *file,u_int cmd, u_long arg){。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、下载源码包并解压wget ftp:///pub/mtd‐utils/mtd‐utils‐1.5.1.tar.bz2wget /zlib‐1.2.8.tar.gzwget /opensource/lzo/download/lzo‐2.03.tar.gzwget https:///pub/linux/utils/util‐linux/v2.21/util‐linux‐2.21.1.tar.gztar zxvf zlib‐1.2.8.tar.gztar zxvf lzo‐2.03.tar.gztar jxvf mtd‐utils‐1.5.1.tar.bz2tar zxvf util‐linux‐2.21.1.tar.gz二、编译安装zlib1)cd zlib‐1.2.8CC=arm‐none‐linux‐gnueabi‐gcc ./configure ‐‐prefix= /usr/local/arm‐2007q1/arm‐none‐linux‐gnueabi ‐‐shared(注意:这里的/usr/local/arm‐2007q1/arm‐none‐linux‐gnueabi是交叉编译工具默认目录。

)2)makemake installcd ..3)安装完成后会在/usr/local/arm‐2007q1/arm‐none‐linux‐gnueabi /目录下生成三个目录:include、lib、share。

安装完后检查一下目录/usr/local/arm‐2007q1/zlib/假如 include 中没有 zlib.h 之类的头文件,lib 中没有 libz.so.1.2.3 ,那就自己手动拷到这些目录下去,记着拷的时候把所有的 *.h 都需要拷过去,在拷库的时候用 cp ‐Ca libz.* /…./lib 就行,要用上 ‐Ca 选项。

三、编译安装lzo1)cd lzo‐2.03/CC=arm‐none‐linux‐gnueabi‐gcc ./configure ‐‐host=arm‐none‐linux‐gnueabi ‐‐prefix=/usr/local/arm‐2007q1/arm‐none‐linux‐gnueabi2)makemake installcd ..3)同上四、编译安装uuid1)cd util‐linux‐2.21.1/./configure ‐‐prefix=/usr/local/arm‐2007q1/arm‐none‐linux‐gnueabi ‐‐host=arm‐none‐linux‐gnueabi ‐‐disable‐mount ‐‐disable‐makeinstall‐setuid ‐‐disable‐makeinstall‐chown ‐‐disable‐use‐tty‐group ‐‐disable‐chsh‐only‐listed ‐‐disable‐schedutils ‐‐disable‐wall ‐‐disable‐kill ‐‐disable‐pivot_root ‐‐disable‐switch_root ‐‐disable‐cramfs ‐‐disable‐agetty ‐‐disable‐unshare ‐‐disable‐fallocate ‐‐disable‐mountpoint ‐‐disable‐uuidd ‐‐disable‐partx ‐‐disable‐fsck ‐‐disable‐losetup ‐‐disable‐mount ‐‐disable‐libmount ‐‐disable‐tls ‐‐without‐ncurses2)makemake installcd ..3)同上五、交叉编译mtd‐utils1)cd mtd‐utils‐1.5.1/2)make CROSS=arm‐none‐linux‐gnueabi‐ WITHOUT_XATTR=1查看下mtd‐utils‐1.0.0目录下是否生成了咱们所需要大工具(flashcp,nandwrite......等)。

有工具生成了,OK,交叉编译成功。

4)将生成大工具拷贝到文件系统开发板的根文件系统,放在/bin 或/sbin 都行。

再编译内核就OK拉。

五、补充如果交叉编译器为 4.3.x以上 ,编译不通过,请参考http://www.mail‐/ptxdist@pengutronix.de/msg01067.html/patch/12689/打补丁六、mtd‐utils工具命令的使用1)使用命令前用cat /proc/mtd 查看一下mtdchar字符设备;或者用ls ‐l /dev/mtd*#cat /proc/mtddev: size erasesize namemtd0: 00c00000 00020000 "ROOTFS"mtd1: 00200000 00020000 "BOOTLOADER"mtd2: 00200000 00020000 "KERNEL"mtd3: 03200000 00020000 "NAND ROOTFS partition"mtd4: 04b00000 00020000 "NAND DATAFS partition"为了更详细了解分区信息用mtd_debug命令#mtd_debug info /dev/mtdX (不能使用mtdblockX, mtdblockX 只是提供用來 mount 而已) mtd.type = MTD_NORFLASHmtd.flags =mtd.size = 12582912 (12M)mtd.erasesize = 131072 (128K)mtd.oobblock = 1mtd.oobsize = 0mtd.ecctype = (unknown ECC type ‐ new MTD API maybe?)regions = 02)命令:flash_erase作用:擦出指定范围内flash的内容,如果不指定,默认擦出起始位置的第一块,使相应flash 变为全1用法:flash_erase MTD‐device [start] [cnt (# erase blocks)] [lock]MTD-device:待擦出的分区,如/dev/mtd0start:起始位置设置,这里必须设置为0x20000(128K)的整数倍cnt: 从start开始计算,要擦出的块数lock: 写保护eg: ./flash_erase /dev/mtd0 0x40000 5 //擦出mtd0分区上从0x40000开始的5块数据 ,128K/块命令:flash_eraseall作用:擦出整个分区的数据,同时也会作坏块检测用法:flash_eraseall [OPTION] MTD_DEVICE‐q, ‐‐quiet 不显示打印信息‐j, ‐‐jffs2 一jffs2 格式化分区eg: ./flash_eraseall ‐j /dev/mtd0命令:flashcp作用:copy数据到 flash 中用法:usage: flashcp [ ‐v | ‐‐verbose ] <filename> <device>flashcp ‐h | ‐‐helpfilename:待写入的数据device: 写入的分区,如/dev/mtd0eg:filename制作:mkfs.jffs2 ‐e 0x20000 ‐d cq8401 ‐o cq8401.img ‐n //这里的‐e 0x20000 必须更你芯片的erasesize 相等./flashcp cq8401.img /dev/mtd0 // copy cq8401.img文件系统到 /dev/mtd0分区中当然这个命令的功能跟 dd if=/tmp/fs.img of=/dev/mtd0差不多命令:nandwrite作用:向nand flash中写数据用法:nandwrite [OPTION] MTD_DEVICE INPUTFILE‐a, ‐‐autoplace Use auto oob layout‐j, ‐‐jffs2 force jffs2 oob layout (legacy support)‐y, ‐‐yaffs force yaffs oob layout (legacy support)‐f, ‐‐forcelegacy force legacy support on autoplacement enabled mtd device‐n, ‐‐noecc write without ecc‐o, ‐‐oob image contains oob data‐s addr, ‐‐start=addr set start address (default is 0)‐p, ‐‐pad pad to page size‐b, ‐‐blockalign=1|2|4 set multiple of eraseblocks to align to‐q, ‐‐quiet don't display progress messages‐‐help display this help and exit‐‐version output version information and exiteg: ./nandwrite ‐p /dev/mtd0 /tmp/rootfs.jffs2命令:nanddump作用:dump出nand flash一些信息,如:block size,erasesize,oobblock 大小,oob data ,page data 等;同时也会作坏块检测用法:nanddump [OPTIONS] MTD‐device‐‐help display this help and exit‐‐version output version information and exit‐f file ‐‐file=file dump to file‐i ‐‐ignoreerrors ignore errors‐l length ‐‐length=length length‐o ‐‐omitoob omit oob data‐b ‐‐omitbad omit bad blocks from the dump‐p ‐‐prettyprint print nice (hexdump)‐s addr ‐‐startaddress=addr start addresseg:./nanddump ‐p ‐f nandinfo.txt /dev/mtd0 //dump出nand flash /dev/mtd0数据并保存到 nandinfo.txt命令:mtd_debug作用: 对mtd 调试作用用法:usage: mtd_debug info <device>mtd_debug read <device> <offset> <len> <dest‐filename>mtd_debug write <device> <offset> <len> <source‐filename>mtd_debug erase <device> <offset> <len>eg:#./mtd_debug info /dev/mtd0 // 输出/dev/mtd0上的一些信息,这里必须用mtdx#./mtd_debug erase /dev/mtd0 0x0 0x40000 // 擦出/dev/mtd0 分区上 从0x0开始的 , 128K*2 大小的数据#./mtd_debug write /dev/mtdblock0 ox0 0x360810 cq8401.img //向mtdblock0分区,写入 3.6M 大小的文件系统cq8401.img,这里最好用mtdblockx#./mtd_debug read /dev/mtdblock0 ox0 0x360810 read.img //从mtdblock0中读出 3.6M 数据保存到read.img# cmp ‐l cq8401.img read.img // 验证write to flash 和 read from flash 中的数据是否一致;也可以使用diff命令来比较另外针对nand flash,mtd_debug这个工具来测试mtd驱动也不是很好,用nandwrite和nanddump这两个工具或许更好点。

相关文档
最新文档