Ubifs制作文件系统
(1).主机环境:ubuntu 12.04
(2).集成开发环境:vim
(3).编译环境:arm-linux-gcc 4.4.3
(4).开发板:mini2440
(5).u-boot版本:u-boot-2009.08
(6).内核版本:linux-2.6.32.2
(7).所需包: busybox-1.17.2-20101120.tgz rootfs_qtopia_qt4-20111212.tgz linux-2.6.32.2.tar mktools.tar.gz
busybox-1.17.2-20101120.tgz下载地址:
http://download.csdn.net/detail/taozi343805436/4576011
mktools.tar.gz下载地址:
http://download.csdn.net/detail/taozi343805436/4576014
1.获得busybox包源代码
(1) 新建目录作为文件系统制作的目录
root@ubuntu:/home/hero# mkdir makeubifs
(2)把获得的busybox包,linux内核包mv到makeubifs目录下:
root@ubuntu:/home/hero/makeubifs# ls
busybox-1.17.2-20101120.tgz linux-2.6.32.2
2.根文件系统目录说明
嵌入式LINUX中都需要构建根文件系统,构建根文件系统的规则在FHS文档中,下面是根文件系统顶层目录。
目录 内容
bin 存放所有用户都可以使用的、基本的命令。
sbin 存放的是基本的系统命令,它们用于启动系统、修复系统等。
Usr 里面存放的是共享、只读的程序和数据。
proc 这是个空目录,常作为proc 文件系统的挂载点。
dev 该目录存放设备文件和其它特殊文件。
etc 存放系统配置文件,包括启动文件。
lib 存放共享库和可加载块(即驱动程序),共享库用于启动系统、运行根文件系统中的可执行程序
boot 引导加载程序使用的静态文件。
home 用户主目录,包括供服务账号锁使用的主目录,如FTP。
mnt 用于临时挂接某个文件系统的挂接点,通常是空目录。也可以在里面创建空的子目录。
opt 给主机额外安装软件所摆放的目录。
root root 用户的主目录
tmp 存放临时文件,通常是空目录。
var 存放可变的数据,如日志等。
3.创建系统目录
(1)在内核目录相同的目录下创建一个目录myrootfs
root@ubuntu:/home/hero/makeubifs# ls
busybox-1.17.2-20101120.tgz linux-2.6.32.2 myrootfs
(2)进入目录myrootfs下,新建一个建立根文件系统目录的脚本文件mkrootfs
root@ubuntu:/home/hero/makeubifs# cd myrootfs/
root@ubuntu:/home/hero/makeubifs/myrootfs# vim mkrootfs
编辑脚本文件:
#!/bin/sh
echo "------Create rootfs directons start...--------"
mkdir rootfs
cd rootfs
echo "--------Create root,dev....----------"
mkdir bin boot dev etc home lib mnt proc root sbin sys tmp usr var www
mkdir etc/init.d etc/rc.d etc/sysconfig
mkdir usr/sbin usr/bin usr/lib usr/modules
echo "make node in dev/console dev/null"
mknod -m 666 dev/console c 5 1
mknod -m 666 dev/null c 1 3
mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
mkdir var/lib var/lock var/run var/tmp
chmod 1777 tmp
chmod 1777 var/tmp
echo "-------make direction done---------"
保存退出,修改权限,执行脚本。
root@ubuntu:/home/hero/makeubifs/myrootfs# chmod 777 mkrootfs
root@ubuntu:/home/hero/makeubifs/myrootfs#ux-2.6.32.2# make modules ./mkrootfs
------Create rootfs directons start...--------
--------Create root,dev....----------
make node in dev/console dev/null
-------make direction done---------
这样就完成了根文件系统的目录创建。
4.编译并安装内核模块
(1)进入linux内核目录下,修改Makefile,大概在182行
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= arm
CROSS_COMPILE ?=arm-linux-
然后执行编译make modules,如果发生错误(触摸屏问题)可以运行:
root@ubuntu:/home/hero/makeubifs/linux-2.6.32.2# cp arch/arm/configs/s3c2410_defconfig .config
等到编译完成后,安装编译好的模块:
root@ubuntu:/home/hero/makeubifs/linux-2.6.32.2# make modules_install ARCH=arm INSTALL_MOD_PATH=/home/hero/makeubifs/myrootfs/rootfs/
(2)建立动态连接库
解压获得文件rootfs_qtopia_qt4,拷贝其lib 的内容到新建的根文件目录lib 内
root@ubuntu:/home/hero/makeubifs/rootfs_qtopia_qt4# cp -a lib/* /home/hero/makeubifs/myrootfs/rootfs/lib/
5,交叉编译bosybox
bosybox 是一个遵循GPL v2 协议的开源项目,它在编写过程总对文件大小进行优化,并考虑了系统资源有限(比如内存等)的情况,使用Busybox 可以自动生成根文件系统所需的bin、sbin、usr 目录和linuxrc 文件。
(1)获得软件包bosybox,并解压
root@ubuntu:/home/hero/makeubifs# ls
busybox-1.17.2-20101120.tgz linux-2.6.32.2 myrootfs rootfs_qtopia_qt4
root@ubuntu:/home/hero/makeubifs# tar -zxf busybox-1.17.2-20101120.tgz
(2)进入bosybox的顶层目录,修改Makefile
在164行:CROSS_COMPILE ?= arm-linux-
在190行:ARCH ?=arm
(3)编译配置
在busybox顶层目录下执行:make menuconfig
1.Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs) [ ] Force NOMMU build (NEW)
[*] Build with Large File Support (for accessing files > 2 GB) (NEW)
(arm-linux-) Cross Compiler prefix
() Additional CFLAGS (NEW)
2. Busybox Settings --->
Installation Options --->
[*] Don't use /usr
Applets links (as soft-links) --->
(/home/hero/makeubifs/myrootfs/rootfs) BusyBox installation prefix
3.Busybox Library Tuning --->
[*] Support for /etc/networks
[*] Command line editing
(1024) Maximum length of input
[*] vi-style line editing commands
(15) History size
[*] History saving
[*] Tab completion
[*] Username completion
[*] Fancy shell prompts
保存退出,编译bosybox。
root@ubuntu:/home/hero/makeubifs/busybox-1.17.2# make CONFIG_PREFIX=/home/hero/makeubifs/myrootfs/rootfs install
在rootfs目录下多了一个linuxrc目录。
6.建立etc目录下的配置文件
(1)建立/etc/group系统用户组配置文件,内容如下:
root:*:0:
daemon:*:1:
bin:*:2:
sys:*:3:
adm:*:4:
tty:*:5:
disk:*:6:
lp:*:7:lp
mail:*:8:
news:*:9:
u p:*:10:
proxy:*:13:
kmem:*:15:
dialout:*:20:
fax:*:21:
voice:*:22:
cdrom:*:24:
floppy:*:25:
tape:*:26:
so:*:27:
aio:*:29:
ppp:x:99:
500:x:500:plg
501:x:501:fa
(2)建立passwd系统密码文件
root::0:0:root:/:/bin/sh
ftp::14:50:FTP User:/var/ftp:
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
nobody:*:99:99:Nobody:/:
sky::502:502:Linux User,,,:/home/sky:/bin/sh
root@ubuntu:/home/hero/makeubifs/myrootfs/rootfs/etc# ls
group init.d passwd rc.d sysconfig
(3)在etc/sysconfig 目录下新建主机文件名HOSTNAME,内容为"hello"
root@ubuntu:/home/hero/makeubifs/myrootfs/rootfs/etc/sysconfig# cat >>HOSTNAME
hello
^C
(4)新建etc/inittab 系统init进程配置文件
#etc/inittab
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a –r
修改文件的可执行权限:
root@ubuntu:/home/hero/makeubifs/myrootfs/rootfs/etc# chmod 777 inittab
(5)新建etc/init.d/rcS系统启动加载项文件
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S//运行的级别
prevlevel=N
umask 022//文件夹的掩码
export PATH runlevel prevlevel
echo "----------munt all----------------"
mount -a//挂载/etc/fstab/文件指定的所有的文件系统
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s
echo "***********************************************"
echo "*******booting to mini2440 ***************"
echo "Kernel version:linux-2.6.32.2"
echo "Date:2012.9.17"
echo "***********************************************"
/bin/hostname -F /etc/sysconfig/HOSTNAME
修改它的权限:root@ubuntu:/home/hero/makeubifs/myrootfs/rootfs/etc# chmod 777 init.d/rcS
(6)新建etc/fstab 系统挂载文件系统列表文件,将下面内容复制并粘贴其中:
#device mount-point type option dump fsck order
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
mdev /dev ramfs defaults 0 0
(7)新建etc/profile用户环境配置文件,将下面内容复制并粘贴其中:
#Ash profile
#vim:syntax=sh
#No core file by defaults
#ulimit -S -c 0>/dev/null 2>&1
USER="id -un"
LOGNAME=$USER
PS1='[\u@\h \W]\$'
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH
修改环境变量PS1(命令行提示符),可以使用vi编辑/etc/profile文件,在最后加上:
export PS1='[\u@\h \W]\$ '
即可,其中\u显示当前用户账号,\h显示当前主机名,\W显示当前路径,\$显示'$'符号
\W 代替 \w 就可以实现绝对路径到相对路径的转换
(8) 建立etc/mdev.conf (mdev设备配置文件)、 net.conf (网络配置文件件),mime.types: MIME(Multipurpose Internet Mail Extensions) 内容均为空。
root@ubuntu:/home/hero/makeubifs/myrootfs/rootfs/etc# vim mdev.confroot@ubuntu:/home/hero/makeubifs/myrootfs/rootfs/etc# vim net.confroot@ubuntu:/home/hero/makeubifs/myrootfs/rootfs/etc# vim mine.types
(9) 建立boa WEB服务器文件配置文件
在etc/boa目录,并在boa目录中建立boa.conf文件,内容为空。
root@ubuntu:/home/hero/makeubifs/myrootfs/rootfs/etc# mkdir boa
root@ubuntu:/home/hero/makeubifs/myrootfs/rootfs/etc# vim boa/boa.conf
(10)先建立etc/rc.d/init.d目录
root@ubuntu:/home/hero/makeubifs/myrootfs/rootfs/etc/rc.d# mkdir init.d
root@ubuntu:/home/hero/makeubifs/myrootfs/rootfs/etc/rc.d# ls
init.d
然后建立etc/rc.d/init.d/httpd文件
#!/bin/sh
base=boa
# See how we were called.
case "$1" in
start)
/usr/sbin/$base
;;
stop)
pid=`/bin/pidof $base`
if [ -n "$pid" ]; then
kill -9 $pid
fi
;;
esac
exit 0
(11)新建etc/resolv.conf,DNS配置文件,存放访问外网时需要DNS 的信息,内容如下:
nameserver 61.144.56.100
(12)在/home/sky目录,与etc目录passwd文件中的sky相对应
mkdir home/sky
7.制作 UBIFS 格式文件系统映像
通过以上的工作我们现在得到了目录rootfs
#mkubimage-mlc2 rootfs rootfs.ubi将把rootfs目录压制为 UBIFS 格式的 rootfs.ubi 映像文件,它适用于块页组织结构为“1 Page= 8K Byte,1 Block=1M”的 MLC2 Nand Flash,然后可以把 rootfs.ubi文件系统烧写到开发板。
root@ubuntu:/home/hero/makeubifs/myrootfs# mkubimage-mlc2 rootfs rootfs.ubi
Please wait...
Succeed!
Note: mkubimage is designed by FriendlyARM(www.arm9.net)
root@ubuntu:/home/hero/makeubifs/myrootfs# ls
mkrootfs rootfs rootfs.ubi
root@ubuntu:/home/hero/makeubifs/myrootfs#
8.构建 mkubimage-mlc2
mktools.tar.gz –C /
将会在/usr/sbin 目录下创建生成相应的工具集。