linux根檔案系統製作

來源:互聯網
上載者:User

轉自: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作業系統移植完畢。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.