ubifs文件系统:
无排序区块图像文件系统(Unsorted Block Image File System, UBIFS)是用于固态硬盘存储设备上,并与LogFS相互竞争,作为JFFS2的后继文件系统之一。真正开始开发于2007年,并于2008年10月第一次加入稳定版本于Linux核心2.6.27版。UBIFS最早在2006年由IBM与Nokia的工程师Thomas Gleixner,Artem Bityutskiy所设计,专门为了解决MTD(Memory Technology Device)设备所遇到的瓶颈。由于Nand Flash容量的暴涨,YAFFS等皆无法再去控制Nand Flash的空间。UBIFS通过子系统UBI处理与MTD device之间的动作。与JFFS2一样,UBIFS建构于MTD device之上,因而与一般的block device不兼容。
UBIFS文件系统目录存储在flash上,UBIFS 挂载时不需要扫描整个存储器来重新创建文件目录。支持实时压缩,而且可选择性压缩部份文件。另外UBIFS使用日志(journal),可减少对flash index的更新频率UBIFS 目前是 Nokia N900 智能手机上的默认文件系统。1.1修改根文件系统目录
将etc/mdev.conf文件中的下面两行注释掉。
[zoulei2@localhost etc]$ vim mdev.conf
sd[a-z][0-9] 0:0 0777 @(mount /dev/$MDEV /mnt/usb)
sd[a-z] 0:0 0777 $(umount /mnt/usb)
#ub[a-z][0-9] 0:0 0777 @(mount /dev/$MDEV /mnt/usb)#第一处需要注释的地方
#ub[a-z] 0:0 0777 $(umount /mnt/usb)#第二处需要注释的地方
mmcblk[0-9]p[0-9] 0:0 0777 @(mount /dev/$MDEV /mnt/sdc)
mmcblk[0-9] 0:0 0777 $(umount /mnt/sdc)
******************************************************************************************************************
将etc/inittab文件中的下面两行注释掉。
******************************************************************************************************************
[zoulei@localhost rootfs]$ cd etc/
[zoulei@localhost etc]$ ls
dropbear init.d
[zoulei@localhost etc]$ vim inittab
# /etc/inittab
#
# Copyright (C) 2011 fulinux <fulinux@gmail.com>
#
# Note: BusyBox init doesn't support runlevels. The runlevels field is
# completely ignored by BusyBox init. If you want runlevels, use sysvinit.
#
# Format for each entry: <id>:<runlevels>:<action>:<process>
#
# id == tty to run on, or empty for /dev/console.
# If specified, then /dev/$id device must exist
# runlevels == ignored, busybox doesn't support it
# action == one of sysinit, respawn, askfirst, wait, and once
# process == program to run
# Startup the system
# mount all the file systems specified in /etc/fstab
::sysinit:/bin/mount -a
#Use mdev as hotplug to auto mount USB storage or SD card
::sysinit:/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
#Use mdev to auto generate the device node in /dev path
::sysinit:/sbin/mdev -s
#make shm, pts support
::sysinit:/bin/mkdir -p /dev/pts
::sysinit:/bin/mkdir -p /dev/shm
::sysinit:/bin/mount -t devpts devpts /dev/pts
#Mount our apps/info partition
#null::wait:/bin/mount -o sync,noatime,ro -t jffs2 /dev/mtdblock6 /apps#第一处需要注释的地方
#null::wait:/bin/mount -o sync,noatime,ro -t jffs2 /dev/mtdblock7 /info#第二处需要注释的地方
#Set hostname
null::sysinit:/bin/hostname -F /etc/hostname
#Enable console logon
null::respawn:/sbin/getty -L ttyS0 115200 vt100
# now run any rc scripts
null::wait:/etc/init.d/rcS
# system daemon
null::respawn:/sbin/syslogd -n
null::respawn:/sbin/klogd -n
# Stuff to do before rebooting
null::shutdown:/bin/umount /apps
null::shutdown:/bin/umount /info
null::shutdown:/bin/killall klogd
null::shutdown:/bin/killall syslogd
null::shutdown:/bin/umount -a -r
#null::shutdown:/sbin/swapoff -a
1.2添加内核对ubifs的支持
[zoulei@localhost linux-3.0]$ make menuconfig
Device Drivers --->
<*> Memory Technology Device (MTD) support --->
<*> Enable UBI - Unsorted block images --->
--- Enable UBI - Unsorted block images
(4096) UBI wear-leveling threshold (NEW)
(1) Percentage of reserved eraseblocks for bad eraseblocks handling (NEW)
< > MTD devices emulation driver (gluebi) (NEW)
[ ] UBI debugging (NEW)
Device Drivers --->
<*> Memory Technology Device (MTD) support --->
<*> NAND Device Support --->
[ ] Verify NAND page writes //不要选这个
File systems --->
[*] Miscellaneous filesystems --->
<*> UBIFS file system support
[*] Extended attributes support
[*] Advanced compression options
[*] LZO compression support (NEW)
[*] ZLIB compression support (NEW)
[ ] Enable debugging support (NEW)
[zoulei@localhost linux-3.0]$ make
1.3制作mkfs.ubifs工具
[zoulei@localhost opt]$ mkdir mtd-utiles
[zoulei@localhost opt]$ cd mtd-utiles/
[zoulei@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
*************************************************************************************************************
说明:由于这是一个shell脚本文件,所以我们运行这个脚本时,还会产生一个mkfs.jffs2的工具,这个工具是用来制作jffs2映像文件的。
****************************************************************************************************************************
[zoulei@localhost mtd-utiles]$ ls
build.sh
[zoulei@localhost mtd-utiles]$ sh build.sh
[zoulei@localhost mtd-utiles]$ cd mtd-utils-1.4.9
[zoulei@localhost mtd-utils-1.4.9]$ ls
common.mk docfdisk.o flash_lock.c ftl_check.c load_nandsim.sh nanddump nftl_format.o serve_image.c
compr.c doc_loadbios flash_lock.o ftl_check.o make_a_release.sh nanddump.c rbtree.c serve_image.o
compr.h doc_loadbios.c flash_otp_dump ftl_format MAKEDEV nanddump.o rbtree.h summary.h
compr_lzo.c doc_loadbios.o flash_otp_dump.c ftl_format.c Makefile nandtest rbtree.o sumtool
compr_lzo.o feature-removal-schedule.txt flash_otp_dump.o ftl_format.o mcast_image.h nandtest.c recv_image sumtool.c
compr.o fectest.c flash_otp_info include mkfs.jffs2 nandtest.o recv_image.c sumtool.o
compr_rtime.c flashcp flash_otp_info.c jffs2dump mkfs.jffs2.1 nandwrite recv_image.o tests
compr_rtime.o flashcp.c flash_otp_info.o jffs2dump.c mkfs.jffs2.c nandwrite.c rfddump ubi-utils
compr_zlib.c flashcp.o flash_otp_lock.c jffs2dump.o
compr_zlib.o flash_erase flash_otp_write.c jffs2reader
COPYING flash_eraseall flash_unlock jffs2reader.c
device_table.txt flash_erase.c flash_unlock.c jffs2reader.o
docfdisk flash_erase.o flash_unlock.o jffs-dump.c
docfdisk.c flash_lock ftl_check lib
[zoulei@localhost mtd-utils-1.4.9]$ cd mkfs.ubifs/
[zoulei@localhost mkfs.ubifs]$ ls
compr.c compr.o crc16.c crc16.o devtable.c hashtable lpt.c lpt.o mkfs.ubifs.c mkfs.ubifs.o ubifs.h
compr.h COPYING crc16.h defs.h devtable.o key.h lpt.h mkfs.ubifs mkfs.ubifs.h README ubifs-media.h
[zoulei@localhost mkfs.ubifs]$
1.4制作映像文件
[zoulei@localhost mkfs.ubifs]$ sudo cp mkfs.ubifs /usr/bin/
****************************************************************************************************************************************************************************************
说明:因为mkfs.ubifs工具制作的文件系统映像,在uboot中烧录这种映像文件的方式过于复杂,既要使uboot支持nandflash分区,又要在uboot中激活这个分区,再通过ubi write命令烧录这个映像。所以我们换一种比较容易的方式来移植这个文件系统
在制作mkfs.jffs2和mkfs.ubifs工具时,其实还有一个ubinize工具是同时生成的,它的作用是将mkfs.ubifs制作的映像转换为可以直接用nand write命令烧录的映像文件。
****************************************************************************************************************************************************************************************
[zoulei@localhost mkfs.ubifs]$ cd ..
[zoulei@localhost mtd-utils-1.4.9]$ cd ubi-utils/
[zoulei@localhost ubi-utils]$ ls
dictionary.c libscan.c libubi_int.h ubiattach.c ubidetach.o ubinfo ubirename.c ubirsvol.o
dictionary.o libscan.o libubi.o ubiattach.o ubiformat ubinfo.c ubirename.o ubiupdatevol
include libubi.a LICENSE.libiniparser ubicrc32 ubiformat.c ubinfo.o ubirmvol ubiupdatevol.c
libiniparser.a libubi.c mtdinfo ubicrc32.c ubiformat.o ubinize ubirmvol.c ubiupdatevol.o
libiniparser.c libubigen.a mtdinfo.c ubicrc32.o ubimkvol ubinize.c ubirmvol.o ubiutils-common.c
libiniparser.o libubigen.c mtdinfo.o ubidetach ubimkvol.c ubinize.o ubirsvol ubiutils-common.o
libscan.a libubigen.o ubiattach ubidetach.c ubimkvol.o ubirename ubirsvol.c
[zoulei@localhost ubi-utils]$ sudo cp ubinize /usr/bin/
[zoulei@localhost ubi-utils]$ cd /opt
[zoulei@localhost opt]$
1.5制作root.ubifs文件
rootfs.ubifs的制作过程是通过下面的shell脚本完成的:
[zoulei@localhost opt]$ vim build_ubifs.sh
#!/bin/sh
#+--------------------------------------------------------------------------------------------
#|Description: This shell script is used to generate a UBIFS rootfs for K9F2G08 nandflash
#| Author: GuoWenxue <guowenxue@gmail.com> QQ: 281143292
#| ChangeLog:
#| 1, Initialize 1.0.0 on 2012.04.18
#| Reference:
#| http://www.linux-mtd.infradead.org/faq/ubifs.html
#| http://blog.sina.com.cn/s/blog_5b9ea9840100apqc.html
#+--------------------------------------------------------------------------------------------
VERSION=1.0.0
ROOTFS_DIR=rootfs
INSTALL_PATH=../../../bin/
#===================================================================
# Linux kenrel mount rootfs partition information for reference +
#===================================================================
# ~ >: cat /proc/mtd
# dev: size erasesize name
# mtd0: 00100000 00020000 "mtdblock0 u-boot 1MB"
# mtd1: 00f00000 00020000 "mtdblock1 kernel 15MB"
# mtd2: 04000000 00020000 "mtdblock2 rootfs 64MB"
# mtd3: 05000000 00020000 "mtdblock3 apps 80MB"
# mtd4: 03000000 00020000 "mtdblock4 data 48MB"
# mtd5: 03000000 00020000 "mtdblock5 info 48MB"
#UBI: attaching mtd2 to ubi2
#UBI: physical eraseblock size: 131072 bytes (128 KiB)
#UBI: logical eraseblock size: 129024 bytes
#UBI: smallest flash I/O unit: 2048
#UBI: sub-page size: 512
#UBI: VID header offset: 512 (aligned 512)
#UBI: data offset: 2048
#UBI: max. sequence number: 2
#UBI: attached mtd2 to ubi2
#UBI: MTD device name: "mtdblock2 rootfs 64MB"
#UBI: MTD device size: 64 MiB
#UBI: number of good PEBs: 510
#UBI: number of bad PEBs: 2
#UBI: number of corrupted PEBs: 0
#UBI: max. allowed volumes: 128
#UBI: wear-leveling threshold: 4096
#UBI: number of internal volumes: 1
#UBI: number of user volumes: 0
#UBI: available PEBs: 501
#UBI: total number of reserved PEBs: 9
#UBI: number of PEBs reserved for bad PEB handling: 5
#UBI: max/mean erase counter: 1/1
#UBI: image sequence number: 558504080
#UBI: background thread "ubi_bgt2d" started, PID 1200
#ubiattach -m 2 -d 2 /dev/ubi_ctrl
#mount -t ubifs -o rw,sync ubi2:rootfs /rootfs
#UBIFS: default file-system created
#UBIFS: mounted UBI device 2, volume 0, name "rootfs"
#UBIFS: file system size: 63479808 bytes (61992 KiB, 60 MiB, 492 LEBs)
#UBIFS: journal size: 3225600 bytes (3150 KiB, 3 MiB, 25 LEBs)
#UBIFS: media format: w4/r0 (latest is w4/r0)
#UBIFS: default compressor: lzo
#UBIFS: reserved for root: 2998307 bytes (2928 KiB)
#===========================================
# u-boot setup bootargs env +
#===========================================
# set bubifs 'tftp 30800000 rootfs-ubifs.bin;nand erase 1000000 4000000;nand write 30800000 1000000 $filesize'
# set bootargs 'console=ttyS0,115200 mem=64M ubi.mtd=2 root=ubi0:rootfs rootwait rootfstype=ubifs rw'
#===========================================
# Shell script body start here +
#===========================================
IMAGE_NAME=rootfs-ubifs
config_file=rootfs_ubinize.cfg
#UBI: physical eraseblock size: 131072 bytes (128 KiB)
#UBI: logical eraseblock size: 129024 bytes
PEB_SIZE=128KiB
LEB_SIZE=129024
#UBIFS: file system size: 63479808 bytes (61992 KiB, 60 MiB, 492 LEBs)
#80MiB value
LEB_COUNT=490
VOL_SIZE=`expr $LEB_COUNT \* $LEB_SIZE`
# ubi2: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
#UBI: smallest flash I/O unit: 2048
#UBI: sub-page size: 512
#UBI: VID header offset: 512 (aligned 512)
MIN_IO_SIZE=2048
SUB_PAGE_SIZE=512
VID_HDR_OFFSET=512
echo "Decompress rootfs packet and update rootfs version..."
SVNVER=`svn up rootfs.tar.bz2 | grep "At revision" | awk '{print $3}' | cut -d. -f1`
echo "version=V${VERSION} r$SVNVER `date +"%Y-%m-%d"`" > fs.conf
if [ ! -d $ROOTFS_DIR ] ; then
sudo tar -xjf $ROOTFS_DIR.tar.bz2
fi
sudo mv fs.conf $ROOTFS_DIR/etc/fs.conf
sudo chown root.root $ROOTFS_DIR/etc/fs.conf
echo ""
echo "Generating $IMAGE_NAME.bin file by mkfs.ubifs..."
set -x
sudo mkfs.ubifs -x lzo -m $MIN_IO_SIZE -e $LEB_SIZE -c $LEB_COUNT -r $ROOTFS_DIR -o $IMAGE_NAME.img
set +x
echo
echo "Generating configuration file..."
echo "[ubifs-volume]" > $config_file
echo "mode=ubi" >> $config_file
echo "image=$IMAGE_NAME.img" >> $config_file
echo "vol_id=0" >> $config_file
echo "vol_size=$VOL_SIZE" >> $config_file
echo "vol_type=dynamic" >> $config_file
echo "vol_name=rootfs" >> $config_file
echo "vol_flags=autoresize" >> $config_file
echo "vol_alignment=1" >> $config_file
echo
set -x
sudo ubinize -o $IMAGE_NAME.bin -m $MIN_IO_SIZE -p $PEB_SIZE -s $SUB_PAGE_SIZE -O $VID_HDR_OFFSET $config_file
sudo chmod a+x $IMAGE_NAME.bin
cp $IMAGE_NAME.bin $INSTALL_PATH
set +x
sudo rm -f $IMAGE_NAME.img $config_file
[zoulei@localhost opt]$ sh build_ubifs.sh
Generating rootfs_ubifs.img file by mkfs.ubifs...
+ sudo mkfs.ubifs -x lzo -m 2048 -e 129024 -c 140 -r rootfs -o rootfs_ubifs.img
+ set +x
Generating configuration file...
+ sudo ubinize -o rootfs.ubifs -m 2048 -p 131072 -s 512 -O 512 rootfs_ubinize.cfg
+ set +x
[zoulei@localhost opt]$ ls
buildroot-2012.02 buildroot-2012.08 buildroot-install.sh busybox-1.20.2 mtd-utiles rootfs.jffs2
buildroot-2012.02.tar.bz2 buildroot-2012.08-arm920t.config build_ubifs.sh busybox-1.20.2.tar.bz2 rootfs rootfs-ubifs.bin
[zoulei@localhost opt]$ du -h rootfs-ubifs.bin
5.5M rootfs-ubifs.bin
1.6添加uboot对ubifs支持
uboot环境变量设置:
[fl2440@zoulei]# set bootargs_ubifs 'console=ttyS0,115200 mem=64M ubi.mtd=2 root=ubi0:rootfs rootwait rootfstype=ubifs rw'
[fl2440@zoulei]# set bootargs 'console=ttyS0,115200 mem=64M ubi.mtd=2 root=ubi0:rootfs rootwait rootfstype=ubifs rw'
[fl2440@zoulei]# set bubifs ‘tftp 30008000 rootfs1-ubifs.bin;nand erase 1000000 4000000;nand write 30008000 1000000 900000’
[fl2440@zoulei]# set bkr ‘tftp 30008000 linuxrom2-s3c2440.bin;nand erase 100000 f00000;nand write 30008000 100000 900000’
[fl2440@zoulei]# set bootcmd_rootfs 'nand read 30008000 100000 400000;bootm 30008000'
**************************************************************************************************************************************************************************************
参数说明:console=ttyS0:表示控制终端为串口,115200:表示串口波特率,mem64:文件系统分区大小,这里也可以不用设置。Ubi.mtd:表示文件系统的mtdblock分区位于什么位置,而我的是mtdblock[2],所以这里设置为2,rootstype:文件系统类型。
**************************************************************************************************************************************************************************************
[fl2440@zoulei]# save
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x60000 -- 100% complete.
Writing to Nand... Done
1.7下载内核和rootfs.ubifs
[fl2440@zoulei]#run bkr
......
中间的信息省略
......
[fl2440@zoulei]#run bubifs
......
中间的信息省略
......
1.8 启动引导
[fl2440@zoulei]#boot
中间信息省略......
效果图出来了,说明ubifs文件系统就制作移植成功了......
********************************************************************************************************************************************************************
移植过程中遇到的问题及解决办法:
1.出现如下错误:
问题1:
UBI error: ubi_io_write: error -5 while writing 512 bytes to PEB 71:512, written 0 bytes
UBI warning: ubi_eba_write_leb: failed to write VID header to LEB 2147479551:0, PEB 71
UBI: try another PEB
UBI error: ubi_io_write: error -5 while writing 512 bytes to PEB 70:512, written 0 bytes
UBI warning: ubi_eba_write_leb: failed to write VID header to LEB 2147479551:0, PEB 70
UBI: try another PEB
UBI error: ubi_io_write: error -5 while writing 512 bytes to PEB 69:512, written 0 bytes
UBI warning: ubi_eba_write_leb: failed to write VID header to LEB 2147479551:0, PEB 69
UBI: try another PEB
UBI error: ubi_io_write: error -5 while writing 512 bytes to PEB 68:512, written 0 bytes
UBI warning: ubi_eba_write_leb: failed to write VID header to LEB 2147479551:0, PEB 68
UBI warning: ubi_ro_mode: switch to read-only mode
UBI error: autoresize: cannot auto-resize volume 0
UBI error: ubi_init: cannot attach mtd2
问题2:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[<c002d670>] (unwind_backtrace+0x0/0xf0) from [<c036966c>] (panic+0x58/0x18c)
[<c036966c>] (panic+0x58/0x18c) from [<c0008c90>] (mount_block_root+0x15c/0x210)
[<c0008c90>] (mount_block_root+0x15c/0x210) from [<c0008f98>] (prepare_namespace+0x8c/0x1b0)
[<c0008f98>] (prepare_namespace+0x8c/0x1b0) from [<c000894c>] (kernel_init+0xdc/0x110)
[<c000894c>] (kernel_init+0xdc/0x110) from [<c0028e80>] (kernel_thread_exit+0x0/0x8)
问题3:
VFS: Cannot open root device "ubi0:rootfs" or unknown-block(0,0)
Please append a correct "root=" boot option; here are the available partitions:
1f00 1024 mtdblock0 (driver?)
1f01 15360 mtdblock1 (driver?)
1f02 65536 mtdblock2 (driver?)
1f03 81920 mtdblock3 (driver?)
1f04 81920 mtdblock4 (driver?)
1f05 16384 mtdblock5 (driver?)
解决:问题1,3的解决方法是
linux内核中make menuconfig
Device Drivers --->
<*> Memory Technology Device (MTD) support --->
<*> NAND Device Support --->
[ ] Verify NAND page writes //不要选这个即可解决~
问题2的解决方法是:
由于nandflash中有坏块,之前设置命令nand write 100000 600000 中写的文件大小600000偏小,所以将写的大小设置大一点即可解决
注意:在擦除nandflash时,一定要是擦除整个分区的大小,我的内核分区大小是15M,所以应该是nand erase 100000 f00000 ,那个100000 表示内核分区的起始位置。(15M=1024x1024x15换算成十六进制是f00000)
***********************************************************************************************************************************************************************************