转载地址:http://blog.chinaunix.net/uid-26700563-id-5211906.html
在本人移植 ubifs 过程中,遇到了一些问题,一一记录并解决,希望在大家制作和移植 ubifs 的过程中可以起到一定借鉴的作用
PC操作系统:ubuntu 11.10
使用的开发板:am335x_evm
开发板使用的操作系统:linux 3.2
使用的 NAND FLASH的型号:MT29F2G08ABAEAWP
在制作 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。
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
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
当使用这些命令的过程中,如果遇到了问题请转到:1),正确安装数据包:-> 5,安装 mtd-utils 的疑难杂症及其解决方法。
至此,生成的 ubi.img 映像文件应该是正确的。