九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
uClinux的編譯與運(yùn)行詳解
uClinux的編譯與運(yùn)行詳解
2007年05月09日 12:38
按常規(guī)編譯完成后應(yīng)該生成image.bin   linux   linux.data   linux.text romfs.img這5個(gè)文件,不過(guò)我只有l(wèi)inux/boot.rom(=romfs.img),今天上網(wǎng)查了查它們的定義。

romfs.img:這個(gè)文件是通過(guò)tools/romfs-inst.sh腳本,生成romfs目錄及其下面的文 件,然后通過(guò)genromfs程序打包成一個(gè)文件romfs.img。romfs.img既可以放在Flash中,也可以放在RAM中,但需要在編譯內(nèi)核 時(shí)在driver/block/blkmem.c里指定地址,以便內(nèi)核找到。
linux.text:編譯后的內(nèi)核中text段,一般放在Flash中,只讀。
linux.data:編譯后的內(nèi)核中data、init段,一般放在SDRAM中,讀寫(xiě)。
image.rom:通常image.rom的文件大小要比image.ram小很多,這是因?yàn)閕mage.rom是 一個(gè)壓縮過(guò)的內(nèi)核,前面加上一個(gè)小的解壓程序負(fù)責(zé)把內(nèi)核解壓后搬到指定位置。這個(gè)文件可以直接燒進(jìn)Flash中,當(dāng)然也可以在RAM中運(yùn)行。這個(gè)文件實(shí)際 上就是通常Linux生成的zImage文件。
image.ram:這個(gè)內(nèi)核沒(méi)有壓縮過(guò),而且必須在RAM里運(yùn)行。所以需要通過(guò)板子上的Bootloader將它下 載到指定位置后開(kāi)始執(zhí)行。相對(duì)image.rom而言,從RAM里啟動(dòng)內(nèi)核,則代碼段和數(shù)據(jù)段都在RAM里面。這個(gè)文件是編譯生成的ELF格式的 Linux內(nèi)核,通過(guò)arm-elf-objcopy工具生成的二進(jìn)制映像文件。可以這樣形象的說(shuō):image.rom = gunzipprogram + gzipped(image.ram)。
boot.rom:其實(shí)就是uClinux編譯完成后的文件images/romfs.img,可以看一下它就是一個(gè)連接。
image.bin:上面三個(gè)文件順序連接而生成的,image.bin = linux.text + linux.data + romfs.img。
1.創(chuàng)建開(kāi)發(fā)環(huán)境
    首先需要編譯的環(huán)境。建議最好使用Linux 作為開(kāi)發(fā)平臺(tái),因?yàn)長(zhǎng)inux 以及uClinux 的開(kāi)發(fā)者們基本都是在Linux 下完成的開(kāi)發(fā)。為了能夠編譯uClinux,我們需要下載uClinux 的編譯器。這個(gè)文件可以在uClinux 的官方網(wǎng)站得到,也可以在論壇的客服中心下載。
官方的下載地址是:
http://www.uclinux.org/pub/uClinux/arm-elf-tools/arm-elf-tools-20040427.sh
    雖然同為gcc 和binutils 工具,但是必須使用uClinux 發(fā)布的版本,因?yàn)檫@個(gè)gcc 和binutils 都是為了能夠編譯FLAT 格式的文件而訂制的,另外也加入了ARM 對(duì)PIC(Position Independent Code,位置無(wú)關(guān)代碼)的支持。PIC 的支持是用來(lái)編譯動(dòng)態(tài)庫(kù)或者XIP 模式的可執(zhí)行文件。關(guān)于XIP 的介紹有一篇文章:http://www.ucdot.org/article.pl?sid=02/08/28/0434210
    大家可以了解一下XIP。但是由于XIP 并不是很穩(wěn)定,所以在我們發(fā)布的uClinux 版本中并沒(méi)有使用這個(gè)技術(shù)。然后,將下載得到的文件,是一個(gè)sh 文件。這是一個(gè)自解壓的文件(就好比Windows下面的自解壓zip 或者rar 一樣)。為了能夠運(yùn)行,我們需要:
./arm-elf-tools-20040427.sh
這樣如果不能運(yùn)行的話,那應(yīng)該使用下面的命令:
chmod u+x arm-elf-tools-20040427.sh(使之可執(zhí)行)
./arm-elf-tools-20040427.sh
得到了編譯環(huán)境,就可以編譯源代碼了。當(dāng)然,首先要把代碼解壓縮到你的目錄下面:
tar xjvf uClinux-dist-20060803.tar.bz2
它會(huì)把全部的文件解壓縮到uClinux-dist 的目錄下。然后進(jìn)入目錄
cd uClinux-dist
2.編譯uClinux
    對(duì)uClinux 進(jìn)行配置。那是通過(guò)make menuconfig 或者make xconfig 來(lái)實(shí)現(xiàn)的。對(duì)于編譯uClinux,不能簡(jiǎn)單地通過(guò)make 來(lái)實(shí)現(xiàn)。我們需要有一些特定的步驟才能保證編譯的正確。這是因?yàn)閡Clinux 所需要支持的硬件平臺(tái)太多了,不能考慮的很周到。為了編譯最后得到的鏡像文件,我們需要linux 的內(nèi)核以及romfs。對(duì)于GDB/ARMulator的移植來(lái)說(shuō),romfs 是被編譯到內(nèi)核里面去的。因此,在編譯內(nèi)核前需要一個(gè)romfs。為了得到romfs 的image,我們又需要編譯用戶的應(yīng)用程序。而為了編譯用戶的應(yīng)用程序,我們又需要編譯C 運(yùn)行庫(kù),這里我們用的C 運(yùn)行庫(kù)是uClibc。根據(jù)上面的分析,我們編譯uClinux 的步驟如下:make dep
    這個(gè)僅僅是在第一次編譯的時(shí)候需要,以后就不用了,為的是在編譯的時(shí)候知道文件之間的依賴關(guān)系,在進(jìn)行了多次得編譯后,make 會(huì)根據(jù)這個(gè)依賴關(guān)系來(lái)確定哪些文件需要重新編譯、哪些文件可以跳過(guò))。
make lib_only
編譯uClibc。以后我們編譯用戶程序的時(shí)候需要這個(gè)運(yùn)行庫(kù),在運(yùn)行這步時(shí),采用uC-libc出錯(cuò),但發(fā)現(xiàn)有些人卻用的是這個(gè),沒(méi)問(wèn)題,不知為何。
make user_only
編譯用戶的應(yīng)用程序,包括初始化進(jìn)程init,和用戶交互的bash,以及集成了很多程序的busybox(這樣對(duì)一個(gè)嵌入式系統(tǒng)來(lái)說(shuō)可以減少存放的空間,因?yàn)椴煌某绦蚬灿昧艘惶證 運(yùn)行庫(kù)),還有一些服務(wù),如boa(一個(gè)在嵌入式領(lǐng)域用的很多的Web 服務(wù)器)和telnetd(telnet 服務(wù)器,我們可以通過(guò)網(wǎng)絡(luò)來(lái)登錄我們的uClinux 而不一定使用串口)。
make romfs(容易出錯(cuò),見(jiàn)UC移植)
在用戶程序編譯結(jié)束后,因?yàn)槲覀冇玫降氖莚omfs(一種輕量的、只讀的文件系統(tǒng))作為uClinux 的根文件系統(tǒng),所以首先需要把上一步編譯的很多應(yīng)用程序以u(píng)Clinux 所需要的目錄格式存放起來(lái)。原來(lái)的程序是分散在user 目錄下,現(xiàn)在例如可執(zhí)行文件需要放到bin目錄、配置文件放在etc 目錄下..這些事就是make romfs 所做的。它會(huì)在uClinux 的目錄下生成一個(gè)romfs 目錄并且把user 目錄下的文件、以及vendors 目錄下特定系統(tǒng)所需要的文件(我們的vendors 目錄是vendors/ARMlator/ARMulator組織起來(lái),以便下面生成romfs 的單個(gè)鏡像所用。
make image(容易出錯(cuò))
它的作用有2 個(gè),一個(gè)是生成romfs 的鏡像文件,另一個(gè)是生成Linux 的鏡像。因?yàn)樵瓉?lái)的Linux 編譯出來(lái)是elf 格式的,不能直接用于下載或者編譯(不過(guò)那個(gè)文件也是需要的,因?yàn)槿绻阈枰?,那個(gè)elf 格式的內(nèi)核文件里面可以包含調(diào)試的信息)。因此在這個(gè)時(shí)候由于還沒(méi)有編譯過(guò)Linux,因此在執(zhí)行這一步的時(shí)候會(huì)報(bào)錯(cuò)。但是沒(méi)有關(guān)系,因?yàn)槲覀冊(cè)谶@里需要的僅僅是romfs 的鏡像,以便在下面編譯Linxu 內(nèi)核的時(shí)候使用。
make linux
(可能會(huì)出現(xiàn)error:cannot open romfs.o,其實(shí)這個(gè)文件已經(jīng)有了,在linux-2.4.x/romfs/下,copy到uC下就可以了)
有了romfs 的鏡像我們就可以編譯Linux 了。因?yàn)槲覀兊膔omfs 是嵌入到linux 內(nèi)核中去了,所以在編譯Linux 內(nèi)核的時(shí)候就要一個(gè)romfs.o 文件。這個(gè)文件是由上面的make image生成的。
make image
(可能images/下只有一個(gè)boot.rom,我就是,其實(shí)這個(gè)文件就是romfs.img啦,鏈接一下,ln -s boot.rom romfs.img)
這里再一次make image 就是為了得到uClinux 的可執(zhí)行文件的鏡像了。執(zhí)行了這一步之后,就會(huì)在images 目錄下找到3 個(gè)文件:image.ram,image.rom,romfs.img。其中,image.ram和image.rom 就是我們需要的鏡像文件。這個(gè)在下面“使用uClinux”會(huì)提到。為了方便起見(jiàn),在uClinux-dist 目錄下有兩個(gè)文件:build_first.sh 和build_final.sh 先執(zhí)行build_first.sh 再執(zhí)行build_final.sh 就可以得到所需的鏡像文件。之所以沒(méi)有把兩個(gè)合并,是因?yàn)榈谝淮问褂胢ake image 會(huì)出錯(cuò)。
3.使用uClinux
    上面我們提到了兩個(gè)文件:image.ram 和image.rom。其中,image.ram 是直接下載到RAM 執(zhí)行的文件。如果你還處于調(diào)試階段,那么就沒(méi)有必要把文件燒寫(xiě)到FLASH 里面。這個(gè)時(shí)候我們可以使用image.ram。在開(kāi)發(fā)板運(yùn)行BIOS 的情況下,使用:
netrun
將文件下載到RAM 并且自動(dòng)執(zhí)行。具體可以參考BIOS 的教程。
對(duì)于image.rom 來(lái)說(shuō),它是一個(gè)zImage 文件,也就是自解壓的內(nèi)核。由于它使用了gzip將內(nèi)核壓縮過(guò),所以可以減小文件的大小。這個(gè)image 應(yīng)該燒寫(xiě)到FLASH 的0x10000 的位置,而不能直接下載到RAM 并執(zhí)行。在開(kāi)發(fā)板運(yùn)行了uClinux 之后,我們可以通過(guò)串口看到很多輸出,但是最后可以看到
Welcome to
____ _ _
/ __| ||_|
_ _| | | | _ ____ _ _ _ _
| | | | | | || | _ \| | | |\ \/ /
| |_| | |__| || | | | | |_| |/ \
| ___\____|_||_|_| |_|\____|\_/\_/
| |
|_|
Execution Finished, Exiting
Sash command shell (version 1.1.1)
/>
這樣就表明你的uClinux 正常啟動(dòng)了。這時(shí)候可以輸入一些命令,例如:
/> ls -l
drwxr-xr-x 1 0 0 32 Jan 1 00:00 bin
drwxr-xr-x 1 0 0 32 Jan 1 00:00 dev
drwxr-xr-x 1 0 0 32 Jan 1 00:00 etc
drwxr-xr-x 1 0 0 32 Jan 1 00:00 home
drwxr-xr-x 1 0 0 32 Jan 1 00:00 lib
drwxr-xr-x 1 0 0 32 Jan 1 00:00 mnt
dr-xr-xr-x 16 0 0 0 Jan 1 00:00 proc
lrwxrwxrwx 1 0 0 97 Jan 1 00:00 sbin -> /bin
lrwxrwxrwx 1 0 0 105 Jan 1 00:00 tmp -> /var/tmp
drwxr-xr-x 1 0 0 32 Jan 1 00:00 usr
drwxr-xr-x 8 0 0 1024 Jan 1 00:00 var
/>
ls 命令可以列出當(dāng)前目錄下的文件,-l 參數(shù)可以列出更詳細(xì)的信息。
/> cat /proc/meminfo
total: used: free: shared: buffers: cached:
Mem: 14630912 2199552 12431360 0 499712 507904
Swap: 0 0 0
MemTotal: 14288 kB
MemFree: 12140 kB
MemShared: 0 kB
Buffers: 488 kB
Cached: 496 kB
SwapCached: 0 kB
Active: 744 kB
Inactive: 240 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 14288 kB
LowFree: 12140 kB
SwapTotal: 0 kB
SwapFree: 0 kB
/>
cat 可以將一個(gè)文件顯示出來(lái),這里的/proc/meminfo 表示內(nèi)存的信息。您還可以看看
proc 目錄下有些什么文件并且把他們顯示出來(lái)看看
/> ps
PID PORT STAT SIZE SHARED %CPU COMMAND
1 S 134K 0K 0.1 init
2 S 0K 0K 0.0 keventd
3 S 0K 0K 0.0 ksoftirqd_CPU0
4 S 0K 0K 0.0 kswapd
5 S 0K 0K 0.0 bdflush
6 S 0K 0K 0.0 kupdated
15 S0 R 136K 0K 0.0 /bin/sh
16 S 70K 0K 0.0 /bin/inetd
17 S 264K 0K 0.0 /bin/boa
/>
ps 命令列出當(dāng)前的進(jìn)程的情況
在上面ps 的輸出結(jié)果我們可以但到里面有boa,這就是我們的Web 服務(wù)器。另外,telnetd
是通過(guò)inetd 來(lái)啟動(dòng)的。
先來(lái)看一下boa。我們?cè)谥鳈C(jī)的瀏覽器輸入http://192.168.111.100
就應(yīng)該看見(jiàn)一個(gè)默認(rèn)的頁(yè)面:
然后我們也可以通過(guò)telnet 來(lái)訪問(wèn)我們的uClinux 機(jī)器:
在主機(jī)使用Telnet 工具登錄到uClinux(IP 地址上面有了,是192.168.111.100)
它會(huì)要你登錄,選擇用戶名root,密碼為空,就可以進(jìn)去了。
就如下圖所示:
如果這時(shí)候用ps 查看的話,就會(huì)發(fā)現(xiàn)多出來(lái)了2 個(gè)進(jìn)程:
PID PORT STAT SIZE SHARED %CPU COMMAND
1 S 134K 0K 0.0 init
2 S 0K 0K 0.0 keventd
3 S 0K 0K 0.0 ksoftirqd_CPU0
4 S 0K 0K 0.0 kswapd
5 S 0K 0K 0.0 bdflush
6 S 0K 0K 0.0 kupdated
15 S0 R 140K 0K 0.0 /bin/sh
16 S 70K 0K 0.0 /bin/inetd
17 S 268K 0K 0.0 /bin/boa
19 S 74K 0K 0.0 /bin/telnetd
20 p0 S 134K 0K 0.0 sh
下面的第19、20 號(hào)進(jìn)程就是新的。也就是和telnet 有關(guān)的兩個(gè)進(jìn)程
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
移植Linux內(nèi)核-映像文件
linux內(nèi)核編譯后vmlinux, Image, zImag區(qū)別
boa服務(wù)器配置
uclinux下靜態(tài)/動(dòng)態(tài)加載驅(qū)動(dòng)程序的方法
uClinux系統(tǒng)分析
程序添加到uClinux的通用方法
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服