mini6410根檔案系統的製作

來源:互聯網
上載者:User

 1.開始的話

        友善之臂沒有給出詳細的mini6410和tiny6410開發板的根檔案系統的製作方法及步驟,於是自己根據《mini2440 Linux移植開發實戰指南》做了一遍MINI6410的根檔案系統。本次製作過程中使用的工具及源碼包均來自於友善的官方光碟片,其中有:

     (1)核心:linux2.6.38-20111116.tgz

     (2)根檔案系統:rootfs_qtopia_qt4-20111103.tgz

     (3)busybox:busybox-1.17.2-20101120.tgz

     (4)交叉編譯器:arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz

     (5)檔案系統鏡像製作工具:mktools-20110720.tar.gz

2.搭建開發環境

    開發環境(主要指linux、虛擬機器的安裝和交叉編譯環境的搭建)完全按照mini6410使用者手冊4.3節操作,在此不再贅述。

3.根檔案系統的目錄說明

    根檔案系統是Linux啟動的時候使用的第一個檔案系統,沒有它系統將無法正常的啟動,然而在這個根檔案系統中又包含了一系列的目錄,接下來對這些目錄做一個簡單的介紹。

4.建立根檔案系統的目錄

進入到自己要放置檔案系統的目錄,採用《mini2440 Linux移植開發實戰指南》,新根檔案系統目錄的指令檔create_rootfs_bash,使用命令chmod +x create_rootfs_bash  ,改變檔案的可執行許可權,執行“./create_rootfs_bash ”運行指令碼,就完成了根檔案系統目錄的建立。指令碼create_rootfs_bash檔案的內容為:

#!/bin/shecho "------Create rootfs directons start...--------"mkdir rootfscd rootfsecho "--------Create root,dev....----------"mkdir root dev etc boot tmp var sys proc lib usr mnt homemkdir etc/init.d etc/rc.d etc/sysconfigmkdir usr/sbin usr/bin usr/lib usr/modulesecho "make node in dev/console dev/null"mknod -m 600 dev/console c 5 1mknod -m 600 dev/null c 1 3mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/tempmkdir var/lib var/lock var/run var/tmpchmod 1777 tmpchmod 1777 var/tmpecho "-------make direction done---------"

在指令碼中改變了tmp 目錄的使用權,讓它開啟sticky 位,為tmp 目錄的使用權開啟此位,可確保tmp 目錄底下建立的檔案,只有建立它的使用者有權刪除。儘管嵌入式系統多半是單使用者,不過有些嵌入式應用不一定用root 的許可權來執行,因此需要遵照根檔案系統許可權位的基本規定來設計。

5.建立動態連結程式庫(即lib目錄)

動態連結程式庫直接用友善之臂的,先解壓友善之臂的根檔案包,拷貝lib的內容到建立的根檔案目錄lib內。

cp -rfd /opt/FriendlyARM/mini6410/rootfs_qtopia_qt4 /opt/FriendlyARM/mini6410/rootfs/lib

6.交叉編譯busybox(即根檔案系統內bin,sbin等目錄)

Busybox 是一個遵循GPL v2 協議的開源項目,它在編寫過程總對檔案大小進行最佳化,並考慮了系統資源有限(比如記憶體等)的情況,使用Busybox 可以自動產生根檔案系統所需的bin、sbin、usr 目錄和linuxrc 檔案。具體介紹可以參考韋東山完全手冊的346頁。
   (1)、解壓busybox
         cd /opt/FriendlyARM
         tar –zxvf busybox-1.17.2-20101120.tgz  
    (2)、進入源碼,修改Makefile 檔案:(這個地方是很重要的一步,必須做,有的教程或者文章參考核心的配置與編譯,即在make menuconfig和make後面添加ARCH、CROSS_COMPILE等,而對此不做修改,將可能會導致“request_module: runaway   loop modprobe binfmt-464c”等錯誤出現)
      cd /opt/studyarm/busybox-1.17.2
      修改:
      CROSS_COMPILE ?=arm-linux- //第164 行
      ARCH ?=arm //第189 行
   (3)、配置busybox
     提示:友善之臂已經在光碟片中提供了busybox 的原始碼包,在光碟片\linux 目錄中,busybox-1.17.2-20101120.tgz解壓后里麵包含了友善之臂提供的預設設定檔:fa_config     (輸入命令“cp fa.config .config”可以調用該配置),一般使用者直接使用預設檔案就可以了,這樣產生的busybox 和root_qtopia_qt4 中的是完全一致的。但為了對它的配置瞭解       更多一些,可以參考 《mini2440 Linux移植開發實戰指南》 的如下步驟:

    輸入 make menuconfig進行配置

    下面的配置和busybox1.17.2的配置基本一樣,部分地方不太一樣。

Busybox Settings--->             General Configuration--->                            [*] Show verbose applet usage messages //這個是現實程式的詳細資料吧                            [*] Store applet usage messages 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 configuration via /etc/busybox.config                            [*]  Suppress warning message if /etc/busybox.conf is not readable//這個配置是如果/etc/busybox.conf is是不可讀的話則會給使用者提示警告資訊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                     //選上它防止把編譯進系統中的/usr下以便破壞宿主系統                            Applets links (as soft-links) --->  //安裝配置 使用軟連結                                   (./_install) BusyBox installation prefixBusybox 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
Linux Module Utilities--->          //這個就是lib/modules的設定                    (/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

7.dev裝置檔案的製作

 裝置檔案較多,而且比較繁雜,因此其製作一般包括兩個部分:靜態建立裝置檔案和使用mdev建立裝置檔案

 (1).靜態建立裝置檔案

  其實在剛開始製作檔案系統的目錄裡已經靜態製作建立了兩個必須的裝置的裝置檔案:console和null,核心在引導時這兩個裝置節點必須存在。

mknod -m 600 dev/console  c 5 1mknod -m 600 dev/null     c 1 3

 (2).用mdev建立裝置檔案

   udev:它是個使用者程式,能根據系統中硬體裝置的狀態動態更新裝置檔案,包括裝置檔案的建立、刪除等。它的操作相對複雜,但靈活性很高。

   mdev是busybox內建的一個簡化版的udev,適合於嵌入式的應用埸合。其具有使用簡單的特點。它的作用,就是在系統啟動和熱插拔或動態載入驅動程式時,自動產生驅動     程式所需的節點檔案。在以busybox為基礎構建嵌入式linux的根檔案系統時,使用它是最優的選擇。在busybox的配置中,下面的選項將增加對mdev的支援。

Linux System Utilities  --->                         [*]Support /etc/mdev.conf                   [*]Support command execution at device addition/removal

8.編譯、安裝busybox

在6,7兩步的配置結束後,就可以編譯並安裝busybox。

編譯:make ARCH=arm CROSS_COMPILE=arm-linux,其實僅執行make即可,我在這裡添加了ARCH和CROSS_COMPILE,其實沒什麼作用,只是為了保險。因為如果編譯的不是ARM版的busybox,系統時無法啟動並執行。

安裝:make install CONFIG_PREFIX=/opt/FriendlyARM/mini6410/rootfs/。CONFIG_PREFIX中安裝的位置也可以在配置的時候設定,具體位置為:

Busybox Settings->    Installation Options->        (/***/***)Busybox Installation Prefix

9.編譯、安裝核心模組。

 在第5步中,安裝動態連結程式庫後,lib/modules目錄下已經有核心模組了,但是這個核心模組和我採用的核心不是一個版本,因此重新編譯安裝。

進入核心的目錄,在編譯安裝核心模組之前必須保證核心已經正確無誤的配置及編譯過一次。在這裡假設還沒有編譯過。

(1)我們要使得Linux-2.6.38的預設目標平台成為ARM 的平台。
修改總目錄下的Makefile

export KBUILD_BUILDHOST := $(SUBARCH)ARCH ?= $(SUBARCH)CROSS_COMPILE ?=

改為

export KBUILD_BUILDHOST := $(SUBARCH)ARCH ?= armCROSS_COMPILE ?= arm-linux-

其中,ARCH 是指定目標平台為arm,CROSS_COMPILE 是指定交叉編譯器,這裡指定的是系統預設的交叉編譯器,如要使用其它的,則要把編譯器的全路徑在這裡寫出。

(2)配置、編譯核心模組

在此不具體說明怎麼配置,可以將核心裡友善內建的設定檔拷貝。然後執行:

make menuconfigmake zImage

(3)編譯核心模組

make modules ARCH=arm CROSS_COMPILE=arm-linux-

(4)安裝核心模組

make modules_install ARCH=arm INSTALL_MOD_PATH=/opt/FriendlyARM/mini6410/rootfs

10.建立etc目錄下的設定檔<這些配置資訊都是一些基本不需要改動的東西所以直接從主機或者友善內建檔案系統拷貝>
a、建立etc/mdev.conf檔案,內容為空白。
b、拷貝主機etc目錄下的passwd、group、shadow檔案到rootfs/etc目錄下。
c、etc/sysconfig目錄下建立檔案HOSTNAME,內容寫自己喜歡的名字。
d、etc/inittab檔案:

#etc/inittab::sysinit:/etc/init.d/rcS::askfirst:-/bin/sh::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a –r

e、etc/init.d/rcS檔案:

#!/bin/shPATH=/sbin:/bin:/usr/sbin:/usr/binrunlevel=Sprevlevel=Numask 022export PATH runlevel prevlevelecho "----------munt all----------------"mount -aecho /sbin/mdev>/proc/sys/kernel/hotplugmdev -secho "***********************************************echo "****************Studying ARM*********************"echo "Kernel version:linux-2.6.38"echo "Student"echo "Date:2012.05.08"echo "***********************************************"/bin/hostname -F /etc/sysconfig/HOSTNAME

使用以下命令改變rcS的執行許可權:

Chmod +x rcS

f、etc/fstab檔案:

#device    mount-point     type     option     dump   fsck   orderproc          /proc        proc     defaults    0        0none          /tmp        ramfs    defaults    0        0sysfs         /sys          sysfs    defaults    0        0mdev          /dev        ramfs    defaults    0        0

g、 etc/profile檔案:

#Ash profile#vim:syntax=sh#No core file by defaults#ulimit -S -c 0>/dev/null 2>&1USER="id -un"LOGNAME=$USERPS1='[\u@\h=W]#'PATH=$PATHHOSTNAME='/bin/hostname'export USER LOGNAME PS1 PATH

到此,根檔案系統的構建就完成了,下面將其製作成ubi鏡像檔案並燒寫。

11.製作根檔案系統鏡像
執行以下命令:

tar zxvf mktools-20110720.tar.gz -C /

注意:C為大寫,C後面有個空格,C是改變解壓安裝目錄的意思。
這將會在/usr/sbin目錄下建立產生相應的工具集

然後執行

mkubimage-slc rootfs rootfs.ubi

將ubi鏡像檔案燒寫至開發板運行即可。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.