本文主要的是对ubi文件系统进行制作,使用的主要工具是busybox。
构建 ubi 文件系统
一、创建根文件系统所需文件
(1)# tar -xjf busybox-1.20.2.tar.bz2
# cd busybox-1.20.2
# make menuconfig
在 Busybox Settings-->Build Options-->配置如下:
指定编译器为:arm-linux-选择 Save Configuration to an Alternate File,确定存放在.config 中。
再选择 Exit 退出
#make ARCH=arm CROSS_COMPILE=arm-linux- install
(2)然后修改_install/bin/busybox 权限:
chmod 4755 _install/bin/busybox
_install 是 busybox 的安装默认目录,在 busybox 源码的根目录下。
(3)进入到_install 目录创建 linux 需要的一些目录:
mkdir -p dev etc home lib mnt proc root sys tmp usr var/lib/misc
var/lock var/log var/run var/tmp
并修改权限:
chmod 1777 tmp
chmod 1777 var/tmp
(4)在 dev 下创建 console 和 null 设备:
mknod -m 660 console c 5 1
mknod -m 660 null c 1 3
mknod -m 660 ttySAC0 c 204 64
mknod -m 660 ttySAC1 c 204 65
mknod -m 660 ttySAC2 c 204 66
(5)将交叉编译工具里的所有库文件拷贝到 busybox 安装目录_intsll/lib 下
#cp /usr/local/arm/crosstool-ng/crosstool_out/arm-unknown-linuxgnueabi/lib/* ./lib/ -fr
(6)在_install/etc 下创建一些配置文件
<1>fstab,内容如下:
# /etc/fstab: static file system information.
#
#
#
# file system mount type options dump pass
#for mdev
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
#make sure /dev /tmp /var are tmpfs(tmpfs use ram as media) thus
can be r/w
tmpfs /tmp tmpfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
tmpfs /var tmpfs defaults 0 0
#usbfs /proc/bus/usb usbfs defaults 0 0
<2>inittab,内容如下:
# see busybox/examples/inittab
# Boot-time system configuration/initialization script.
# This is run first except when booting in single-user mode.
::sysinit:/etc/init.d/rcS
#Start an "askfirst" shell on the console (whatever that may be)
#use respawn instead askfirst to make sure console always active
::respawn:-bin/sh
# Stuff to do when restarting the init process
::restart:/sbin/init
# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
<3>init.d/rcS,init.d 是目录,rcS 是文件,内容如下:
#!/bin/sh
#add setting here for auto start program
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
#See docs/mdev.txt
#mount all fs in fstab,proc and sysfs are must for mdev
mount -a
#create device nodes
echo /sbin/mdev > /proc/sys/kernel/hotplug
#seed all device nodes
mdev -s
#create pts directory for remote login such as SSH and telnet
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
if [ -f /etc/hostname ]; then
/bin/hostname -F /etc/hostname
fi
if [ -e /sys/class/net/eth0 ]; then
ifconfig eth0 192.168.1.15
fi
echo "etc init.d rcS done"
<4>更改 rcS 和 inittab 的权限为 777:
chmod 777 init.d/rcS
chmod 777 inittab
二、制作 ubifs 文件系统
(1)由 uboot 启动 linux 内核时,minicom 终端打印信息如下
[ 3.605000] UBI: physical eraseblock size: 16384 bytes (16 KiB)
[ 3.610000] UBI: logical eraseblock size: 15872 bytes
[ 3.615000] UBI: smallest flash I/O unit: 512
[ 3.620000] UBI: sub-page size: 256
[ 3.625000] UBI: VID header offset: 256 (aligned 256)
[ 3.630000] UBI: data offset: 512
[ 4.380000] UBI: attached mtd2 to ubi0
[ 4.385000] UBI: MTD device name: "root"
[ 4.390000] UBI: MTD device size: 60 MiB
[ 4.395000] UBI: number of good PEBs: 3840
[ 4.400000] UBI: number of bad PEBs: 0
[ 4.405000] UBI: max. allowed volumes: 92
[ 4.405000] UBI: wear-leveling threshold: 4096
[ 4.410000] UBI: number of internal volumes: 1
[ 4.415000] UBI: number of user volumes: 1
[ 4.420000] UBI: available PEBs: 0
[ 4.425000] UBI: total number of reserved PEBs: 3840
(2)制作 mkfs.ubifs,首先进入 busybox 源码包的根目录下。
#apt-get install mtd-utils //不安装的话无法使用 mkfs.ubifs
#mkfs.ubifs -r ./_install/ -m 512 -e 15872 -c 3840 -o ubifs.img
//说明:512 与 smallest flash I/O unit 对应,15872 与 logical eraseblock size 对
应,3840 与 total number of reserved PEBs 对应。
#gedit ubinize.cfg
添加如下内容
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_size=60MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
#ubinize -o ubi.img -m 512 -p 16KiB -s 256 ubinize.cfg
//说明:512 与 smallest flash I/O unit 对应,16KiB 与 physical eraseblock size 对
应,256 与 sub-page size 对应。
(3)看到生成 ubifs.img 说明成功了,然后烧写文件系统,测试文件系统。