制作ubifs文件系统
来源:互联网 发布:pr淘宝视频 编辑:程序博客网 时间:2024/05/22 01:32
本文所有内容均来源于网上,如有侵权请告知,马上删除。
Ubifs 文件系统的制作和启动
UBI 文件系统是 JFFS2 的下一代文件系统,更适合 NAND FLASH。看到一些用户在应用 UBIFS 时遇到些问题,现在做个简要介绍。
1. 在 U-boot 和 kernel 中使能对 UBIFS 的支持
1.1 U-boot 的\include\configs\am335x_evm.h 中加入如下宏的定义:
#define CONFIG_CMD_NAND
#define CONFIG_CMD_UBI
#define CONFIG_CMD_UBIFS
#define CONFIG_RBTREE
#define CONFIG_MTD_DEVICE
#define CONFIG_MTD_PARTITIONS
#define CONFIG_CMD_MTDPARTS
#define CONFIG_LZO
1.2 Kernel 中的 menuconfig:
Enabling UBI support on MTD devices.
Device Drivers --->
Memory Technology Device (MTD) support --->
Enable UBI - Unsorted block images --->
Enabling UBIFS file-system support.
File systems --->
Miscellaneous filesystems --->
UBIFS file system support
2. 下载和编译 MTD Utilites
2.1 下载 MTD Utilites:
通过 git://git.infradead.org/mtd-utils.git 下载最新的 MTD-Utils 源代码。
下载 3 个编译所需的依赖库
Zlib: http://zlib.net/
Lzo:http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gze2fsprogs:
e2fsprogs :https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v1.42.12/
在制作 ubifs 文件系统的过程中需要如下:
为方便操作,把下面将要安装的数据包的解压文件到存放在:/home/user/mtd
再mkdir install,下面将要运行的数据包生成的文件将会存放在:/home/user/mtd/install
1),正确安装数据包:
zlib-1.2.5;lzo-2.06;e2fsprogs-1.42,mtd-utils-1.5.0
这些数据包的版本最好如上所述,否则可能会导致无法生成所需的文件或生成的文件不正确
这是制作 ubifs 过程中将要用到的所有的软件包的连接:ubifs
1,zlib
host$ tar xvf zlib-1.2.5.tar.gz
host$ cd zlib-1.2.5/
host$ ./configure --prefix=/home/user/mtd/install
打开其根目录下的 Makefile,替换 gcc, ldshared, cpp, ar , ranlib 为如下:
host$ gedit Makefile
CC=arm-arago-linux-gnueabi-gcc
LDSHARED=arm-arago-linux-gnueabi-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
CPP=arm-arago-linux-gnueabi-gcc -E
AR=arm-arago-linux-gnueabi-ar rc
RANLIB=arm-arago-linux-gnueabi-ranlib
保存,退出
host$ make
host$ make install
host$ cd ..
生成的 zlib.a 存放在 /home/user/mtd/install/lib 中;
生成的 zlib 的头文件存放在 /home/user/mtd/install/include中。
zlib安装完成!
2,lzo
host$ tar xvf lzo-2.06.tar.gz
host$ cd lzo-2.06/
host$ ./configure --build=i686-pc-linux --prefix=/home/user/mtd/install --host=arm-arago-linux-gnueabi
host$ make
host$ make install
host$ cd ..
生成的 liblzo2.a 存放在 /home/user/mtd/install/lib 中;
生成的 lzo 的头文件 存放在 /home/user/mtd/install/include/lzo中
lzo安装完成!
3,e2fsprogs
host$ tar xvf e2fsprogs-1.42.tar.gz
host$ cd e2fsprogs-1.42/
host$ ./configure --build=i686-pc-linux --prefix=/home/user/mtd/install --host=arm-arago-linux-gnueabi
host$ make
host$ make install
host$ cd lib/uuid/
host$ make install
host$ cd ../../../
生成的 libuuid.a 存放在 /home/user/mtd/install/lib 中;
生成的 uuid 的头文件 存放在 /home/user/mtd/install/include/uuid 中。
e2fsprogs安装完成!
4,mtd-utils
host$ tar xvf mtd-utils-1.5.0.tar.gz
host$ cd mtd-utils-1.5.0/
打开其根目录下的Makefile,加入如下语句
host$ gedit Makefile
PREFIX = /home/user/mtd/install
ZLIBCPPFLAGS = -I$(PREFIX)/include
LZOCPPFLAGS = -I$(PREFIX)/include
ZLIBLDFLAGS = -L$(PREFIX)/lib
LZOLDFLAGS = -L$(PREFIX)/lib
LDFLAGS += $(ZLIBLDFLAGS) $(LZOLDFLAGS)
CFLAGS ?= -O2 -g $(ZLIBCPPFLAGS) $(LZOCPPFLAGS)
CROSS=arm-arago-linux-gnueabi-
保存,关闭,再打开 common.mk 文件,注释 PREFIX=/usr 语句:
host$ gedit common.mk
# PREFIX=/usr
保存,关闭。
host$ make WITHOUT_XATTR=1
host$ make install DESTDIR=/home/user/mtd/install
host$ cd ..
交叉环境编译的MTD通用工具就存放在 /home/user/mtd/install/sbin/中。
如mkfs.ubifs,ubinize 的工具(可执行文件)
至此,安装数据包应该算是完成了。可先跳转到 2),生成镜像文件,
5,安装 mtd-utils 的疑难杂症及其解决方法
如果在使用生成的 mkfs.ubifs 和 ubinize 可执行文件的过程中发生了如下错误,再回过头来看这部分的内容
如:1,mkfs.ubifs 和 ubinize 这两个文件无法执行;
2,mkfs.ubifs 无法使用 命令参数 -F;
发生这些问题的原因是 mtd-ubifs 数据包没有安装正确,安装的 mtd-ubifs 版本过低。
解决方法:下载数据包 :mtd-utils_1.5.0-1_i386.deb
host$sudo dpkg -i mtd-utils_1.5.0-1_i386.deb
3,acl 库版本过低,如 需要libacl1 的版本要大于 2.2.51,可当前的为:libacl1_2.2.49。
解决方法:下载数据包:libacl1_2.2.51-8_i386.deb
host$sudo dpkg -i libacl1_2.2.51-8_i386.deb
4,attr 库版本过低,如 需要libattr1 的版本要大于 2.4.46,可当前的为:libacl1_2.1.11。
解决方法:下载数据包:libattr1_2.4.46-8_i386.deb
host$sudo dpkg -i libattr1_2.4.46-8_i386.deb
5,uuid 库版本过低,如 需要libacl1 的版本要大于 2.19.1,可当前的为:libacl1_2.12.1。
解决方法:下载数据包:uuid-dev_2.19.1-2ubuntu3_i386.deb
host$sudo dpkg -i uuid-dev_2.19.1-2ubuntu3_i386.deb
对 dpkg命令有兴趣的请看:ubuntu下用命令行运行deb安装包
执行完更新库版本的命令后,重新操作:1),正确安装数据包:-> 4,mtd-utils。
PS:Ubifs 的制作需要以下两个命令
mkfs.ubifs: 制作 UBIFS image
ubinize: 根据 UBIFS image 制作 ubi.img,这个 ubi.img 是通过 u-boot 直接烧写在 nand flash 分区上的。
2),生成镜像文件
1,在使用 mkfs.ubifs 生成 ubifs.img 前,需要如下:
1,把可执行文件 mkfs.ubifs , ubinize 这两个文件放在某个目录下。
并在在目录下: host$mkdir filesystem
2,把用于生产 ubifs.img 映像文件的 sbin,etc 等文件夹等复制到 filesystem 目录下
如:本人将要用到的是:ti-sdk-am335x-evm/filesystem/base-rootfs-am335x-evm.tar.gz。
把以下文件或文件夹放于 filesystem目录下:bin/,boot/,dev/,etc/,home/,lib/,
media/,mnt /,proc/,sbin/,srv/,sys/,tmp/,usr/,var/, linuxrc。
其中 linuxrc是一个可执行文件,其余的都是文件夹
!!!注意:linuxrc 这个可执行文件是用以引导内核加载文件系统的。
这个文件名在uboot设置环境变量中使用到。
U-Boot#setenv bootargs 'console=ttyO0,115200n8 noinitrd ip=off mem=256M rootwait=1 rw ubi.mtd=7,2048 rootfstype=ubifs root=ubi0:rootfs init=/linuxrc'
如果 init=*** 设置不正确的话,将会导致下面的错误:
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
3,执行以下命令生成 ubifs.img 映像文件
开发板类型为am335x的需要添加 -F 命令参数,否则在加载 ubi.img 时内核可能会崩溃。
host$mkfs.ubifs -r filesystem/ -F -o ubifs.img -m 2048 -e 126976 -c 1580
参数简介:
-F:使能"white-space-fixup",如果是通过 u-boot 烧写需要使能此功能。
-r:待制作的文件系统目录
-m: NAND FLASH 的最小读写单元,一般为 page size
-e: LEB size,对于 AM335x 的 NAND driver,为 block size-2x(page size)
-c:文件系统所占用的最大 block 数,一般小于等于 block count -1
-o:输出的 ubifs.img 文件
4,生成ubi.img 映像文件。
1,创建以下文件:
host$ gedit ubinize.cfg
在该文件写入如下内容:
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_size=192MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
2,执行如下命令,生成 ubi.img 映像文件
host$ ubinize -o ubi.img -m 2048 -p 128KiB -s 512 -O 2048 ubinize.cfg
参数简介:
-p: block size。
-m: NAND FLASH 的最小读写单元,一般为 page size
-o:输出的 ubi.img 文件
当使用这些命令的过程中,如果遇到了问题请转到:1),正确安装数据包:-> 5,安装 mtd-utils 的疑难杂症及其解决方法。
至此,生成的 ubi.img 映像文件应该是正确的。
5.UBIFS文件系统镜像的烧写
以下主要说以下将UBIFS镜像烧写到NAND FLASH中的三种方法。
5.1 在u-boot下通过nand write命令烧写
使用ubinize命令制作的带有卷标的UBIFS文件系统镜像可以直接使用nand flash的烧 写命令烧写到NAND FLASH上,具体命令为:
tftp 0xc1180000 ubi.img
nand erase 0x400000 0x7c00000
nand write.e 0xc1180000 0x400000 0x3660000
关于tftp,nand 等命令使用格式请参见u-boot的help。
5.2 在u-boot下通过ubi write命令烧写
使用mkfs.ubifs命令制作的UBIFS文件系统镜像可以使用命令ubi write烧写到NAND FLASH上,具体命令为:
1. 设置FLASH的分区,此处以128M NAND FLASH为例,分为5个区:
setenv mtdids nand0=nand0
setenv mtdparts mtdparts=nand0:0x20000(u-boot env),0x20000(UBL),0x1c0000(u-boot),0x200000(kernel),0x7c00000(filesystem)
设置完后,使用mtdparts命令可以看到分区信息:
device nand0 <nand0>, # parts = 5
#: name size offset mask_flags
0: u-boot env 0x00020000 0x00000000 0
1: UBL 0x00020000 0x00020000 0
2: u-boot 0x001c0000 0x00040000 0
3: kernel 0x00200000 0x00200000 0
4: filesystem 0x07c00000 0x00400000 0
active partition: nand0,0 - (u-boot env) 0x00020000 @ 0x00000000
2. 烧写文件系统:
nand erase 0x400000 0x7c00000
tftp 0xc1180000 ubifs.img
ubi create rootfs
ubi part nand filesystem
ubi write 0xc1180000 rootfs 0x1d1000
通过以上命令,可以将文件系统烧写到第4个分区上,UBIFS文件系统卷标为rootfs。
3. 设置内核启动参数:
setenv bootargs 'console=ttyS2,115200n8 ubi.mtd=4,2048 root=ubi0:rootfs rootwait rootfstype=ubifs rw ip=off'
这样就可以将烧写的UBIFS文件系统用作根分区了。
4. 要在u-boot下使用ubi,mtd等命令,需要配置一下u-boot,具体可参见: http://blog.csdn.net/longfeey/article/details/5881433
5.3 在linux系统下烧写
在linux系统下,可以使用ubiformat工具烧写使用ubinize工具制作的UBIFS文件系统映像,此处以烧写到NAND FLASH的5个分区上为例,具体命令为:
1. 查看FLASH的当前分区:
# cat /proc/mtd
dev: size erasesize name
mtd0: 00020000 00020000 "u-boot env"
mtd1: 00020000 00020000 "UBL"
mtd2: 00080000 00020000 "u-boot"
mtd3: 00200000 00020000 "kernel"
mtd4: 07c00000 00020000 "filesystem"
2. 擦除要烧写的分区:
flash_eraseall /dev/mtd/mtd4
3. 烧写UBIFS文件系统:
ubiformat /dev/mtd/mtd4 -f /ubi.img
4. 挂载烧写好的文件系统:
ubiattach /dev/ubi_ctrl -m 4 -O 2048
mount -t ubifs ubi0:rootfs /mnt/
5.在linux下创建UBIFS分区
flash_eraseall /dev/mtd/mtd4
ubiattach /dev/ubi_ctrl -m 4 -O 2048
ubimkvol /dev/ubi0 -N rootfs -s 100MiB
mount -t ubifs ubi0:rootfs /mnt/
5.4 从主机linux烧写ubi文件系统
<1>启动开发板,通过nfs根文件系统启动开发板
<2>flash_eraseall /dev/mtd3
<3>ubiattach /dev/ubi_ctrl -m 3
<4>ubimkvol /dev/ubi0 -s 193MiB -N rootfs
<5>mount -t ubifs ubi0_0 /mnt
<6>cp -a /arago/* /mnt //arago/arago为要烧写的文件系统,放在了nfs根文件系统之中。
<7>umount /mnt
<8>bootargs参数设置
ubi:setenv bootargs 'mem=364M@0x80000000 mem=320M@0x9FC00000 console=ttyO0,115200n8 noinitrd ip=off rootwait=1 rw ubi.mtd=3 rootfstype=ubifs root=ubi0:rootfs init=/init vmalloc=500M notifyk.vpssm3_sva=0xBF900000';saveenv
nfs: setenv bootargs mem=364M@0x80000000 mem=320M@0x9FC00000 console=ttyO0,115200n8 root=/dev/nfs rw nfsroot=192.168.2.104:/home/yxz1295324/targetfs,nolock ip=192.168.2.85:192.168.2.104:192.168.2.1:255.255.255.0::eth0:on vmalloc=500M notifyk.vpssm3_sva=0xBF900000
官方指导:
http://processors.wiki.ti.com/index.php/UBIFS_Support
参考网址:
http://processors.wiki.ti.com/index.php/UBIFS_Support#Flashing_UBIFS_image_to_a_NAND_partition
http://blog.sina.com.cn/s/blog_afeaebf00101figp.html
http://www.360doc.com/content/14/1015/18/18578054_417224516.shtml
http://www.360doc.com/content/15/1201/15/27345215_517173625.shtml
http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/59921.aspx
- 制作ubifs文件系统
- Ubifs制作文件系统
- 制作ubifs文件系统
- 制作ubifs文件系统
- ubifs文件系统的制作
- ubifs文件系统制作
- ubifs文件系统的制作
- ubifs文件系统制作
- ubifs文件系统制作
- ubifs文件系统的制作
- ubifs文件系统制作与移植
- ubifs文件系统制作与移植
- ubifs文件系统制作与移植
- 为AM335X 制作ubifs文件系统
- ubifs文件系统制作与移植
- ubifs文件系统制作与移植
- DM368开发 -- 制作ubifs文件系统
- Tiny6410 关于制作ubifs文件系统映像
- 用AndroidStudio开发cocos2d-x 项目
- [delve][web]如何实现网站顶部状态条的外部引用
- JS中格式化日期
- canvas 学习(一)
- c#的构造函数及构造函数的调用
- 制作ubifs文件系统
- 《剑指offer》——把二叉树打印成多行
- Linux USB驱动数据结构
- 汉诺塔问题
- 关于LinerLayout分割线Divider
- hdoj Friendship of Frog 5578 (简单字符串转换)
- Codeforces 600C Make Palindrome 【贪心 找字典序最小回文串】
- 标准C的IO
- Hadoop2.7.1集群安装