文件系统的移植(五):jiffs2文件系统的移植

本文详细介绍了如何对Linux内核进行修改,包括添加JFFS2支持、制作mkfs.jffs2和mkfs.ubifs工具、制作映像文件以及将文件系统烧入开发板的全过程。

内 核 版 本:linux-3.0

u-boot版本:u-boot-2010.09

开发板型号:FL2440


1、对根文件系统进行修改

      无修改

2、添加内核对 jiffs2的支持

      [lingyun@localhost linux-3.0]$ vt100
      [lingyun@localhost linux-3.0]$ make menuconfig

      File systems --->
            Miscellaneous filesystems --->

                  <*> Journalling Flash File System v2 (JFFS2) support
                   (0) JFFS2 debugging verbosity (0 = quiet, 2 = noisy)
                   [*] JFFS2 write-buffering support
                   [ ] JFFS2 summary support (EXPERIMENTAL)
                   [ ] JFFS2 XATTR support (EXPERIMENTAL)
                   [ ] Advanced compression options for JFFS2

      修改Makefile

       [lingyun@localhost linux-3.0]$ vim Makefile

       修改195、196行


     [lingyun@localhost linux-3.0]$ make

      编译过程省略

      [lingyun@localhost linux-3.0]$ ls

      显示目录结果同移植(一)。

      ky-jffs2.bin为编译好的内核。 

3、制作 mkfs.jffs2 和mkfs.ubifs 工具

        [lingyun@localhost keyue]$ mkdir mtd-utiles

      [lingyun@localhost keyue]$ cd mtd-utiles/

      [lingyun@localhost mtd-utiles]$ vim build.sh 

        #!/bin/sh
       #+--------------------------------------------------------------------------------------------
       #|Description: This shell script used to download lzo,zlib,mtd-utils source code
       #| and cross compile it for ARM Linux, all is static cross compile.
       #| Author: GuoWenxue <guowenxue@gmail.com>
       #| ChangeLog:
       #| 1, Initialize 1.0.0 on 2011.04.12
       #+--------------------------------------------------------------------------------------------
       PRJ_PATH=`pwd`
       LZO="lzo-2.04"
       ZLIB="zlib-1.2.5"
       e2fsprogs_ver=1.42
       mtd="mtd-utils-1.4.9"
       function decompress_packet()
       (
            echo "+---------------------------------------------+"
            echo "| Decompress $1 now"
            echo "+---------------------------------------------+"
           

            ftype=`file "$1"`
            case "$ftype" in
                    "$1: Zip archive"*)

                             unzip "$1" ;;
                    "$1: gzip compressed"*)
                             if [ `expr "$1" : ".*.tar.*" ` ] ; then
                                   tar -xzf $1
                             else
                                   gzip -d "$1"
                             fi ;;
                    "$1: bzip2 compressed"*)
                             if [ `expr "$1" : ".*.tar.*" ` ] ; then
                                   tar -xjf $1
                             else

                                   bunzip2 "$1"
                             fi ;;
                    "$1: POSIX tar archive"*)
                             tar -xf "$1" ;;
                    *)
                     echo "$1 is unknow compress format";;
              esac
       )

       # Download lzo source code packet
       if[ ! -s $LZO.tar.gz ] ; then
               wget http://www.oberhumer.com/opensource/lzo/download/$LZO.tar.gz
       fi

       # Decompress lzo source code packet
       if [ ! -d $LZO ] ; then
               decompress_packet $LZO.tar.*
       fi
      

       # Cross compile lzo

         cd $LZO
        if [ ! -s src/.libs/liblzo*.a ] ; then
             unset LDFLAGS
             ./configure --enable-static --disable-shared
             make
        fi
        cd -
        echo "+----------------------------------------+"
        echo "| Cross compile $ZLIB now "
        echo "| Crosstool: $CROSS"
        echo "+----------------------------------------+"
       

        # Download zlib source code packet
        if[ ! -s $ZLIB.tar* ] ; then
               #wget http://www.zlib.net/$ZLIB.tar.gz
               #wget http://www.imagemagick.org/download/delegates/$ZLIB.tar.bz2
               #wget http://down1.chinaunix.net/distfiles/$ZLIB.tar.bz2
               wget http://pkgs.fedoraproject.org/repo/pkgs/zlib/zlib-1.2.5.tar.bz2/be1e89810e66150f5b0327984d8625a0/$ZLIB.tar.bz2
        fi
 

        # Decompress zlib source code packet
        if [ ! -d $ZLIB ] ; then
               decompress_packet $ZLIB.tar.*
        fi

        #Cross compile zlib
        cd $ZLIB
        if [ ! -s libz.a ] ; then
               unset LDFLAGS
               ./configure --static
               make
        fi
        cd -
        echo "+----------------------------------------+"
        echo "| Cross compile e2fsprogsV$e2fsprogs_ver now "
        echo "| Crosstool: $CROSS"
        echo "+----------------------------------------+"
    

        #e2fsprogs is for UBIFS, download e2fsprogs source code packet
        if [ ! -s e2fsprogs-$e2fsprogs_ver.tar.gz ] ; then
                wget http://nchc.dl.sourceforge.net/project/e2fsprogs/e2fsprogs/$e2fsprogs_ver/e2fsprogs-$e2fsprogs_ver.tar.gz
        fi

          # Decompress e2fsprogs source code packet
        if [ ! -d e2fsprogs-$e2fsprogs_ver ] ; then
                decompress_packet e2fsprogs-$e2fsprogs_ver.tar.*
       fi
       cd e2fsprogs-$e2fsprogs_ver
       if [ ! -s lib/libuuid.a ] ; then
                ./configure --enable-elf-shlibs
                make
       fi
       cd -
       echo "+----------------------------------------+"
       echo "| Cross compile mtd-utils now "
       echo "| Crosstool: $CROSS"
       echo "+----------------------------------------+"
       if [ ! -s ${mtd}.tar.bz2 ] ; then
               wget ftp://ftp.infradead.org/pub/mtd-utils/${mtd}.tar.bz2
       fi
       decompress_packet ${mtd}.tar.bz2
       # download mtd-utils source code
       #if [ ! -d mtd-utils* ] ; then
       #git clone git://git.infradead.org/mtd-utils.git

       #fi
       cd ${mtd}

       #Add the CROSS tool in file common.mk
       line=`sed -n '/CFLAGS ?= -O2 -g/=' common.mk `
       if [ ! -z $line ] ; then
                sed -i -e ${line}s"|.*|CFLAGS ?= -O2 -g --static|" common.mk
       fi
       unset LDFLAGS
       unset CFLAGS
       set -x
       export CFLAGS="-DWITHOUT_XATTR -I$PRJ_PATH/$ZLIB -I$PRJ_PATH/$LZO/include-I$PRJ_PATH/e2fsprogs-$e2fsprogs_ver/lib"
       export ZLIBLDFLAGS=-L$PRJ_PATH/$ZLIB
       export LZOLDFLAGS=-L$PRJ_PATH/$LZO/src/.libs/
       export LDFLAGS="-static -L $PRJ_PATH/e2fsprogs-$e2fsprogs_ver/lib $ZLIBLDFLAGS $LZOLDFLAGS"
       make
       set -x
       #strip nandwrite flash_erase nanddump
       #sudo cp nandwrite $INST_PATH/.nandwrite
       #sudo cp flash_erase $INST_PATH/.flash_erase
       #sudo cp nanddump $INST_PATH/.nanddump


         [lingyun@localhost mtd-utiles]$ sh build.sh

       运行过程略。

       [lingyun@localhost mtd-utiles]$ cd mtd-utils-1.4.9

       [lingyun@localhost mtd-utils-1.4.9]$ file mkfs.jffs2
       mkfs.jffs2: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, not stripped
       [lingyun@localhost mtd-utils-1.4.9]$ sudo cp mkfs.jffs2 /usr/local/bin/
       [lingyun@localhost mtd-utils-1.4.9]$ mkfs
       mkfs.ext2 mkfs.ext4 mkfs.jffs mkfs.msdos mkfs.vfat
       mkfs.cramfs mkfs.ext3 mkfs.ext4dev mkfs.jffs2 mkfs.ubifs/
       [lingyun@localhost mtd-utils-1.4.9]$ mkfs.jffs2 -V
       mkfs.jffs2: error!: revision 1.60


         制作完成。

4、制作映像文件

      [lingyun@localhost keyue]$ sudo mkfs.jffs2 -n -s 2048 -e 128KiB -d rootfs -o ky-rootfs.jffs2 --pad=0x1400000

         通过下面的方式可以对ky-rootfs.jffs2 映像文件中的内容进行修改,如果没有必要可以不用

        [lingyun@localhost keyue]$ uname -a
         Linux localhost.localdomain 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
        [lingyun@localhost keyue]$ modprobe mtdblock
        FATAL: Error inserting mtdblock (/lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/mtd/mtdblock.ko): Operation not permitted

        [lingyun@localhost keyue]$ modprobe mtdblock
        [lingyun@localhost keyue]$ modprobe mtdram total_size=20480 erase_size=128

        [lingyun@localhost keyue]$ ls /dev/mtdblock0 -l
        brw-rw---- 1 root disk 31, 0 Apr 28 13:25 /dev/mtdblock0

        [lingyun@localhost keyue]$ dd if=ky-rootfs.jffs2 of=/dev/mtdblock0
        40960+0 records in
        40960+0 records out
        20971520 bytes (21 MB) copied, 0.120246 s, 174 MB/s

        [lingyun@localhost keyue]$ mkdir mtd
        [lingyun@localhost keyue]$ mount -t jffs2 /dev/mtdblock0 mtd/
        [lingyun@localhost keyue]$ ls mtd

        apps bin data dev etc info init lib lingyun linuxrc mnt proc root sbin sys tmp usr var

        [lingyun@localhost keyue]$ cd mtd
        [lingyun@localhost keyue]$ touch lingyun-emb

        [lingyun@localhost keyue]$ ls

        apps bin data dev etc info init lib lingyun linuxrc mnt proc root sbin sys tmp usr var lingyun-emb

        [lingyun@localhost keyue]$ umount /dev/mtdblock0
        将映像文件拷贝到tftp下

        [lingyun@localhost keyue]$ cp ky-rootfs.jffs2 /tftp/

5、将文件系统烧入开发板

         5.1、 设置启动参数

               [u-boot@keyue]# set bjffs2 'tftp 30008000 ky-rootfs.jffs2;nand erase 1e00000 1400000;nand write.jffs2 30008000 1e00000 1400000'
       
               [u-boot@keyue]# set bootargs_jffs2 'noinitrd root=/dev/mtdblock4 rootfstype=jffs2 init=/linuxrc console=ttyS0,115200'

               [u-boot@keyue]# set bootargs 'noinitrd root=/dev/mtdblock4 rootfstype=jffs2 init=/linuxrc console=ttyS0,115200'

               [u-boot@keyue]# set bootcmd_jffs2 'nand read 30008000 100000 400000;bootm 30008000'

               [u-boot@keyue]# set bootcmd 'run bootcmd_jffs2'

               [u-boot@keyue]#set bkr 'tftp 30008000 ky-jffs2.bin;nand erase 100000 800000;nand write 30008000 100000 800000'

               [u-boot@keyue]# save

           参数设置成功。

       5.2、将文件系统与内核烧入开发板

           [u-boot@keyue]# run bkr

            运行过程略。

           [u-boot@keyue]# run bjffs2

            运行过程略。

           [u-boot@keyue]# boot

            烧录的过程省略,结果如下:


       至此,文件系统已经烧入开发板,可以看到自己制作的文件系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值