内 核 版 本: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]$ ls
显示目录结果同移植(一)。
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
烧录的过程省略,结果如下: