嵌入式開發(fā)實戰(zhàn)5——LINUX的根文件系統(tǒng)之一基本環(huán)境的搭建和BUSYBOX編譯
正如上回說的一樣,回到我們的根本目的,LINUX的整體流程開發(fā),今天開始最后一大部分,即根文件系統(tǒng),LINUX和WIN有所不同,他的內(nèi)核和文件系統(tǒng)是分開的,當然還有UI,但這里不談那個,只談根文件系統(tǒng)。
這個東西很重要,目前做根文件系統(tǒng)的方法有很多,在這里只講比較流行的一種方式,即busybox,所以,第一件事是從網(wǎng)上DOWN這個源碼下來。
http://www.busybox.net/downloads/如果有什么變動大家可以自己去網(wǎng)上搜,這個很好找。包括各種開發(fā)板一般都會跟著一份兒的。說起來也是一個賣點不是。
在建立根文件系統(tǒng)前,首先要建立一些主要的文件目錄,因為LINUX沒有分區(qū)的概念,都是以文件來區(qū)分,所以一些必須的文件夾是提前得建立好的。
#!/bin/sh
echo "------Create rootfs dire ctons start...--------"
mkdir rootfs
cd rootfs
echo "--------Create root,dev....----------"
mkdir root dev etc boot tmp var sys proc lib mnt home
usr
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 600 dev/console c 5 1
mknod -m 600 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---------"
這里我們用友善的SHELL腳本,不過這里需要引起注意的是:
1、 你在WIN下把這個拷過去,直接在LINUX下執(zhí)行,(當然,你得chmod +x namefilescript)會出現(xiàn)“沒有那個文件或目錄”的錯誤,原因是WIN下的回車和換行是兩個字符,而在LINUX是一個\n,所以要么直接在LINUX中做,要么直接手敲。如果已經(jīng)在WIN拷進來了,那么可以用下面的方法進行替換:
sed -i 's/\r$//' shell_file_name.sh
或者見“嵌入式開發(fā)實戰(zhàn)4——內(nèi)核的編譯之十二觸摸屏的驅(qū)動”最后類似說明。2、 直接拷貝的話,在創(chuàng)建etc/rc.d這個文件夾時,當中有一個空格,所以雖然能創(chuàng)建成功,但是是錯誤的,會報一個“etc已經(jīng)存在”,同時把rc.d 創(chuàng)建在父目錄下。
3、 這個腳本還有一個問題,就是他在創(chuàng)建父目錄時,少了usr,(見上面紅色部分)所以下面在創(chuàng)建usr/bin目錄時,報無法創(chuàng)建,因為LINUX下的目錄是一層層的創(chuàng)建的。
4、 還有一個問題,如果你不使用ROOT用戶的話,可能最后創(chuàng)建mknod命令時,會報一個沒有權(quán)限操作。
然后就是把友善的LIB庫拷到創(chuàng)建的根文件系統(tǒng)目錄下:
cd /mnt/hgfs/share 說明:這里是進入到你相應(yīng)的目錄下
tar –zxvf root_qtopia.tg z –C /opt/studyarm 說明:你創(chuàng)建的根文件的父目錄
cp –rfd /opt/studyarm/root_qtopia/ lib/* /opt/studyarm/rootfs/lib/*
注意:最后一個*,應(yīng)該沒有。
然后就可以開始編譯busybox了,這里使用的版本是:busybox.1.13.3
Cd /home/fjf/rootfile
Tar –zxvf busybox.1.13.3 (-C /xx/xxx)
說明:后面的小括號是可以解壓到指定目錄下。
cd /home/fjf/rootfile/busybox-1.13.3
修改:
CROSS_COMPILE ?=arm-linux- //第164 行
ARCH ?=arm //第189 行
配置選項有幾中選擇,一種是使用默認的配置,這個基本就夠用了,二是使用友善提供的默認配置(fa_config(輸入命令“cp fa.config .config”可以調(diào)用該配置)),三是使用網(wǎng)上一些牛人的資料:
可以參考原文作者的如下步驟:
輸入make menuconfig 進行配置
(1)、Busybox Settings--->
General Configuration--->
[*] Show verbose applet usage messages
[*] Store applet usage messa ges in compressed form
[*] Support –install [-s] to install applet links at runtime
[*] Enable locale support(system needs locale for this to work)
[*] Support for –long-options
[*] Use the devpts filesystem for unix98 PTYs
[*] Support writing pidfiles
[*] Runtime SUID/SGID configur ation via /etc/busybox.config
[*] Suppress warning message if /e tc/busybox.conf is not readable
Build Options--->
[*] Build BusyBox as a static binary(no shared libs)
[*] Build with Large File Support(for accessing files>2GB)
Installation Options->
[]Don’t use /usr
Applets links (as soft-links) --->
(./_install) BusyBox installation prefix
Busybox Library Tuning --->
(6)Minimum password legth
(2)MD5:Trade Bytes for Speed
[*]Fsater /proc scanning code(+100bytes)
[*]Command line editing
(1024)Maximum length of input
[*] vi-style line editing commands
(15) History size
[*] History saving
[*] Tab completion
[*]Fancy shell prompts
(4) Copy buffer size ,in kilobytes
[*]Use ioctl names rather than hex values in error messages
[*]Support infiniband HW
(2)、Linux Module Utilities--->
(/lib/modules)Default directory containing modules
(modules.dep)Default name of modules.dep
[*] insmod
[*] rmmod
[*] lsmod
[*] modprobe
-----options common to multiple modutils
[ ] support version 2.2/2.4 Linux kernels
[*]Support tainted module checking with new kernels
[*]Support for module .aliases file
[*] support for modules.symbols file
(3)、在busybox 中配置對dev 下設(shè)備類型的支持
dev 的創(chuàng)建有三種方法:
手動創(chuàng)建:在制作根文件系統(tǒng)的時候,就在 dev 目錄下創(chuàng)建好要使用的設(shè)備文件,系統(tǒng)
掛接根文件系統(tǒng)后,就可以使用dev 目錄下的設(shè)備文件了。
使用devfs文件系統(tǒng):這種方法已經(jīng)過時,具有不確定的設(shè)備映射、沒有足夠的主/ 次設(shè)
備號、devfs消耗大量的內(nèi)存。
udev :它是個用戶程序,能根據(jù)系統(tǒng)中硬件設(shè)備的狀態(tài)動態(tài)的更新設(shè)備文件,包括設(shè)備
文件的創(chuàng)建、刪除等。它的操作相對復(fù)雜,但靈活性很高
mdev是busybox 自帶的一個簡化版的 udev ,適合于嵌入式的應(yīng)用埸合。其具有使用簡
單的特點。它的作用,就是在系統(tǒng)啟動和熱插拔或動態(tài)加載驅(qū)動程序時,自動產(chǎn)生驅(qū)動程序所
需的節(jié)點文件。在以 busybox 為基礎(chǔ)構(gòu)建嵌入式linux 的根文件系統(tǒng)時,使用它是最優(yōu)的選擇。
下面的選項將增加對mdev的支持。
Linux System Utilities --->
[*]Support /etc/mdev.conf
[*]Support command execution at device addition/removal
最后當然是編譯busybox
編譯busybox 到指定目錄:
cd /home/fjf/rootfile/busybox-1.13.3
make CONFIG_PREFIX=/home/fjf/rootfile/rootfs install
在rootfs 目錄下會生成目錄bin、sbin 、usr和文件 linuxrc 的內(nèi)容。
前面的腳本創(chuàng)建了這幾個目錄對這個沒有影響,大家不要擔心。
萬里長征,第一步就要完成了,努力?。?!