jffs2文件系统制作

内核:                linux-3.0

uboot:             2010.09

开发板:             fl2440

交叉编译器:         2011.11

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

无修改

2.添加内核对jffs2的支持

[[email protected] linux-3.0-jffs2]$ vt100
[[email protected] linux-3.0-jffs2]$ sudo 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 
                   [ ] Verify JFFS2 write-buffer reads 
                   [ ] JFFS2 summary support (EXPERIMENTAL)
                   [ ] JFFS2 XATTR support (EXPERIMENTAL)

[ ]     Advanced compression options for JFFS

[[email protected] linux-3.0-jffs2]$ sudo make

[[email protected] linux-3.0-jffs2]$ sudo cp linuxrom-mini2440-wei.bin /tftp

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

[[email protected] rootfs_tree]$ mkdir mtd-utiles

[[email protected] rootfs_tree]$ cd mtd-utiles/

[[email protected] mtd-utiles]$ sudo 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 <[email protected]>

#|  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

[[email protected] mtd-utiles]$ ls
build.sh

[[email protected] mtd-utiles]$ sh build.sh

......

CC ubi-utils/ubiformat.o
CC ubi-utils/libscan.o
AR ubi-utils/libscan.a
LD ubi-utils/ubiformat
CC ubi-utils/ubirename.o
LD ubi-utils/ubirename
CC ubi-utils/mtdinfo.o
LD ubi-utils/mtdinfo
CC ubi-utils/ubirsvol.o
LD ubi-utils/ubirsvol
+ set -x
[[email protected] mtd-utiles]$ ls
build.sh e2fsprogs-1.42.tar.gz lzo-2.04.tar.gz mtd-utils-1.4.9.tar.bz2 zlib-1.2.5
e2fsprogs-1.42 lzo-2.04 mtd-utils-1.4.9 zlib-1.2.5.tar.bz2

[[email protected] 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

[[email protected] mtd-utils-1.4.9]$ sudo cp mkfs.jffs2 /usr/local/bin/

[[email protected] mtd-utils-1.4.9]$ ls /usr/local/bin/
busybox glib-mkenums lrb lsb m4 mkfs.ubifs ubinize vsyasm
glib-genmarshal gobject-query lrx lsx mkcramfs mkyaffs2image uImage-s3c2440.gz yasm
glib-gettextize iptables-xml lrz lsz mkfs.jffs2 tftp useradd.sh ytasm

4.制作映像文件

[[email protected] rootfs_tree]$ ls
build_ubifs.sh mtd-utiles rootfs-ubifs sysmnt
install_shared_library.sh ramdisk.gz rootfs-wei.cramfs ubifs-s3c2440.rootfs
mkimage rootfs

[[email protected] rootfs_tree]$ sudo mkfs.jffs2 -n -s 2048 -e 128KiB -d rootfs -o rootfs.jffs2 --pad=0x1400000

生成了rootfs.jffs2

各参数的意义:
(1)-r :指定根文件系统目录.
(2)-o : 指定输出的根文件系统名.
(3)-s : 指定flash每一页的大小;
(3)-e : 指定flash的檫除块的大小,預設是64KB.
要注意,不同的flash, 其page size和block size會不一樣.,如果是K9F2G08U0M,在它的datasheet上有说明:

[[email protected] rootfs_tree]$ mv rootfs.jffs2 rootfs-wei.jffs2

[[email protected] rootfs_tree]$ du -h rootfs-wei.jffs2
20M rootfs-wei.jffs2

5.添加uboot对jffs2支持

我的启动信息中

Creating 9 MTD partitions on "NAND":
0x000000000000-0x000000100000 : "mtdblock0 u-boot 1MB"
0x000000100000-0x000001000000 : "mtdblock1 kernel 15MB"
0x000001000000-0x000002400000 : "mtdblock2 ramdisk 20MB"
0x000002400000-0x000003800000 : "mtdblock3 cramfs 20MB"
0x000003800000-0x000006000000 : "mtdblock4 jffs2 40MB"
0x000006000000-0x000008800000 : "mtdblock5 yaffs2 40MB"
0x000008800000-0x00000b000000 : "mtdblock6 ubifs 40MB"
0x00000b000000-0x00000d800000 : "mtdblock7 apps 40MB"
0x00000d800000-0x000010000000 : "mtdblock8 data 40MB"

根据自己的分区地址及大小来做

[[email protected]]# set bjffs2 ‘tftp 30008000 rootfs-wei.jffs2;nand erase 3800000 1400000;nand write.jffs2 30008000 3800000 1400000‘

[[email protected]]#set bootargs_jffs2 ‘noinitrd root=/dev/mtdblock4 rootfstype=jffs2 init=/linuxrc console=ttyS0,115200‘

[[email protected]]#set bootargs ‘noinitrd root=/dev/mtdblock4 rootfstype=jffs2 init=/linuxrc console=ttyS0,115200‘

[[email protected]]#set bootcmd_jffs2 ‘nand read 30008000 100000 400000;bootm 30008000‘
[[email protected]]#set bootcmd ‘run bootcmd_jffs2‘

[[email protected]]#save
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x60000 -- 100% complete.
Writing to Nand... done

6.下载内核和rootfs-wei.jffs2映像文件

[[email protected]]#pri
bootdelay=5
baudrate=115200
ethaddr=08:00:3e:26:0a:6b
ethact=dm9000
bcramfs=tftp 30800000 rootfs-wei.cramfs;nand erase 1300000 800000;nand write 30800000 1300000 800000
bootcmd_cramfs=nand read 30008000 100000 400000;bootm 30008000
brdfs=tftp 30008000 ramdisk.gz;nand erase 1000000 a00000;nand write 30008000 1000000 a00000
bootcmd_ramdisk=nand read 30008000 100000 400000;nand read 30800000 1000000 a00000;bootm 30008000
bootargs_ubifs=console=ttyS0,115200 mem=64M ubi.mtd=6 root=ubi0:rootfs rootwait rootfstype=ubifs rw
bootcmd_rootfs=nand read 30008000 100000 400000;bootm 30008000
filesize=3A0000
fileaddr=30008000
netmask=255.255.255.0
ipaddr=192.168.1.23
bubifs=tftp 30008000 ubifs-s3c2440.rootfs;nand erase 8800000 500000;nand write 30008000 8800000 500000
serverip=192.168.1.3
bootargs_nfs=noinitrd console=ttyS0,115200 init=/linuxrc mem=64M loglevel=7 root=/dev/nfs rw nfsroot=192.168.1.3:/home/weishusheng/rootfs_tree/rootfs ip=192.168.1.23:192.168.1.3:192.168.1.1:255.255.255.0:localhost.com:eth0:off
bkr=tftp 30008000 linuxrom-mini2440-wei.bin;nand erase 100000 800000;nand write 30008000 100000 800000
stdin=serial
stdout=serial
stderr=serial
bjffs2=tftp 30008000 rootfs-wei.jffs2;nand erase 3800000 1400000;nand write.jffs2 30008000 3800000 1400000
bootargs_jffs2=noinitrd root=/dev/mtdblock4 rootfstype=jffs2 init=/linuxrc console=ttyS0,115200
bootargs=noinitrd root=/dev/mtdblock4 rootfstype=jffs2 init=/linuxrc console=ttyS0,115200
bootcmd=run bootcmd_jffs2
bootcmd_jffs2=nand read 30008000 100000 400000;bootm 30008000

Environment size: 1538/131068 bytes

[[email protected]]#run bkr

.....

[[email protected]]#run bjffs2

.....

[[email protected]]#boot

.....

Copyright (C) 2014 weishusheng
root login: root
Password:
>: ls
apps etc linuxrc sbin usr
bin info mnt sys var
data init proc sysmnt weishusheng
dev lib root tmp
>:

jffs2文件系统制作成功。

时间: 2024-08-13 11:32:25

jffs2文件系统制作的相关文章

hi3531 SDK已编译文件系统制作jffs2文件系统镜像并解决问题 .

一, 安装SDK 1.Hi3531 SDK包位置 在"Hi3531_V100R001***/01.software/board"目录下,您可以看到一个 Hi3531_SDK_Vx.x.x.x.tgz 的文件, 该文件就是Hi3531的软件开发包. 2.解压缩SDK包 在linux服务器上(或者一台装有linux的PC上,主流的linux发行版本均可以),使用命令:tar -zxf Hi3531_SDK_Vx.x.x.x.tgz , 解压缩该文件,可以得到一个Hi3531_SDK_Vx.

linux文件系统的移植-制作JFFS2文件系统

JFFS2全名是 Journalling Flash File System Version2,是Redhat公司开发的快闪存储器(简称:闪存:英文: Flash Memory)的档案系统[1],其前身是JFFS, 最早只支援NOR Flash, 自2.6版以后开始支援NAND Flash, 极适合使用于嵌入式系统. JFFS2 功能如下: 支援 NAND flash 装置. 硬连结(Hard links).这是JFFS 碍于文件格式所无法支援的功能. 压缩.有三种算法: zlib, rubin

JFFS2文件系统的移植

Linux文件系统的移植-JFFS2 JFFS2是JFFS的后继者,由Red Hat重新改写而成.JFFS2的全名为JournallingFlash File System Version 2(闪存日志型文件系统第2版),其功能就是管理在MTD设备上实现的日志型文件系统.与其他的存储设备存储方案相比,JFFS2并不准备提供让传统文件系统也可以使用此类设备的转换层.它只会直接在MTD设备上实现日志结构的文件系统.JFFS2会在安装的时候,扫描MTD设备的日志内容,并在RAM中重新建立文件系统结构本

linux系统移植和根文件系统制作

1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起. 1.1.1  Linux版本 Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如2.6.29.1内核的Makefile中: VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 29 EXTRAVERSION = .1 其中的“VERSION”和“PATCHLEVEL”组成主版本号,比如2.4.2.5.

jffs2系统制作2

http://blog.chinaunix.net/uid-23208702-id-353022.html 1.2.   安装zlib库 由于交叉编译mtd工具时需要zlib.h文件,所以在编译之前先安装zlib库文件.从网上下载zlib-1.2.3.tar.gz解压缩 $ tar zxvf zlib-1.2.3.tar.gz $ cd zlib-1.2.3 $ ./configure –prefix=/usr/local/arm/arm-linux --shared 修改Makefile如下:

根文件系统制作命令小结

1.将根文件系统制作 成ramdisk #genext2fs -b 8192 -d /home/fs/myrootfs/  ramdisk 说明:这一步出现问题,后来发现是这个分配的空间太小,于是将8192改为120400 #genext2fs   -b   /home/xiongyao/rootfs/  ramdisk #gzip  -9  -f  ramdisk 这样就可以将ramdisk.gz下载到开发板上面去了 2.jffs2文件格式 命令使用实例:mkfs.jffs2 -d ~/tar

NFS文件系统制作

内核:              linux-3.0 u-boot:          2010.08 开发板:         fl2440(s3c2440主芯片) 交叉编译器:   2011.11 我们在上面移植了initramfs文件系统,并且已经成功运行了.下面我们开始移植nfs,之前开启PC上的nfs服务功能 确认并安装NFS服务依赖软件包 一般NFS服务器要提供服务,必须启动inet,nfs, mount,portmap或rpcbind这些守护进程并保持在后台状态运行. 这里需要提示

linux分区,磁盘系统的管理,文件系统制作

最近又开始重新拾起linux了,因为工作中用的很少,所以看得东西很容易就忘记了. 这几天看了下linux的分区,以及如何制作文件系统等相关命令的用法,下面就按照这个流程来讲一讲,免得自己日后忘记了. 1.分区 磁盘分区,即指定分区的起始和结束柱面.我们在安装linux系统的时候,都会将磁盘划分为独立的几块,这就是分区,柱面是分区的最小单位,柱面由扇区构成,第一个扇区是最重要的,里面有MBR(446byte)和分区表(64byte),扇区大小固定为512byte. 2.文件系统 文件系统是怎么来的

mini2440 最小根文件系统制作和nfs启动

mini2440 内核启动后,可以用busybox制作一个简单的根文件系统并用nfs来启动该文件系统 启动mini2440, 按任意键进入uboot,按q键进入uboot命令行: 执行以下命令: set bootargs "noinitrd root=/dev/nfs rw nfsroot=192.168.211.2:/home/host/nfs/mini2440/rootfs ip=192.168.211.211 console=ttySAC0 init=/linuxrc" save