久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

根文件系統(tǒng)的制作

 joy_chen 2013-04-12

http://blog./User/AT91RM9200/Article/47315_1.htm

選定 busybox-1.9.2.tar.bz2 這個(gè)版本以靜態(tài)方式編譯即生成的 busybox 不需要共享庫的支持就能運(yùn)行。這樣做我們就不需要布署程序庫了,。缺點(diǎn)是自己寫的 arm-linux 程序在這個(gè)根文件系統(tǒng)中是不能運(yùn)行的,因?yàn)槿鄙俟蚕沓绦驇斓闹С?。不過不用擔(dān)心,通過在目標(biāo)機(jī)里以掛接NFS 的方式將宿主機(jī)的 arm-linux-gcc 編譯器的庫文件掛到 arm-linux  /lib 就可完美的運(yùn)行我們自己的程序了。

現(xiàn)在開始制作靜態(tài)鏈接庫的根文件系統(tǒng),。

 

1,、準(zhǔn)備根文件系統(tǒng)

首先準(zhǔn)備制作工具BusyBox1.9.2

準(zhǔn)備交叉編譯工具arm-linux-gcc 3.3.2,。

在機(jī)器上建立rootfs的文件夾

#mkdir rootfs

rootfs中建立linux系統(tǒng)中典型的文件夾

#cd rootfs

#mkdir root home bin sbin etc dev usr lib tmp mnt sys proc

#mkdir usr/lib usr/bin

#pwd

/home/su/rootfs

2,、解壓源碼包
    #tar xjf busybox-1.9.2.tar.bz2
    #cd busybox-1.9.2
3
、修改 Makefile,

#vi Makefile
   
Makefile中的

CROSS_COMPILE ?=
    
改為
    CROSS_COMPILE ?= /usr/local/arm/3.3.2/bin/arm-linux-

:這個(gè)版本的 busybox  3.4.1  arm-linux-gcc 編譯有些問題 3.3.2 版則可順利編譯,。
4
,、定制 busybox
    
選擇busybox下全部的可執(zhí)行程序

#make defconfig

進(jìn)到配置選項(xiàng)

#make menuconfig

設(shè)置靜態(tài)編譯方式
    Busybox Settings ---> Build Options ---> [*] Build BusyBox as a static binary (no shared libs)

Busybox Settings ---> Install Options ---> 中輸入建立根文件系統(tǒng)的文件所在的路徑/home/su/rootfs

其它的默認(rèn),。
    
確保 [*] Build BusyBox as a static binary (no shared libs) 被選中,,保存退出
 5
、執(zhí)行 make 編譯
    #make

    編譯出錯(cuò)信息如下:
    applets/applets.c:15:2: warning: #warning Static linking against glibc produces buggy executables
    applets/applets.c:16:2: warning: #warning (glibc does not cope well with ld --gc-sections).
    applets/applets.c:17:2: warning: #warning See sources.redhat.com/bugzilla/show_bug.cgi?id=3400
    applets/applets.c:18:2: warning: #warning Note that glibc is unsuitable for static linking anyway.
    applets/applets.c:19:2: warning: #warning If you still want to do it, remove -Wl,--gc-sections
    applets/applets.c:20:2: warning: #warning from scripts/trylink and remove this warning.
    applets/applets.c:21:2: error: #error Aborting compilation.
    make[1]: *** [applets/applets.o] Error 1

    按照提示,修改文件 applets/applets.c  21 
    #error Aborting compilation.
    
注釋掉:

    執(zhí)行 make 重新編譯
    #make

    編譯通過, busybox 被生成了然后執(zhí)行
    #make install

busybox 就被安裝到指定的路徑下了/home/su/rootfs,這時(shí)可發(fā)現(xiàn)rootfs下多了個(gè)liunxrc的文件,,bin,、sbin下也多了很多文件。用ls –l命令查看其中的一個(gè)文件,,可發(fā)現(xiàn)其是鏈接到busybox的一個(gè)連接符,,所以我們之后在目標(biāo)機(jī)上運(yùn)行的命令大多都會(huì)調(diào)用busybox這個(gè)文件的。

若之前忘了指定路徑,,默認(rèn)生成到臨時(shí)目錄busybox-1.9.2/_install 下了,。

6、編寫配置/etc下的初始化程序(可省略)

    最簡單的做法是把busybox-1.9.2/examples/bootfloppy/etc下的全部文件拷到目標(biāo)文件的etc目錄下

    #cd /home/su/busybox-1.9.2/examples/bootfloppy/etc

#cp –rf * /home/su/rootfs/etc

也可自己寫這些文件,。

7,、把rootfs做成鏡像

    #mkcramfs rootfs rootfs.cramfs

8、把rootfs.cramfs燒寫到目標(biāo)機(jī)中,。

9,、運(yùn)行目標(biāo)機(jī)

    這時(shí)會(huì)遇到一個(gè)錯(cuò)誤信息:

    Can’t open tty2 

Can’t open tty3

Can’t open tty4

    解決辦法:把/rootfs/etc/ inittab 文件的第三行“tty2::askfirst:-bin/sh”刪除掉。

返回到第7步重做。

 

 

 

 

    現(xiàn)實(shí)中,,動(dòng)態(tài)編譯的方法更適合工程的需要,,所以一般是采用動(dòng)態(tài)的方法編譯根文件系統(tǒng)的。若選擇動(dòng)態(tài)編譯的辦法,,大體方法還是一樣的,,存在一些不同之處是:

不同之處之一是:

    進(jìn)到配置選項(xiàng)

#make menuconfig

選擇動(dòng)態(tài)方式

Busybox Settings ---> Build Options ---> [*] Build Shared libbusybox

不同之處之二是:

上面靜態(tài)編譯出現(xiàn)的出錯(cuò)信息不會(huì)出現(xiàn)了,所以不需對程序做任何修改,,但還是必須用arm-linux-gcc 3.3.2編譯,否則還是會(huì)有麻煩,。

不同之處之三是(最大的不同之處):

編譯完成后,,需進(jìn)到rootfs目錄的lib中,往里面添加一些庫文件

#cd /home/su/rootfs/lib

這里有點(diǎn)麻煩,,我怎么知道需要什么庫文件的支持呢,?

最簡單的辦法是把arm-linux-gcc 3.3.2下的整個(gè)lib庫拷進(jìn)來,簡單省事,。但是這么做存在一個(gè)問題,,做出的根文件系統(tǒng)非常大。

另一個(gè)辦法是:

#cd /home/su/rootfs/bin

#arm-linux-readelf busybox | grep shared

這樣就可以顯示出系統(tǒng)運(yùn)行起來需要什么庫文件,,再把相應(yīng)的庫文件拷到/home/su/rootfs/lib下,。一般而言,系統(tǒng)庫用到兩個(gè):動(dòng)態(tài)鏈接器ld-linux.soc函數(shù)庫Glibc,,Glibc包括:

ld-linux:動(dòng)態(tài)鏈接庫,,必需

libc: 標(biāo)準(zhǔn)c函數(shù)庫,必需

libm: 數(shù)學(xué)庫,,一般需要

libdl: 用于動(dòng)態(tài)裝載共享庫,,較少用到

libcrypt: 加密附加庫,需要認(rèn)證的程序用到,,較少用

libpthread: POSIX線程庫,,一般需要

如果需要某個(gè)函數(shù)庫,我們可以將這些庫和對應(yīng)的符號(hào)鏈接拷到目標(biāo)根文件系統(tǒng)的/lib目錄下,。簡單起見,,應(yīng)該使用-d選項(xiàng)或-a選項(xiàng)調(diào)用cp命令,這樣可保留完整的符號(hào)鏈接信息,。

例:

#cp –a libc.so.6 /home/su/rootfs/lib/

為了減少運(yùn)行時(shí)庫的大小,,我們應(yīng)該使用交叉編譯版本即arm-linux-gcc 3.3.2strip工具來處理根文件系統(tǒng)的庫文件,把二進(jìn)制文件中的包含的符號(hào)表和調(diào)試信息刪除掉,。

例:

#arm-linux-strip /home/su/rootfs/lib/*.so

 

 

 

注意:

    使用busybox做文件系統(tǒng)時(shí),,運(yùn)行make命令,系統(tǒng)會(huì)馬上顯示:

    沒有/dev/null這個(gè)文件

但是還是能最終編譯出根文件系統(tǒng),,問題出在重啟linux系統(tǒng),,機(jī)器進(jìn)不去了,。提示出錯(cuò),信息如下:

/etc/rc.d/rc.sysinit: line 173:/dev/null: read-only file system

 /etc/rc.d/rc.sysinit: line 173:/dev/null: read-only file system

 /etc/rc.d/rc.sysinit: line 184:/dev/null: read-only file system

 /etc/rc.d/rc.sysinit: line 184:/dev/null: read-only file system

 /etc/rc.d/rc.sysinit: line 200:/dev/null: read-only file system

  .

  .

  .

 ***An error occured during the file system check.

 ***Dropping you to a shell;the system will reboot

 ***when you leave the shell

 Give root password for maintenance

 (or type Control-D to continue):

解決辦法:

    按提示輸入root用戶的密碼,,回車,,可看到

    Repair filesystem1#:

    依次輸入命令:

Repair filesystem1# mount -n -o remount,rw /

    Repair filesystem1# rm -f /dev/null

    Repair filesystem1# mknod -m 0666 /dev/null c 1 3

    Repair filesystem1# reboot

問題解決。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多