|
|
from (<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.dailzh.net> http://www.dailzh.net</a>)</P><P> Linux和uClinux<BR> 1991年8月,芬蘭的一個(gè)學(xué)生在comp.os.minix新聞組貼上了以下這段話(huà):</P><P> 你好所有使用minix的人-我正在為386(486)AT做一個(gè)免費(fèi)的操作系統(tǒng)(只是為了愛(ài)好,不會(huì)象gnu那樣很大很專(zhuān)業(yè). </P><P> 這名學(xué)生就是Linus Torvalds, 而他所說(shuō)的'愛(ài)好'就變成我們今天知道的Linux。</P><P> 由于Linux的源代碼公布在互聯(lián)網(wǎng)上,可以免費(fèi)得到,因此從一開(kāi)始就吸引了世界各地的UNIX 行家為L(zhǎng)inux 編寫(xiě)了</P><P> 大量的驅(qū)動(dòng)程序和應(yīng)用軟件,在短短幾年時(shí)間里,Linux 就發(fā)展成為一個(gè)相當(dāng)完善的操作系統(tǒng),而且Linux支持的硬件</P><P> 平臺(tái)是所有操作系統(tǒng)中最多的,目前Linux支持硬件平臺(tái):Intel的IA64、Compaq的Alpha、Sun的Sparc/Sparc64、SGI</P><P> 的Mips、IBM的S396、ARM、PowerPC等。Linux更大的影響在于它正逐漸地應(yīng)用于嵌入式設(shè)備,uClinux正是在這種氛圍</P><P> 下產(chǎn)生的。uClinux就是Micro-Control-Linux,它也是一個(gè)開(kāi)放源碼的項(xiàng)目,uClinux的源代碼和開(kāi)發(fā)工具可以免費(fèi)從</P><P> <img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.uclinux.org> http://www.uclinux.org</a>上下載得到。<BR> uClinux是專(zhuān)為那些沒(méi)有MMU(內(nèi)存管理單元)的嵌入式處理器開(kāi)發(fā)的,和主流的Linux相比,uClinux有以下的特點(diǎn)</P><P> :<BR> 1.簡(jiǎn)化了內(nèi)核加載方式,uClinux的內(nèi)核可以在Flash上直接運(yùn)行:就是把uClinux的內(nèi)核的可執(zhí)行映象燒寫(xiě)</P><P> 到flash上,系統(tǒng)啟動(dòng)時(shí)從Flash的某個(gè)地址開(kāi)始逐句執(zhí)行;也可以加載到內(nèi)存中運(yùn)行:把內(nèi)核的壓縮文件存放在Flash</P><P> 上,系統(tǒng)啟動(dòng)時(shí)讀取壓縮文件在內(nèi)存里解壓,然后開(kāi)始執(zhí)行。<BR> 2.采用了romfs文件系統(tǒng)作為root文件系統(tǒng):這種文件系統(tǒng)相對(duì)于一般的ext2文件系統(tǒng)要求更少的空間,首先內(nèi)核</P><P> 支持romfs文件系統(tǒng)比支持ext2文件系統(tǒng)需要更少的代碼,其次romfs文件系統(tǒng)相對(duì)簡(jiǎn)單,建立文件系統(tǒng)superblock需要</P><P> 更少的存儲(chǔ)空間。Romfs文件系統(tǒng)不支持動(dòng)態(tài)擦寫(xiě),對(duì)于系統(tǒng)需要?jiǎng)討B(tài)保存的數(shù)據(jù)采用RAM盤(pán)的方法處理,RAM盤(pán)采</P><P> 用ext2文件系統(tǒng)。<BR> 3.使用了Flat可執(zhí)行文件格式:elf格式有很大的文件頭,flat文件對(duì)文件頭和一些段信息做了簡(jiǎn)化。<BR> 4.重寫(xiě)了應(yīng)用程序庫(kù): uClibc對(duì)libc做了精簡(jiǎn),uClinux對(duì)用戶(hù)程序采用靜態(tài)連接的形式。</P><P> uClinux的開(kāi)發(fā)環(huán)境<BR> <img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.uclinux.org> www.uclinux.org</a>為uClinux提供了GNU的交叉編譯器,包括以下組件:Gcc交叉編譯器,即在宿主機(jī)上開(kāi)發(fā)編譯目</P><P> 標(biāo)上可運(yùn)行的二進(jìn)制文件;Binutils輔助工具,包括objdump、as、ld等;Gdb調(diào)試器。以在A(yíng)RM7上開(kāi)發(fā)uClinux為例:<BR> 1.獲得uClinux-dist的源碼<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.uclinux.org> www.uclinux.org</a>上定期為新推出的Linux內(nèi)核推出相應(yīng)的源碼包,最新的版本為</P><P> Kernel-2.4.21,可以從<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.uclinux.org/pub/uClinux/dist/> http://www.uclinux.org/pub/uClinux/dist/</a> 上免費(fèi)下載得到。這個(gè)源碼包里包含</P><P> 了uCLinux-2.4.21、uClibc和已經(jīng)移植到uClinux下的用戶(hù)應(yīng)用程序。下載完后,會(huì)得到一</P><P> 個(gè)uClinux-dist-20030522.tar.gz的文件,把它保存到/home目錄下,然后執(zhí)行:tar zxvf </P><P> uClinux-dist-20030522.tar.gz,當(dāng)tar程序運(yùn)行完畢后,在/home目錄下會(huì)有一個(gè)/home/uClinux-dist的新目錄,這<BR> 個(gè)目錄就是uClinux的源碼根目錄,里面有進(jìn)行uClinux開(kāi)發(fā)的所有的源代碼。<BR> 2.獲得ARM開(kāi)發(fā)工<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.uclinux.org> www.uclinux.org</a>提供uClinux源碼的同時(shí)還提供相應(yīng)的交叉編譯工具。要在開(kāi)發(fā)主機(jī)上</P><P> 為ARM7目標(biāo)系統(tǒng)編譯uClinux,還需要從<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.uclinux.org/pub/uClinux/arm-elf-tools/> http://www.uclinux.org/pub/uClinux/arm-elf-tools/</a> 上下載ARM交叉編譯</P><P> 器:arm-elf-tools-20030314.sh。得到這個(gè)文件以后,執(zhí)行以下命令:sh arm-elf-tools-20030314.sh,這個(gè)命令</P><P> 會(huì)在開(kāi)發(fā)主機(jī)上自動(dòng)建立一個(gè)uClinux-ARM的交叉編譯環(huán)境。鍵入arm-elf-gcc, 如果能看到下面的輸出信息:<BR> Reading specs from /usr/local/lib/gcc-lib/arm-elf/2.95.3/specsgcc version 2.95.3 20010315 (release)<BR> (ColdFire patches - 20010318 from <img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://fiddes.net/coldfire/> http://fiddes.net/coldfire/</a>)(uClinux XIP and shared lib patches <BR> from <img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.snapgear.com/> http://www.snapgear.com/</a>)<BR> 表示uClinux-ARM的交叉編譯環(huán)境已經(jīng)建立起來(lái)了。</P><P> 現(xiàn)在開(kāi)發(fā)主機(jī)里已經(jīng)有了uClinux的源代碼和編譯這些源代碼的工具,也可以用make menuconfig, make等命令來(lái)</P><P> 編譯uClinux和用戶(hù)程序,為ARM目標(biāo)板編譯了一個(gè)內(nèi)核映像文件,接下來(lái)要做得是需要一塊ARM7的開(kāi)發(fā)板來(lái)運(yùn)行這個(gè)映</P><P> 像文件(關(guān)于如何編譯uClinux和用戶(hù)程序請(qǐng)<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.uClinux.org> www.uClinux.org</a>上得相關(guān)文檔)。</P><P> 構(gòu)建ARM7-uClinux開(kāi)發(fā)板<BR> uClinux只需要極少的硬件資源就可運(yùn)行起來(lái),以ARM7TDMI為例,只需要以下硬件:<BR> 1.CPU – Samsung S3C4510B<BR> 2.SDRAM 8M以上<BR> 3.一個(gè)簡(jiǎn)易的串口<BR> 4.2M Flash<BR> 5.一個(gè)以太網(wǎng)接口(可選)<BR> 目前各嵌入式微處理器的廠(chǎng)商在推出每款處理器的同時(shí)都會(huì)提供一個(gè)Demo板,供用戶(hù)來(lái)測(cè)試微處理器的性</P><P> 能。Samsung公司對(duì)S3C4510B處理器提供了一款SNDS100的Demo板。Demo板的原理圖可以從Samsung公司的網(wǎng)站上免費(fèi)下</P><P> 載,對(duì)這個(gè)原理圖作一些修改,只保留上面列出的5個(gè)部分,去掉其他多余的部分。修改以后的原理圖就是一個(gè)能夠運(yùn)行</P><P> uClinux的ARM7目標(biāo)板原理圖,然后根據(jù)這個(gè)原理圖去加工幾張PCB板,焊上相應(yīng)的元件,一塊能運(yùn)行uClinux的ARM7開(kāi)</P><P> 發(fā)板就做成了(這款開(kāi)發(fā)板相應(yīng)得原理圖、PCB圖可以從<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.dailzh.net> http://www.dailzh.net</a>上免費(fèi)下載得到)。<BR> 慢著,雖然這塊開(kāi)發(fā)板已經(jīng)焊接完成,但目前它只是一堆電子零件的簡(jiǎn)單組合,要在它上面跑uClinux,還需要相</P><P> 應(yīng)的軟件來(lái)管理這些硬件。<BR> 前面提到uClinux可以從Flash中直接運(yùn)行,就是說(shuō)可以將uClinux的映像文件直接燒寫(xiě)到Flash中,然后上</P><P> 電,uClinux會(huì)從Flash中啟動(dòng)嗎?是的,確實(shí)如此,F(xiàn)在要做的就是如何將uClinux的內(nèi)核映像燒寫(xiě)到Flash中。用寫(xiě)入</P><P> 器將uClinux內(nèi)核映像寫(xiě)入到Flash中,然后將Flash焊接到pcb板上或插到開(kāi)發(fā)板的flash的插座上可以嗎?當(dāng)然可以,</P><P> 如果你有寫(xiě)入器的話(huà)。不過(guò),很少有人手里能有這種寫(xiě)入器。我們需要的是一個(gè)廉價(jià)的Flash寫(xiě)入方</P><P> 案。用JTAG,S3C4510B上集成了一個(gè)JTAG,通過(guò)JTAG我們可以控制S3C4510B上所有管腳,這樣可以通過(guò)向JTAG接口輸</P><P> 入相應(yīng)的指令和數(shù)據(jù),用軟件的方法在S3C4510B的數(shù)據(jù)、地址和控制總線(xiàn)上產(chǎn)生出Flash器件的讀寫(xiě)操作時(shí)</P><P> 序,將uClinux的內(nèi)核映像文件燒寫(xiě)到Flash中(關(guān)于S3C4510B的JTAG接口電纜的制作和下載燒寫(xiě)uClinux映像文件</P><P> 到Flash中的程序可執(zhí)行文件和源代碼請(qǐng)參閱<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.dailzh.net> http://www.dailzh.net</a>上相關(guān)內(nèi)容)。</P><P> 終于將uClinux的映像文件燒寫(xiě)到Flash中了,用一根串口電纜將ARM7開(kāi)發(fā)板和開(kāi)發(fā)主機(jī)的Com1口連接起來(lái),從網(wǎng)上</P><P> 下載一個(gè)tip程序,執(zhí)行這個(gè)命令:<BR> tip –l /dev/ttyS0 –s 19200<BR> 等屏幕上顯示 connected.以后,將ARM7開(kāi)發(fā)板的電源接通。如果夠幸運(yùn)的話(huà),你應(yīng)該看到下面的信息:<BR> >>Linux version 2.4.20-uc0 (root@dailzh) (gcc version 2.95.3<BR> >>20010315 (release)(ColdFire patches - 20010318 from <img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://fiddes.net/coldfire/> http://fiddes.net/coldfire/</a>)<BR> >>(uClinux XIP and shared lib patches from <img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.snapgear.com/> http://www.snapgear.com/</a>)) 一 5月19 23:44:11 CST 2003<BR> >>Processor: Samsung S3C4510B revision 6<BR> >>Architecture: SNDS100<BR> >>On node 0 totalpages: 4096<BR> >>zone(0): 0 pages.<BR> >>zone(1): 4096 pages.<BR> >>zone(2): 0 pages.<BR> >>Kernel command line: root=/dev/rom0<BR> >>Calibrating delay loop... 49.76 BogoMIPS<BR> …<BR> >>Command: cat /etc/motd<BR> >>Welcome to uClinux.org<BR> >>For further information check: <img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.uclinux.org/> http://www.uclinux.org/</a><BR> >>\><BR> uClinux在A(yíng)RM7目標(biāo)板上已經(jīng)運(yùn)行起來(lái)了,鍵入熟悉的ls命令,看有什么輸出。</P><P> 通過(guò)JTAG接口燒寫(xiě)uClinux映像文件到Flash中速度太慢,調(diào)試uClinux內(nèi)核非常不方便,有沒(méi)有其他的方法?有,</P><P> uClinux除了可以從Flash中直接運(yùn)行外,還可以加載到內(nèi)存中運(yùn)行。我們來(lái)為ARM7開(kāi)發(fā)板寫(xiě)一</P><P> 個(gè)Bootloader,Bootloader的作用是初始化ARM7開(kāi)發(fā)板,然后通過(guò)以太網(wǎng)接口將uClinux映像下載到內(nèi)存中,然后從內(nèi)</P><P> 存中運(yùn)行uClinux。這種方法下載uClinux內(nèi)核映像只需要10幾秒,適合于開(kāi)發(fā)階段經(jīng)常修改uClinux內(nèi)核時(shí)使</P><P> 用(Bootloader for ARM7的源代碼可以從<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.dailzh.net> http://www.dailzh.net</a> 上下載得到)。調(diào)試完uClinux的內(nèi)核以后,可以再</P><P> 通過(guò)JTAG接口燒寫(xiě)uClinux映像文件到Flash中,這樣又可以直接從Flash中運(yùn)行調(diào)試好的uClinux了。</P><P> uClinux下用戶(hù)程序的開(kāi)發(fā)和調(diào)試<BR> 現(xiàn)在A(yíng)RM7開(kāi)發(fā)板可以運(yùn)行uClinux了,如何開(kāi)發(fā)uClinux下的應(yīng)用程序呢?和在普通計(jì)算機(jī)上開(kāi)發(fā)Linux程序一樣,</P><P> 首先編寫(xiě)應(yīng)用程序的源代碼,只不過(guò)編譯的時(shí)候不能用gcc編譯,需要用arm-elf-gcc編譯。編譯以后的可執(zhí)行文件必須</P><P> 下載到ARM7開(kāi)發(fā)板上才能運(yùn)行,下載程序到目標(biāo)板上可以通過(guò)在uClinux中啟用tftpd程序,在開(kāi)發(fā)主機(jī)端用tftpcmd 程</P><P> 序來(lái)下載,然后在uClinux的控制臺(tái)窗口鍵入可執(zhí)行文件名的方法來(lái)運(yùn)行。如果想要應(yīng)用程序在uClinux啟動(dòng)時(shí)自動(dòng)運(yùn)行</P><P> ,可以修改uClinux系統(tǒng)中/etc/rc文件的內(nèi)容來(lái)來(lái)實(shí)現(xiàn)。如果要用gdb來(lái)調(diào)試用戶(hù)程序,可以<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.uclinux.org> www.uclinux.org</a>上</P><P> 的相關(guān)文檔。</P><P> 關(guān)于作者<BR> dai lizhou , 愛(ài)好嵌入式系統(tǒng)和Linux開(kāi)發(fā), 如果你對(duì)嵌入式Linux開(kāi)發(fā)有興趣請(qǐng)?jiān)L問(wèn)我們的網(wǎng)</P><P> 站<img align=absmiddle src=pic/url.gif border=0><a target=_blank href=http://www.dailzh.net> http://www.dailzh.net</a>, 誠(chéng)邀你的加盟。</P><P>
|
|
狀 態(tài):
離線(xiàn)
公司簡(jiǎn)介
產(chǎn)品目錄
|
|
公司名稱(chēng):
|
中華工控網(wǎng)
|
聯(lián) 系 人: |
客服中心
|
電 話(huà): |
0755-26546361
|
傳 真: |
0755-26585268 |
地 址: |
深圳市南山區(qū)創(chuàng)業(yè)路現(xiàn)代城華庭1棟6A |
郵 編: |
518054 |
主 頁(yè): |
|
|
|
|
|