jffs2之制作与烧录

清水出芙蓉,天然去雕饰——李白《论诗》

内核版本:3.0.54
busybox:1.20.2

   根文件系统制作很久了,但是当时做完的时候对其中的一些东西以及过程还不是很理解,就想等到理解了再来写博客,一拖就是一个多月,最近在做总结,因为马上就要做其他的事情了,所以想起来完成这篇博客。
   jffs2文件系统呢,适用于norflash和nandflash,ubifs文件系统适用于nandflash,我们的s3c2440是nandflash,因此最好用的文件系统应当是ubifs,但是在制作ubifs文件系统时遇到了一系列的问题,所以ubifs一直没有成功,而jffs2成功了,所以在此后的开发都是用的jffs2文件系统,这篇文章呢主要就是谈一谈制作jffs2的过程以及如何将它烧进开发板中。
添加对内核的支持:
[tangyanjun@centos Linux-3.0.54]$export TERM=vt100
[tangyanjun@centos Linux-3.0.54]$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)

[tangyanjun@centos Linux-3.0.54]make
mkfs.jffs2与mkfs.ubifs工具的制作
    这里我们先创建一个文件夹用来放这些工具,然后用一个脚本来生成我们的工具,至于脚本的注释,鉴于本人目前未深入学习,只能以后再研究。
[tangyanjun@centos opt]$mkdir mtd-utiles
[tangyanjun@centos opt]$cd mtd-utiles/
[tangyanjun@centos mtd-utiles]$vim build.sh
#!/bin/bash
#+--------------------------------------------------------------------------------------------
#|cription:  This shell script used to download lzo,zlib,mtd-utils source code
#|              and cross compile it for ARM Linux, all is static cross compile.
#|           修改为国内CDN,优化下载速度
#|     Author:  popy32 @sfantree.com
#|  ChangeLog:1, Initialize 1.0.0 on 2017.03.16
#|            
#+--------------------------------------------------------------------------------------------


PRJ_PATH=`pwd`

LZO="lzo-2.04"
ZLIB="zlib-1.2.5"
e2fsprogs_ver=1.42
mtd="mtd-utils-1.4.9"

echo "+---------------------------------------------+"
echo "|    Modified by panlin <740502708@qq.com>     "
echo "|    修改为国内CDN,优化下载速度               "
echo "| 如遇编译报错 尝试yum install glibc-static zlib-static -y "
echo "+---------------------------------------------+"

sleep 3

sudo yum install glibc-static zlib-static -y


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 https://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/lzo-2.04.tar.gz
fi

# Decompress lzo source code packet
if [ ! -d $LZO ] ; then
    tar zxvf $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 https://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/zlib-1.2.5.tar.bz2
fi

# Decompress zlib source code packet
if [ ! -d $ZLIB ] ; then
    tar xjf $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 https://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/e2fsprogs-1.42.tar.gz
fi

# Decompress e2fsprogs source code packet
if [ ! -d e2fsprogs-$e2fsprogs_ver ] ; then
    tar zxvf 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 https://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/mtd-utils-1.4.9.tar.bz2
fi
tar xjf ${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

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

echo "+---------------------------------------------+"
echo "|    修改为国内CDN,优化下载速度               "
echo "| 如遇编译报错 尝试yum install glibc-static zlib-static -y "
echo "+---------------------------------------------+"

[tangyanjun@centos mtd-utiles]$sh build.sh
    这个脚本会下载我们需要的源码包以及生成制作jffs2的工具mkfs.jffs2(在mtd-utiles-1.4.9下),和制作ubifs的工具mkfs.ubifs(在mtd-utiles-1.4.9/mkfs.ubifs下)。
[tangyanjun@centos mtd-utiles-1.4.9]$sudo cp mkfs.jffs2 /usr/local/bin/
[tangyanjun@centos mtd-utiles-1.4.9]$mkfs
[tangyanjun@centos mtd-utiles-1.4.9]mkfs.jffs2 -V
制作映像文件

以前不是很理解这个映像文件,现在有个概念了,映像文件就相当于一张存放东西的光盘我们可以随时拿来用,当我们的文件系统出问题时,我们直接烧录映像文件不就行了,方便我们的修复。

[tangyanjun@centos mtd-utiles-1.4.9]$cd /opt
[tangyanjun@centos opt]$sudo mkfs.jffs2 -n -s 2048 -e 128KiB -d rootfs -o rootfs.jffs2 --pad=0x1400000
[tangyanjun@centos opt]$du -h rootfs.jffs2
20M  rootfs.jffs2

生成我们的rootfs.jffs2文件就完成了我们的文件系统的制作。

烧录过程

烧录jffs2文件系统得根据我们的分区来,我给的分区是这样的:

bootloader:1M
kernel:15M
rootfs:40M
apps:100M
datas:100M

所以我们根据分区来设置我们在u-boot里面的参数:

1.[uboot@tangyanjun]#set bjffs2 'tftp 30008000 rootfs.jffs2;nand erase 1e00000 1400000;nand write.jffs2 30008000 1e00000 1400000'

这里给我们的文件系统设置为bjffs2变量名,可以随意,30008000是我们内存的基地址,我们先将jffs2文件放入内存,然后擦除我们的文件系统分区,再将我们的文件系统写入硬盘分区中。

2.[uboot@tangyanjun]#set bootargs_jffs2 'noinitrd root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc console=ttyS0,115200'

这里就是设置根文件系统在第二个分区,这是我们自己分的,然后启动文件为linuxrc。

3.[uboot@tangyanjun]#set bootargs 'noinitrd root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc console=ttyS0,115200'

第二步的bootargs_jffs2是我们自己设置的参数,目的是为了让我们好记,这一步的bootargs才是系统认识的参数,所以这里重新设置一次。

4.[uboot@tangyanjun]#set bootcmd_jffs2 'nand read 30008000 100000 400000;bootm 30008000'

这里就是设置启命令了,当我们boot时,系统从硬盘将根文件系统读到内存中,让其在内存中运行。

5.[uboot@tangyanjun]#set bootcmd 'run bootcmd_jffs2'

这一步就是执行上一步的命令。

6.最后就是save

OK,参数设置完毕:

[uboot@tangyanjun]#run bkr
[uboot@tangyanjun]#run bjffs2
[uboot@tangyanjun]#boot

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值