制作跟文件系统ubifs

1150阅读 0评论2014-12-21 644924073
分类:LINUX

分区表:
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 20MB"
0x000006000000-0x000008800000 : "mtdblock5 yaffs2 40MB"
0x000008800000-0x00000b000000 : "mtdblock6 ubifs 40MB"
0x00000b000000-0x00000e200000 : "mtdblock7 apps 50MB"
0x00000e200000-0x000011400000 : "mtdblock8 data 50MB"

创建设备节点:
[lingyun@localhost dev]$ sudo mknod mtdblock0 b 31 0
[lingyun@localhost dev]$ sudo mknod mtdblock1 b 31 1
[lingyun@localhost dev]$ sudo mknod mtdblock2 b 31 2
[lingyun@localhost dev]$ sudo mknod mtdblock3 b 31 3
[lingyun@localhost dev]$ sudo mknod mtdblock4 b 31 4
[lingyun@localhost dev]$ sudo mknod mtdblock5 b 31 5
[lingyun@localhost dev]$ sudo mknod mtdblock6 b 31 6
[lingyun@localhost dev]$ sudo mknod mtdblock7 b 31 7
[lingyun@localhost dev]$ sudo mknod mtdblock8 b 31 8

内核支持
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)
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)    



制作,用了一个脚本
[lingyun@localhost caijie]$ ls
backup  build_ubifs.sh  driver.tar.bz2  madplay  makefile_sample  mtd_tools  mylinux  rootfs  tools
[lingyun@localhost caijie]$ sh build_ubifs.sh

Generating ubifs-s3c2440.rootfs file by mkfs.ubifs...
+ sudo /bin/mkfs.ubifs -x lzo -m 2048 -e 129024 -c 292 -r rootfs -o ubifs-s3c2440.img
+ set +x

Generating configuration file...

+ sudo /bin/ubinize -o ubifs-s3c2440.rootfs -m 2048 -p 131072 -s 512 -O 512 rootfs_ubinize.cfg
+ set +x
[lingyun@localhost caijie]$ ls
backup  build_ubifs.sh  driver.tar.bz2  madplay  makefile_sample  mtd_tools  mylinux  rootfs  tools  ubifs-s3c2440.rootfs
[lingyun@localhost caijie]$ cp ubifs-s3c2440.rootfs /tftp/


u-boot中设置的变量
ubi_fs=tftp 30008000 ubifs-s3c2440.rootfs;nand erase 8800000 2800000;nand write 30008000 8800000 2700000
bootcmd=run bootcmd_rootfs
bootcmd_rootfs=nand read 30008000 100000 f00000;bootm 30008000
bootargs=console=ttyS0,115200 mem=64M ubi.mtd=6 root=ubi0:rootfs rootwait rootfstype=ubifs rw

系统启动后看ubifs是否移植成功
[CJ@MINI2440 ~]mount
rootfs on / type rootfs (rw)
ubi0:rootfs on / type ubifs (rw,relatime)
proc on /proc type proc (rw,relatime)
tmpfs on /dev type tmpfs (rw,relatime)
ramfs on /tmp type ramfs (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,mode=600)




附:
#!/bin/sh
#===========================================
#  Shell script body start here            +
#===========================================

CPU=s3c2440
rootfs_dir=rootfs
partition_sizeM=`expr 40 \- 1 `
image_name=ubifs-${CPU}.rootfs

if [ ! -d $rootfs_dir ] ; then
   echo "Miss rootfs source code tree \"$rootfs_dir\" exit..."
   exit;
fi

#Default setting by UBIFS
sub_page_size=512
vid_head_offset=512

#-m, minimum I/O unit size, it's 2K(the Page size) on K9F2G08, refer to "UBI: smallest flash I/O unit:    2048"
page_size_in_bytes=2048
#echo "Page size [$page_size_in_bytes] bytes."

#It's 64 pages per block on K9F2G08
pages_per_block=64
block_size_in_bytes=`expr $page_size_in_bytes \* $pages_per_block`
#echo "[$pages_per_block] pages per block and [$block_size_in_bytes] bytes"

#It's 2048 blocks on K9F2G08
blocks_per_device=2048
#echo "Blocks per device  [$blocks_per_device]"

#-e, logical erase block size, fixed on K9F2G08, refer to u-boot information "UBI: logical eraseblock size:  129024 bytes"
# logical erase block size is physical erase block size minus 1 page for UBI
logical_pages_per_block=`expr $pages_per_block - 1`
logical_erase_block_size=`expr $page_size_in_bytes \* $logical_pages_per_block`
#echo "Logical erase block size:  [$logical_erase_block_size] bytes."

# wear_level_reserved_blocks is 1% of total blcoks per device
wear_level_reserved_blocks=`expr $blocks_per_device / 100`
#echo "Reserved blocks for wear level [$wear_level_reserved_blocks]"

#The rootfs partition size in bytes
partition_size_in_bytes=`expr $partition_sizeM \* 1024 \* 1024`
partition_physical_blocks=`expr $partition_size_in_bytes / $block_size_in_bytes`
#echo "Partition size [$partition_size_in_bytes] bytes and [$partition_physical_blocks] blocks."

#Logical blocks on a partition = physical blocks on a partitiion - reserved for wear level
patition_logical_blocks=`expr $partition_physical_blocks - $wear_level_reserved_blocks`
#echo "Logical blocks in a partition [$patition_logical_blocks]"

#File-system volume = Logical blocks in a partition * Logical erase block size
fs_vol_size=`expr $patition_logical_blocks \* $logical_erase_block_size`
#echo "File-system volume [$fs_vol_size] bytes."

config_file=rootfs_ubinize.cfg
image_tmp=ubifs-${CPU}.img

echo ""
echo "Generating $image_name file by mkfs.ubifs..."
set -x
sudo /bin/mkfs.ubifs -x lzo -m $page_size_in_bytes -e $logical_erase_block_size -c $patition_logical_blocks -r $rootfs_dir -o $image_tmp
set +x
echo
echo "Generating configuration file..."
echo "[ubifs-volume]" > $config_file
echo "mode=ubi" >> $config_file
echo "image=$image_tmp" >> $config_file
echo "vol_id=0" >> $config_file
echo "vol_size=$fs_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 /bin/ubinize -o $image_name -m $page_size_in_bytes -p $block_size_in_bytes -s $sub_page_size -O $vid_head_offset $config_file
set +x
sudo rm -f $image_tmp $config_file
上一篇:制作根文件系统ramdisk
下一篇:移植根文件系统jffs2