轉自:http://blog.163.com/dong_box/blog/static/26259778200956114858764/
根檔案系統製作(Busybox1.9.2)(2009-05-21 09:02:22)
1 建一個目錄rootfs用來裝檔案系統
2 # mkdir bin dev etc home lib mnt proc root sbin tmp usr var
# mkdir usr/bin usr/sbin
# mkdir mnt tmp var
# chmod 1777 tmp
# mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
# mkdir var/lib var/lock var/log var/run var/tmp
# chmod 1777 var/tmp
# mkdir home root boot
3 到系統 /dev 把所有的device打一個包,拷貝到 dev
下面(最省事的做法);或者使用mknod來自己建所需要的device,
舉例:
# mknod -m 600 dev/console c 5 1
# mknod -m 666 dev/null c 1 3
4 應用程式定製
標準的Linux發行版本具有功能種類比較多的應用程式,這些應用程式佔用的空間也很大,這對儲存容量空間有限的開發板來說就不是理想的選擇,在嵌入式開發過程中,經常用BusyBox來定製應用程式。BusyBox具有shell的功能,它能提供系統所需要的大部分工具,包括編輯工具、網路工具、模組載入工具、壓縮解壓縮工具、尋找工具、帳號密碼管理工具和進程相關工具等。目前BusyBox的最新版本是BusyBox-1.9.2版本,下載解壓,切換到BusyBox的
根目錄下,修改Makefile,找到ARCH和CROSS COMPILE修改如下:
ARCH ?= arm
CROSS_COMPILE ?=/usr/local/arm/3.4.1/bin/arm-linux-
5 修改編譯配置選項。
#make defconfig
#make menuconfig
在預設的選項前提之下,選項設定如下:
Build Options->
Build BusyBox as a static binary (no shared libs)
Force NOMMU build
Build shared libbusybox
Build with Large File Support (for accessing file>2GB)
如果選擇 Build BusyBox as a static binary (no shared libs) 方式進行編譯時間,所需的庫已經與程式靜態地連結在一起,這些程式不需要額外的庫就可以單獨運行,但是自己編寫的程式在檔案系統上運行必須採用靜態編譯,否則會報諸如:bin/sh: hello :not found的錯誤。
靜態編譯如:
arm-linux-gcc –static hello.c –o hello
如果選擇Build shared libbusybox方式進行編譯時間,要將交叉編譯的動態庫或符號連結複製到對應的目錄中,否則程式不能運行。同時在配置時應去掉Build shared libbusybox目錄下的兩項:如下
Build shared libbusybox->
Produce binary for each applet,linked against libbusybox
Produce additional busybox binary linked against libbusybox
同時去掉
Build with Large File Support (for accessing file>2GB)
否則編譯會報錯。
BusyBox Settings --->
Build Options ---> (採用靜態編譯)
[*] Build BusyBox as a static binary (no shared libs)
Install optin-->
[*] Don't use /usr //
Busybox Library Tuning --->
(2) MD5: Trade Bytes for Speed
[*] Faster /proc scanning code (+100 bytes)
[*] Support for /etc/networks
[*] Support for /etc/networks
[*] Additional editing keys
[*] vi-style line editing commands
[*] History saving
[*] Tab completion
[*] Username completion
[*] Fancy shell prompts
Linux Module Utilities --->
[ ] Support version 2.2.x to 2.4.x Linux kernels //不能選
[*] Support version 2.6.x Linux kernels
Linux System Utilities --->
[*] Support for the old /etc/mtab file //不確定
Miscellaneous Utilities --->
[*] devfs(obsolete) //不確定
[*] Use devfs names for all device(obsolete) //不確定
Shell --->
Choose your default shell(ash)-->
---ash //下面的選項全部選擇
//使用“空格”鍵選中。只有選中了ash,這樣產生的時候才會產生bin/sh檔案
//在linuxrc指令碼的頭一句:#!/bin/sh是由bin/sh來解釋執行的。
//不選中會報錯:can not run -bin/sh
#make
#make install
在busybox/_install 目錄下會產生我們需要的檔案。
修改_install/bin/busybox 的屬性。為4755
chmod 4755 ./_install/bin/busybox
必須要修改屬性,否則在busybox 中很多命令會受限
將編譯好的busybox拷貝到/bin下面。拷貝時帶上參數-arf或者-dpR。
(即將busybox/_install 目錄下的bin目錄和sbin目錄拷到根檔案系統目錄下)
除了busybox外,所有其他的命令都是他的link
/sbin下面也是busybox的link,
/usr/bin下面也是busybox的link,
/usr/sbin下面放著所有編譯完的可執行檔,具體就不多說了
7 非常重要之/lib,務必重視
/lib的庫其實就是進行busybox編譯的庫,即交叉編譯器的庫,我們這裡使用的是3.4.5(
位置 /usr/local/arm/gcc-3.4.5-glibc-2.3.2/arm-linux/bin/)。
# cd /usr/local/arm/gcc-3.4.5-glibc-2.3.2/arm-linux/bin/
# for file in libc libcrypt libdl libm libpthread libresolv libutil
> do
> cp $file-*.so rootfs/lib (複製到你做的檔案系統的/lib目錄下)
> cp -d $file.so.[*0-9] rootfs/lib
> done
# cp -d ld*.so* rootfs/lib
#cp libstdc++.so.6 libgcc_s.so.1 rootfs/lib
8 系統設定檔的建立
系統設定檔放在/etc目錄下
(1)profile檔案
#Set search library path
export LD_LIBRARY_PATH=/lib:/QTlib:$LD_LIBRARY_PATH#Set user path
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH
export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"
export QWS_MOUSE_PROTO="LinuxTP:/dev/h3600_tsraw"
export QWS_SIZE=320x240
alias ll='ls -l'
ln -s /dev/ts0 /dev/h3600_tsraw
(2)fstab檔案
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
(3)inittab檔案
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
(4)建立/etc/init.d檔案夾和rcS,在rcS中添加
#! /bin/sh
# 設定主機名稱,需要在etc 建立檔案host
./etc/host
hostname ${HOSTNAME}
# mount all filesystem defined in “fstab”
echo "# mount all..........."
/bin/mount -a
echo "# Starting mdev........."
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev –s
(5)host檔案
HOSTNAME=Hasotech
(6)建立mdev.conf檔案 (空檔案)
(7)複製主機/etc/下面的檔案passwd, group, shadow 檔案到/etc
# cp /etc/group .
# cp /etc/passwd .
# cp /etc/shadow .
修改passwd中使用者使用的shell名稱。FC6上預設的為bash,而vivi只支援ash。
root:x:0:0:root:/root:/bin/bash -->
root:x:0:0:root:/root:/bin/ash
(8)修改各檔案和檔案夾的許可權
# chmod 755 /rootfs/etc/init.d/rcS
# chmod 755 /rootfs/etc/host
9 yaffs檔案系統映像的製作
使用mkyaffsimg程式可以把一個目錄做成一個yaffs映像檔案,然後使用usb下載到
板子上。進入檔案系統目錄層,使用以下命令。
#mkyaffsimg rootfs rootfs.img
這樣就會在該目錄下產生rootfs.img映像檔案,下載到開發板運行即可。
10 cramfs檔案系統映像的製作(cramfs壓縮率比較高)
在FTP中下載cramfs-1.1.tar.gz,解壓到自己設定的目錄下,如:
tar xzvf cramfs-1.1.tar.gz –C /home/
進入產生有mkcramfs檔案的目錄下(一定要進入此目錄,否則會提示找不到該命令)
輸入命令:#./mkcramfs / rootfs rootfs.cramfs
在目前的目錄下即產生rootfs.cramfs映像檔案。到此Linux作業系統移植完畢。