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

分享

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

 langhuayipian 2011-02-21

完全是什么都不懂,經(jīng)理大概說(shuō)了下也沒(méi)整明白就開(kāi)始做.終于今天上午做了個(gè)能跑起來(lái)的...淚流滿面啊~下面把學(xué)習(xí)總結(jié)給貼上來(lái).

根文件系統(tǒng)主要包括etc/,bin/,sbin/,lib/,proc/,dev/等根目錄,其他目錄可以根據(jù)應(yīng)用來(lái)增加,。

創(chuàng)建根文件系統(tǒng)使用了busybox工具,我用的是1.13.3版本,其實(shí)制作方法很簡(jiǎn)單,主要是環(huán)境要和編譯kernel的一樣,編譯鏈?zhǔn)裁吹?/strong>.我這個(gè)kernel是公司原來(lái)在cvs服務(wù)器上都做好了的,直接make就出來(lái)了,而我之前做kernel出了點(diǎn)問(wèn)題一直跑不起來(lái),所以為了趕學(xué)習(xí)進(jìn)度就直接用了這個(gè)kernel,因?yàn)槭遣沤佑|嵌入式,最開(kāi)始沒(méi)意識(shí)到這點(diǎn)的重要,浪費(fèi)了很多的時(shí)間,做出來(lái)卻沒(méi)法跑,或者出現(xiàn)各種錯(cuò)誤,后來(lái)反應(yīng)過(guò)來(lái)1天多點(diǎn)就弄好了.


1.編譯busybox

 

1.1解壓該包

tar -xvjf busybox-1.13.3.tar.bz2

cd busybox-1.13.3

 

1.2.修改Makefile

找到

CROSS_COMPILE ?=

修改為CROSS_COMPILE ?=arm-linux-

(這里需要修改成編譯鏈名稱,我實(shí)際用的是xscale_be-)

 

找到

ARCH ?= $(SUBARCH)

修改為

ARCH ?= arm

 

1.3.進(jìn)行默認(rèn)配置

make defconfig

 

1.4.對(duì)配置信息進(jìn)行修改

make menuconfig

 

Busybox Settings --->

        Build Options --->

            [*]Build BusyBox as a static binry (no shared libs)

(動(dòng)態(tài)或靜態(tài)網(wǎng)上各有討論,總體來(lái)說(shuō)在空間不緊張的時(shí)候使用靜態(tài),不容易出錯(cuò))

            ()Cross Compiler prefix=/usr/local/arm/3.4.1/bin/

(這里是添加編譯器路徑,如果沒(méi)有exportPATH環(huán)境變量里,則可以在這里添加)

 

        Installation Options --->

            [*]Don't use /usr

 

其他的設(shè)置可以根據(jù)需要來(lái),這里就默認(rèn)了(不過(guò)后面編譯會(huì)出錯(cuò)一些,然后相應(yīng)的修改或者干脆去掉那些用不著的)

 


1.5.make (下面是我make中出現(xiàn)的錯(cuò)誤與解決)

Error 1.

In file included from miscutils/watchdog.c:13:

/opt/montavista/pro/devkit/arm/xscale_be/target/usr/include/linux/watchdog.h:17: error: parse error before "__u32"

/opt/montavista/pro/devkit/arm/xscale_be/target/usr/include/linux/watchdog.h:20: error: parse error before "identity"

/opt/montavista/pro/devkit/arm/xscale_be/target/usr/include/linux/watchdog.h:21: error: parse error before '}' token

make[1]: *** [miscutils/watchdog.o] Error 1

make: *** [miscutils] Error 2

 

解決:

make menuconfig

去掉Miscellaneous Utilities -> watchdog.

保存,繼續(xù)make

 

Error 2.

networking/brctl.c: In function `brctl_main':

networking/brctl.c:186: error: `SIOCBRADDBR' undeclared (first use in this function)

networking/brctl.c:186: error: (Each undeclared identifier is reported only once

networking/brctl.c:186: error: for each function it appears in.)

networking/brctl.c:186: error: `SIOCBRDELBR' undeclared (first use in this function)

networking/brctl.c:202: error: `SIOCBRADDIF' undeclared (first use in this function)

networking/brctl.c:202: error: `SIOCBRDELIF' undeclared (first use in this function)

make[1]: *** [networking/brctl.o] Error 1

make: *** [networking] Error 2

 

解決: vi (busybox目錄)networking/brctl.c  添加下列

#define SIOCBRADDBR    0x89a0

#define SIOCBRDELBR    0x89a1

#define SIOCBRADDIF    0x89a2

#define SIOCBRDELIF    0x89a3

繼續(xù)make

 

Error 3.

In file included from networking/ifenslave.c:105:

出現(xiàn)一大堆關(guān)于ifenslave的錯(cuò)

 

解決:

make menuconfig

去掉networking -> ifenslave.

保存,繼續(xù)make

 

Error 4.

networking/interface.c:818: error: `ARPHRD_INFINIBAND' undeclared here (not in a function)

networking/interface.c:818: error: initializer element is not constant

networking/interface.c:818: error: (near initialization for `ib_hwtype.type')

make[1]: *** [networking/interface.o] Error 1

make: *** [networking] Error 2

 

解決:

vi networking/interface.c

找到818.type  = ARPHRD_INFINIBAND,

改為.type  = -1,

保存,繼續(xù)make

 

最后出來(lái)了一些警告,不過(guò)終于編譯通過(guò)了


1.6.make install

編譯出來(lái)的binsbin就在_install里面

 

2.構(gòu)建文件系統(tǒng)(部分需要root權(quán)限)

 

2.1.mkdir rootfs (后面文件系統(tǒng)就掛載在這里)

2.2.dd if=/dev/zero of=ucfs bs=1k count=6144

后面的6144是指解壓后6M大小的文件系統(tǒng),如果跑的時(shí)候報(bào)錯(cuò),說(shuō)明可能超過(guò)最大空間了.

2.3.losetup -e none /dev/loop0 e2fs如果loop0已被使用,,可以使用loop1等。

2.4.mke2fs -m 0 /dev/loop0 6144

2.5.mount -t ext2 /dev/loop0 ./rootfs/

接下來(lái)進(jìn)入rootfs/目錄,可以看到里面已經(jīng)有了一個(gè)lost+found目錄.rootfs/目錄中添加相關(guān)的文件和目錄,完成根文件系統(tǒng)的構(gòu)建.

2.6.cp –avrf (busybox目錄)/_install/* rootfs

2.7.cp –avrf (busybox目錄)/example/bootfloppy/etc rootfs

etc里面的是啟動(dòng)init相關(guān)的設(shè)置,這里以最簡(jiǎn)單來(lái)設(shè)置,同時(shí)修改ectinttab,保留前2,如下

::sysinit:/etc/init.d/rcS

::respawn:-/bin/sh

2.8.建立剩下需要的文件夾mkdir lib dev proc

2.9.復(fù)制lib庫(kù),這個(gè)要簡(jiǎn)單的話直接復(fù)制板子提供的文件系統(tǒng)里的lib即可,我就是直接復(fù)制的.如果沒(méi)有,則需要拷貝交叉編譯器中的uclibc庫(kù),進(jìn)入交叉編譯器的lib目錄,然后拷貝必要的庫(kù).

2.10.創(chuàng)建dev庫(kù),busybox目錄/example/bootfloppy下有一個(gè)mkdevs.sh,

sh mkdevs.sh rootfs/dev/

可以用它來(lái)快捷建立需要的設(shè)備.也可以根據(jù)需要來(lái)使用mknod建立.

至此,最基本的基于ext2的根文件系統(tǒng)制作完成~

2.11打包壓縮

umount /dev/loop0

losetup -d /dev/loop0

gzip -v9 e2fs

 

最后制作出來(lái)的e2fs.gz就是需要的了.

 

busybox的目錄下example里有個(gè)mkrootfs.sh還是什么的,里面的命令可以好好看看學(xué)學(xué),基本上就是制做文件系統(tǒng)的全過(guò)程.

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多