一、移植环境
§主机:vmware-redhat5
§开发板:mini2440--256MB nandflash
§kernel:2.6.29
编译器:arm-linux-gcc-4.3.2.tgz
§uboot: u-boot-2008.10
二、制作ubifs镜像
步骤1:将文件系统制作成 ubifs镜像文件,需要使用mkfs.ubifs工具,该工具可以在网址:http://git.infradead.org/mtd-utils.git,下载mtd-utils工具包源码编译后获得。
在安装mtd-utils之前首先在系统中安装如下两个软件:
(因为原先我看一些博文给的地址都不可访问,只好按名称东下一个西下一个,编译后都出错没法解决,特此提醒,后来暮然回首,在我的以前做过的文件系统中找到了以下三个经编译后可成功生成ubifs命令工具,(现放我资源里,提供给大家)请放心下载)
a.安装libacl,(我资源里)下载地址:http://download.csdn.net/detail/yx_l128125/4243336
输入命令:rpm -ivh libacl-2.2.23-5.4.e14.i386.rpm
b.安装lzo-2.05, (我资源里)下载地址:http://download.csdn.net/detail/yx_l128125/4243343
执行如下命令:
# tar zxvf lzo-2.05.tar.gz
# cd lzo-2.05
# ./configure
# make
# make install
c.安装 mtd-utils.tar.gz (我资源里)下载地址:http://download.csdn.net/detail/yx_l128125/4243333
# tar zxvf mtd-utils.tar.gz
# cd mtd-utils
# ./configur
# make
# make install
步骤2.使用上述安装命令后,mkfs.ubifs被安装到了/usr/local/usr/sbin目录下,可使用命令:export PATH=$PATH:/usr/local/usr/sbin将该路径包含进环境变量,
然后使用命令:mkfs.ubifs -m 2048 -c2048 -e 126976 -r /nfsroot/rootfs -o rootfs.bin ,将根文件系统所在目录rootfs制作为ubifs镜像文件rootfs.bin,将该文件拷贝到/tftpboot/目录下等待下载烧写。(注意,你在哪执行这个命令,生成的.bin镜像就在执行此命令的当前目录下生成)
【注意点:1.上面制作的ubifs镜像文件使用的命令参数是根据开发板所使用的NAND
Flash来确定的,我的NAND Flash容量是256MB,可以适应命令:mkfs.ubifs
-h 来查看各个命令选项的意思,我这里只简单的介绍一下:
-r :要制作成镜像的根文件系统的路径
-m:最小的I/O操作的大小(也就是NAND
FLASH的一个page的大小)
-e : 逻辑擦除块的大小
-p :物理擦除块的大小
-c :最大逻辑擦除块的数量
-o :最终制作成的根文件镜像的文件名
注意点:2.我原来用mkfs.ubifs -m 2048 -c2048 -e 126976
-r /nfsroot/rootfs -o rootfs.bin 制作成的镜像,启动内核时有错,我曾经的出错现象:http://www.arm9home.net/read.php?tid-19717.html但是发现启动内核时打印此出错信息:
UBI error: validate_ec_hdr: bad VID header offset 512, expected 2048
UBI error: validate_ec_hdr: bad EC header
UBI error: ubi_io_read_ec_hdr: validation failed for PEB 556
UBI error: ubi_init: cannot attach mtd3
UBI error: ubi_init: UBI error: cannot initialize UBI, error -22
后来找到了相近的解决方案:http://blog.chinaunix.net/space.php?uid=20632682&do=blog&id=82414按照这篇帖子最终内核成功的启动了
我现在还不太懂为什么“-e 126976”而不是大多数制作ubifs文件系统写的 “-e 129024”如果大家知道请通知我,不胜感激!】
步骤3.通过Jlink或者H-JTAG将u-boot.bin先烧进norflash,之后连接好串口线和网线,从norflash启动开发板。
步骤4.设定好网络相关的环境变量,重点是先设置好ipaddr和serverip(因为下面用到tftp协议下载)之后用sav命令保存环境变量;
之后用命令:tftp 31000000 u-boot.bin
下载uboot.bin到内存地址31000000处。
步骤5:使用命令:nand erase 0 60000,将nand flash的前0x60000字节空间擦除掉。在使用命令:nand write 31000000
0 60000,将内存31000000处的u-boot.bin烧写到nand flash中。
步骤6:使用命令:tftp 31000000 uImage使用命令: nand erase 80000 300000,将nand flash的kernel分区擦除掉,在使用命令:nand
write 31000000 80000 300000 ,将内存31000000处的uImage烧写到nand flash中。
步骤7:使用命令:mtdparts default使用默认分区对Nand Flash进行分区。使用命令:nand erase root ,擦除root分区。使用命令:ubi
part root 2048,激活root分区进行ubi格式化。最后使用命令:ubi create rootfs ,创建rootfs分区。
【注意点:原来我用命令: ubi part root来激活root分区进行ubi格式化,但是启动内核时出现报错信息(看红字部分),所以按这篇博文http://blog.chinaunix.net/space.php?uid=20632682&do=blog&id=82414改成:ubi
part root 2048 之后就没有报错了
UBI error: validate_ec_hdr: bad VID header offset 512, expected 2048
UBI error: validate_ec_hdr: bad EC header
UBI error: ubi_io_read_ec_hdr: validation failed for PEB 556
UBI error: ubi_init: cannot attach mtd3
UBI error: ubi_init: UBI error: cannot initialize UBI, error -22
】
步骤8:使用命令:tftp 31000000 rootfs.bin下载rootfs到默认内存地址31000000处,使用命令:ubi write
31000000 rootfs $filesize,将内存31000000处大小为$filesize的rootfs.bin通过ubi方式烧写到nand
flash的对应分区中。
步骤9:
设置启动变量: bootargs ,(bootargs是uboot传给内核的参数,使用命令:set bootargs "ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs console=ttySAC0 init=/linuxrc rw "
设置启动命令:bootcmd,(bootcmd
是uboot启动的命令,输入命令:set bootcmd " nand read 31000000 80000$filesize; bootm 31000000"最后使用sav命令保存环境变量)
步骤10:关掉电源,让开发板重新从nand flash启动,可以看到内核成功加载了我们只做的ubifs文件系统,如图:
[注意点1:set bootcmd
" nand read 31000000 80000$filesize; bootm 31000000" 中的"31000000"是启动内核的地址,内核启动时自动找到31000000这个地方来启动kernel;而前面用过的tftp
31000000 xxx中的"31000000"是内存中的地址(存放在内存地址中的数据掉电后就没了)
注意点2:如果 bootm后面不跟地址,默认是到30008000处寻在内核启动的;如果bootcmd环境变量写成:set
bootcmd " nand read 31000000 80000$filesize; bootm最终这种现象:如图(因为它到30008000没有找到内核,内核原来由80000的内存地址读到了31000000地址处)
分享到:
相关推荐
ubifs文件系统的制作详解 错误讲解 分析 ubi在uboot 内核文件中的支持
UBIFS文件系统简析,从MTD层、UBI层、UBIFS层及与VFS层接口等方面详细介绍了UBIFS文件系统的实现原理和核心源码,原创文章近300页,供大家交流探讨
项目需要制作ubifs的文件系统,找了一些资料,发现就这篇文章讲的还算明白,不敢独享
中文版。 UBIFS, Unsorted Block Image File System,...它是用于固态硬盘存储设备上,并与LogFS相互竞争,作为JFFS2的后继文件系统之一。真正开始开发于2007年,并于2008年10月第一次加入稳定版本于Linux核心2.6.27版。
Ubifs文件系统的制作和启动,关于Davinci系列相机支持
对嵌入式Linux操作系统中的UBIFS文件系统备份方法.docx
自己试验过的ubi文件系统制作过程,能够稳定运行
想了解一下UBIFS,看了CSDN的一个名为“UBIFS文件系统详解“的资源,竟要50积分,而内容不过是一篇名为A Brief Introduction to the Design of UBIFS的英文文章,而该文章只需要用google搜索一下就可以免费下载,...
⚫ UBI (Unsorted Block Images/无序块镜像) ➢ Runs on top of MTD(MTD(Memory Technology Device)是flash在Linux系统的一种 软件架构); ➢ A sub system that provides consecutive logical eraseblocks (逻辑...
挂载 ubi 镜像及反向制作.doc 挂载 ubi 镜像及反向制作.doc 挂载 ubi 镜像及反向制作.doc
Linux下的flash文件系统的性能比较,jffs2,yaffs2,ubifs
mkubifsimage 制作UBIFS文件系统镜像的工具(针对256MB到1GB的SLC的Nand Flash) mkyaffs2image_for_TQ3358 制作专门针对TQ3358的Linux和Android使用的yaffs镜像 mkubifsimage 用法 mkubifsimage -r 文件系统目录...
ubifs是imx283文件系统移植所需要的配置文件,请有需要的朋友自行下载,没有积分的朋友请联系博主。
UBIFS,filesystem,rootfs,google搜集
介绍UBIFS构成、原理等……相当详细,想研究flash文件系统最好看下!因为很多思想在所有flash文件系统都差不多!
本文档适合嵌入式初学者练习制作linux系统上的最小根文件系统。 rootfs的制作 1 1) 创建dev/ sys/ etc/ root/ home/ proc/ tmp/等文件夹 2 2) 创建设备文件 2 3) 设置init启动配置信息。 3 1) 配置profile文件...
1. 支持spinand分区布局设置 ...4. 支持自动(与第4点互斥)生成“多mtd单卷”的ubifs镜像,每个ubifs镜像均可直接使用nand write写入nand flash 5. 由于定制修改过,对应的uboot的分区解析部分代码需要修改才行。
YAFFS等皆无法再去控制Nand Flash的空间,于是在2006年由IBM与Nokia的工程师设计开发了UBI(Unsorted Block Image)及其UBIFS文件系统,专门为了解决MTD(Memory Technology Device)设备所遇到的瓶颈。...
ubifs 的相关工具制作和使用,已经验证完全能够在atmel91sam9g45平台运行起来。
制作ubifs文件系统 7 android编译系统makefile(Android.mk)写法 10 Android系统移植(一)-让android系统在目标平台上运行起来 18 Android系统移植(二)-按键移植 20 Android系统移植(三)-按键字符表 25 android启动...