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 目錄下建立產生相應的工具集。