久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久


嵌入式文件系統構建

分享到:
           

    Linux支(zhi)持多(duo)種(zhong)文(wen)(wen)件(jian)(jian)系(xi)(xi)(xi)統(tong)(tong)(tong),同樣,嵌入(ru)式(shi)Linux也支(zhi)持多(duo)種(zhong)文(wen)(wen)件(jian)(jian)系(xi)(xi)(xi)統(tong)(tong)(tong)。雖然在嵌入(ru)式(shi)系(xi)(xi)(xi)統(tong)(tong)(tong)中,由于資源受限的(de)(de)(de)(de)(de)(de)原(yuan)因(yin)(yin),它的(de)(de)(de)(de)(de)(de)文(wen)(wen)件(jian)(jian)系(xi)(xi)(xi)統(tong)(tong)(tong)和PC上的(de)(de)(de)(de)(de)(de)Linux的(de)(de)(de)(de)(de)(de)文(wen)(wen)件(jian)(jian)系(xi)(xi)(xi)統(tong)(tong)(tong)有較大的(de)(de)(de)(de)(de)(de)區別,但是(shi)(shi)(shi),它們(men)的(de)(de)(de)(de)(de)(de)總(zong)體架構是(shi)(shi)(shi)一樣的(de)(de)(de)(de)(de)(de),都是(shi)(shi)(shi)采(cai)用目錄樹的(de)(de)(de)(de)(de)(de)結構。在嵌入(ru)式(shi)系(xi)(xi)(xi)統(tong)(tong)(tong)中常(chang)(chang)見的(de)(de)(de)(de)(de)(de)文(wen)(wen)件(jian)(jian)系(xi)(xi)(xi)統(tong)(tong)(tong)有cramfs、romfs、jffs、yaffs等,這里(li)就以制作cramfs文(wen)(wen)件(jian)(jian)系(xi)(xi)(xi)統(tong)(tong)(tong)為例進行講解。cramfs文(wen)(wen)件(jian)(jian)系(xi)(xi)(xi)統(tong)(tong)(tong)是(shi)(shi)(shi)一種(zhong)經過壓縮的(de)(de)(de)(de)(de)(de)、極(ji)為簡單的(de)(de)(de)(de)(de)(de)只(zhi)讀文(wen)(wen)件(jian)(jian)系(xi)(xi)(xi)統(tong)(tong)(tong),因(yin)(yin)此非常(chang)(chang)適合(he)嵌入(ru)式(shi)系(xi)(xi)(xi)統(tong)(tong)(tong)。要注意的(de)(de)(de)(de)(de)(de)是(shi)(shi)(shi),不(bu)同的(de)(de)(de)(de)(de)(de)文(wen)(wen)件(jian)(jian)系(xi)(xi)(xi)統(tong)(tong)(tong)都有相應的(de)(de)(de)(de)(de)(de)制作工具(ju),但是(shi)(shi)(shi)其(qi)主(zhu)要的(de)(de)(de)(de)(de)(de)原(yuan)理(li)和制作方法(fa)是(shi)(shi)(shi)類似的(de)(de)(de)(de)(de)(de)。

    在嵌入(ru)式(shi)Linux中(zhong),busybox是構造文(wen)件(jian)系(xi)(xi)統常用的(de)(de)軟件(jian)工(gong)(gong)具(ju)包(bao),它(ta)(ta)被非(fei)常形象(xiang)地稱為(wei)嵌入(ru)式(shi)Linux系(xi)(xi)統中(zhong)的(de)(de)“瑞士軍刀”,因為(wei)它(ta)(ta)將許多常用的(de)(de)Linux命令和(he)(he)工(gong)(gong)具(ju)結(jie)合到了(le)一個單獨的(de)(de)可執行程序(busybox)中(zhong)。雖然與相(xiang)應的(de)(de)GNU工(gong)(gong)具(ju)比(bi)較(jiao),busybox所(suo)提供的(de)(de)功能(neng)和(he)(he)參數(shu)略少,但在比(bi)較(jiao)小的(de)(de)系(xi)(xi)統(如啟動盤)或(huo)者嵌入(ru)式(shi)系(xi)(xi)統中(zhong)已經足夠了(le)。

    busybox在設計上就(jiu)充分考慮了(le)(le)硬(ying)件(jian)(jian)資源(yuan)受限(xian)(xian)的(de)(de)(de)(de)(de)特殊工(gong)作環境。它(ta)(ta)采(cai)用(yong)一(yi)種很巧妙(miao)的(de)(de)(de)(de)(de)辦法減少自(zi)己的(de)(de)(de)(de)(de)體(ti)積:所有的(de)(de)(de)(de)(de)命令(ling)都(dou)通過(guo)(guo)“插(cha)(cha)件(jian)(jian)”的(de)(de)(de)(de)(de)方(fang)式(shi)(shi)集中(zhong)到(dao)一(yi)個可(ke)(ke)執(zhi)行(xing)文(wen)(wen)件(jian)(jian)中(zhong),在實(shi)際應用(yong)過(guo)(guo)程(cheng)中(zhong)通過(guo)(guo)不同(tong)的(de)(de)(de)(de)(de)符(fu)(fu)號鏈接(jie)(jie)來(lai)確(que)定到(dao)底要執(zhi)行(xing)哪個操作。例如,終生(sheng)成(cheng)的(de)(de)(de)(de)(de)可(ke)(ke)執(zhi)行(xing)文(wen)(wen)件(jian)(jian)為busybox,當為它(ta)(ta)建立一(yi)個符(fu)(fu)號鏈接(jie)(jie)ls時,就(jiu)可(ke)(ke)以通過(guo)(guo)執(zhi)行(xing)這(zhe)個新命令(ling)實(shi)現列出目錄的(de)(de)(de)(de)(de)功能(neng)。采(cai)用(yong)單一(yi)執(zhi)行(xing)文(wen)(wen)件(jian)(jian)的(de)(de)(de)(de)(de)方(fang)式(shi)(shi)大限(xian)(xian)度地(di)共享(xiang)了(le)(le)程(cheng)序代碼,甚至連文(wen)(wen)件(jian)(jian)頭、內存(cun)中(zhong)的(de)(de)(de)(de)(de)程(cheng)序控制塊等其(qi)他系(xi)(xi)統資源(yuan)都(dou)共享(xiang)了(le)(le),對于資源(yuan)比較(jiao)緊張的(de)(de)(de)(de)(de)系(xi)(xi)統來(lai)說,真是合適不過(guo)(guo)了(le)(le)。在busybox的(de)(de)(de)(de)(de)編(bian)(bian)譯過(guo)(guo)程(cheng)中(zhong),可(ke)(ke)以非(fei)常方(fang)便地(di)加減它(ta)(ta)的(de)(de)(de)(de)(de)“插(cha)(cha)件(jian)(jian)”,后的(de)(de)(de)(de)(de)符(fu)(fu)號鏈接(jie)(jie)也(ye)可(ke)(ke)以由(you)編(bian)(bian)譯系(xi)(xi)統自(zi)動生(sheng)成(cheng)。

    下面用busybox構建(jian)FS2410開(kai)發板的cramfs文件系統。

    (1)從busybox網站下載busybox源碼(本實例采用(yong)busybox-1.00)并解壓,接下來,根據實際需要(yao)進行(xing)busybox的配(pei)置。

    $ tar jxvf busybox-1.00.tar.bz2
        $ cd busybox-1.00
        $ make defconfig /* 首先進行默認配置 */
         $ make menuconfig

    此時,需要設(she)(she)置與平臺相(xiang)關的(de)(de)(de)交(jiao)叉編譯選項(xiang),操作步驟(zou)為:先(xian)選中“Build Options”項(xiang)的(de)(de)(de)“Do you want to build BusyBox with a Cross Complier?”選項(xiang),然后(hou)將“Cross Compiler prefix”設(she)(she)置為“/usr/local/arm/3.3.2/bin/arm-linux-”(這是在實驗主機中的(de)(de)(de)交(jiao)叉編譯器的(de)(de)(de)安裝路徑),如圖(tu)1.7所示(shi)。

    
圖1.7 busybox配(pei)置畫(hua)面

    (2)編譯并安(an)裝busybox。

    $ make
        $ make install PREFIX=/home/david/fs2410/cramfs

    其中(zhong),PREFIX用于指定安裝目(mu)錄,如果不設置該選(xuan)項(xiang),則默認在當前目(mu)錄下創建_install目(mu)錄。創建的安裝目(mu)錄的內(nei)容如下:

    $ ls
    bin linuxrc sbin usr

 ;   (3)由此可知(zhi),使(shi)用busybox軟件包(bao)所創建(jian)的文件系統(tong)還缺(que)少(shao)很多東(dong)西。

    (4)通過創建系統所需的(de)目錄和文(wen)件(jian)來完善文(wen)件(jian)系統的(de)內容(rong)。

    $ mkdir mnt root var tmp proc boot etc lib
    $ mkdir /var/{lock,log,mail,run,spool}

    (5)將(jiang)所(suo)需的(de)(de)(de)交叉編譯鏈接庫(ku)復制到lib目錄(lu)(lu)中,這(zhe)些(xie)庫(ku)文件(jian)位于/usr/local/arm/3.3.2/lib下。在復制時應該注(zhu)意(yi)采用打包后解(jie)包的(de)(de)(de)方(fang)式,以保證符號(hao)鏈接的(de)(de)(de)正確性和完整性。刪除所(suo)有目錄(lu)(lu)和靜態庫(ku)文件(jian),并使用arm-linux-strip工具(ju)剝除庫(ku)文件(jian)中的(de)(de)(de)調試段信息,從(cong)而減(jian)少庫(ku)的(de)(de)(de)體積。

    (6)創建(jian)一(yi)些重要文件(jian)。inittab是(shi)Linux啟動(dong)之后第一(yi)個被訪問的腳(jiao)本(ben)文件(jian)。

    # This is run first except when booting
    ::sysinit:/etc/init.d/rcS

    # Start an "askfirst" shell on the console
    #::askfirst:-/bin/bash
    ::askfirst:/bin/bash

    # Stuff to do when restarting the init process
    ::restart:/sbin/init

    #::once:/sbin/raja.sh
    #::respawn:/sbin/iom
    ::once:/usr/etc/rc.local

    # Stuff to do before rebooting
    ::ctrlaltdel:/sbin/reboot
    ::shutdown:/bin/umount -a -r 

 ;   建(jian)立(li)init.d目錄,進(jin)入init.d目錄,建(jian)立(li)rcS文件,文件內容如(ru)下:

    #!/bin/sh
    # This is the first script called by init process
    /bin/mount -a
    exec /usr/etc/rc.local 

    建立/etc/profile文(wen)件:

    # /etc/profile
    PATH=/bin:/sbin:/usr/bin:/usr/sbin
    LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
    export PATH LD_LIBRARY_PATH

    其中,profile用于設置shell的環境變(bian)量,shell啟動時(shi)會讀取/etc/profile文件(jian)來設置環境變(bian)量。以下是/etc/rc.local文件(jian):

    #!/bin/sh
    #add user specified script
    cd /dev
    ln -s /dev/fb/0 fb0
    ln -s vc/0 tty0
    ln -s vc/1 tty1
    ln -s vc/2 tty2
    mknod –m 660 mtd0 c 90 0
    mknod –m 660 mtd1 c 90 2
    mknod –m 660 mtd2 c 90 4
    mknod –m 660 mtdblock0 b 31 0
    mknod –m 660 mtdblock1 b 31 1
    mknod –m 660 mtdblock2 b 31 2

    fstab文件(jian)定義了文件(jian)系統的各個“掛接點”,需要與(yu)實際的系統相配合。

    none         /proc           proc         defaults        0 0
    tmpfs        /dev/shm        tmpfs        defaults        0 0

    后(hou)要(yao)創建(jian)用戶和用戶組文件(jian)等其他文件(jian),以上(shang)用busybox構造了文件(jian)系統的內容。

    下(xia)面(mian)創建cramfs文(wen)件系統(tong)映像(xiang)(xiang)文(wen)件,制作cramfs映像(xiang)(xiang)文(wen)件需要用到的(de)(de)工具(ju)是(shi)mkcramfs。此時可(ke)以(yi)采(cai)用兩種(zhong)(zhong)方(fang)(fang)(fang)法,一(yi)種(zhong)(zhong)方(fang)(fang)(fang)法是(shi)使用我們所(suo)構建的(de)(de)文(wen)件系統(tong)(在目錄“/home/david/fs2410/cramfs”中),另一(yi)種(zhong)(zhong)方(fang)(fang)(fang)法是(shi)在已(yi)經做(zuo)好的(de)(de)cramfs映像(xiang)(xiang)文(wen)件的(de)(de)基礎上進行(xing)適(shi)當的(de)(de)改動。下(xia)面(mian)的(de)(de)示例使用第二種(zhong)(zhong)方(fang)(fang)(fang)法,因為(wei)這個方(fang)(fang)(fang)法包含了第一(yi)種(zhong)(zhong)方(fang)(fang)(fang)法的(de)(de)所(suo)有步驟(zou)(假設已(yi)經做(zuo)好的(de)(de)映像(xiang)(xiang)文(wen)件名(ming)為(wei)“fs2410.cramfs”)。

    首(shou)先用mount命令將映像文(wen)件掛(gua)載(zai)到一(yi)個目(mu)錄(lu)下,打(da)開該目(mu)錄(lu)并查看其內(nei)容。

    $ mkdir cramfs
    $ mount fs2410.cramgs cramfs –o loop
    $ ls cramfs
    bin dev etc home lib linuxrc proc Qtopia ramdisk sbin testshell tmp
    usr var

    因(yin)為cramfs文(wen)件系統是只(zhi)讀的,所(suo)以不能(neng)在(zai)這個掛載目錄下直接進行修改,因(yin)此需要(yao)將文(wen)件系統中(zhong)的內容復(fu)制到另一個目錄中(zhong),具體操作如下所(suo)示:

    $ mkdir backup_cramfs
    $ tar cvf backup.cramfs.tar cramfs/
    $ mv backup.cramfs.tar backup_cramfs/
    $ umount cramfs
    $ cd backup_cramfs
    $ tar xvf backup.cramfs.tar
    $ rm backup.cramfs.tar 

    此(ci)時就像用(yong)busybox所構建的文件系統一樣,可(ke)以(yi)在backup_cramfs的cramfs子目(mu)錄中(zhong)任意進行修改。例如,可(ke)以(yi)添加用(yong)戶自(zi)己的程(cheng)序:

    $ cp ~/hello backup_cramfs/cramfs/

    ;在用戶的(de)修改工作(zuo)結束之后,用下面的(de)命令可以創(chuang)建cramfs映像文件:

    $ mkcramfs backup_cramfs/cramfs/ new.cramfs

  ;  接下來,就可以將(jiang)新創建的(de)(de)new.cramfs映像文(wen)件燒入到開發(fa)板的(de)(de)相應位置(zhi)了。

    本文選自華清遠見嵌入式培訓教材《從實踐中學嵌入式Linux應用程序開發》

   熱點鏈(lian)接:

   1、Linux內核移植的簡介
   2、Linux內核配置與編譯
   3、Linux內核結構介紹
   4、Linux內核主要功能介紹
   5、在電路板上移植U-Boot程序

更多新聞>>