ubifs的制作,移植的重点详解

来源:互联网 发布:犀牛for mac 破解补丁 编辑:程序博客网 时间:2024/06/05 11:54

转载地址: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 映像文件应该是正确的。