歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

自己動手打造嵌入式Linux軟硬件開發環境

  Linux和UClinux  1991年8月,芬蘭的一個學生在comp.os.minix新聞組貼上了以下這段話:    你好所有使用minix的人-我正在為386(486)AT做一個免費的操作系統(只是為了愛好,不會象gnu那樣很大很專業.    這名學生就是Linus Torvalds, 而他所說的'愛好'就變成我們今天知道的Linux。    由於Linux的源代碼公布在互聯網上,可以免費得到,因此從一開始就吸引了世界各地的UNIX 行家為Linux 編寫了大量的驅動程序和應用軟件,在短短幾年時間裡,Linux 就發展成為一個相當完善的操作系統,而且Linux支持的硬件平台是所有操作系統中最多的,目前Linux支持硬件平台:Intel的IA64、Compaq的Alpha、Sun的Sparc/Sparc64、SGI的Mips、IBM的S396、ARM、PowerPC等。Linux更大的影響在於它正逐漸地應用於嵌入式設備,uClinux正是在這種氛圍下產生的。uClinux就是Micro-Control-Linux,它也是一個開放源碼的項目,uClinux的源代碼和開發工具可以免費從http://www.uclinux.org上下載得到。  uClinux是專為那些沒有MMU(內存管理單元)的嵌入式處理器開發的,和主流的Linux相比,uClinux有以下的特點:    1.簡化了內核加載方式,uClinux的內核可以在Flash上直接運行:就是把uClinux的內核的可執行映象燒寫到flash上,系統啟動時從Flash的某個地址開始逐句執行;也可以加載到內存中運行:把內核的壓縮文件存放在Flash上,系統啟動時讀取壓縮文件在內存裡解壓,然後開始執行。    2.采用了romfs文件系統作為root文件系統:這種文件系統相對於一般的ext2文件系統要求更少的空間,首先內核支持romfs文件系統比支持ext2文件系統需要更少的代碼,其次romfs文件系統相對簡單,建立文件系統superblock需要更少的存儲空間。Romfs文件系統不支持動態擦寫,對於系統需要動態保存的數據采用RAM盤的方法處理,RAM盤采用ext2文件系統。    3.使用了Flat可執行文件格式:elf格式有很大的文件頭,flat文件對文件頭和一些段信息做了簡化。    4.重寫了應用程序庫: uClibc對libc做了精簡,uClinux對用戶程序采用靜態連接的形式。    uClinux的開發環境  www.uclinux.org為uClinux提供了GNU的...發uClinux為例:    1.獲得uClinux-dist的源碼包,www.uclinux.org上定期為新推出的Linu...b/uClinux/dist/ 上免費下載得到。這個源碼包裡包含了uCLinux-2.4.21、uClibc和已經移植到uClinux下的用戶應用程序。下載完後,會得到一個uClinux-dist-20030522.tar.gz的文件,把它保存到/home目錄下,然後執行:tar zxvf uClinux-dist-20030522.tar.gz,當tar程序運行完畢後,在/home目錄下會有一個/home/uClinux-dist的新目錄,這  個目錄就是uClinux的源碼根目錄,裡面有進行uClinux開發的所有的源代碼。  2.獲得ARM開發工具,www.uclinux.org提供uClinux源碼的同?../arm-elf-tools/ 上下載ARM交叉編譯器:arm-elf-tools-20030314.sh。得到這個文件以後,執行以下命令:sh arm-elf-tools-20030314.sh,這個命令會在開發主機上自動建立一個uClinux-ARM的交叉編譯環境。鍵入arm-elf-gcc, 如果能看到下面的輸出信息:  Reading specs from /usr/local/lib/gcc-lib/arm-elf/2.95.3/specsgcc version 2.95.3 20010315 (release)  (ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches  from http://www.snapgear.com/)  表示uClinux-ARM的交叉編譯環境已經建立起來了。    現在開發主機裡已經有了uClinux的源代碼和編譯這些源代碼的工具,也可以用make menuconfig, make等命令來編譯uClinux和用戶程序,為ARM目標板編譯了一個內核映像文件,接下來要做得是需要一塊ARM7的開發板來運行這個映像文件(關於如何編譯uClinux和用戶程序請參考www.uClinux.org上得相關文檔)。


    構建ARM7-uClinux開發板  uClinux只需要極少的硬件資源就可運行起來,以ARM7TDMI為例,只需要以下硬件:  1.CPU – Samsung S3C4510B  2.SDRAM 8M以上  3.一個簡易的串口  4.2M Flash  5.一個以太網接口(可選)    目前各嵌入式微處理器的廠商在推出每款處理器的同時都會提供一個Demo板,供用戶來測試微處理器的性能。Samsung公司對S3C4510B處理器提供了一款SNDS100的Demo板。Demo板的原理圖可以從Samsung公司的網站上免費下載,對這個原理圖作一些修改,只保留上面列出的5個部分,去掉其他多余的部分。修改以後的原理圖就是一個能夠運行uClinux的ARM7目標板原理圖,然後根據這個原理圖去加工幾張PCB板,焊上相應的元件,一塊能運行uClinux的ARM7開發板就做成了(這款開發板相應得原理圖、PCB圖可以從http://www.dailzh.net上免費下載得到)。    慢著,雖然這塊開發板已經焊接完成,但目前它只是一堆電子零件的簡單組合,要在它上面跑uClinux,還需要相應的軟件來管理這些硬件。    前面提到uClinux可以從Flash中直接運行,就是說可以將uClinux的映像文件直接燒寫到Flash中,然後上電,uClinux會從Flash中啟動嗎?是的,確實如此。現在要做的就是如何將uClinux的內核映像燒寫到Flash中。用寫入器將uClinux內核映像寫入到Flash中,然後將Flash焊接到pcb板上或插到開發板的flash的插座上可以嗎?當然可以,如果你有寫入器的話。不過,很少有人手裡能有這種寫入器。我們需要的是一個廉價的Flash寫入方案。用JTAG,S3C4510B上集成了一個JTAG,通過JTAG我們可以控制S3C4510B上所有管腳,這樣可以通過向JTAG接口輸入相應的指令和數據,用軟件的方法在S3C4510B的數據、地址和控制總線上產生出Flash器件的讀寫操作時序,將uClinux的內核映像文件燒寫到Flash中(關於S3C4510B的JTAG接口電纜的制作和下載燒寫uClinux映像文件到Flash中的程序可執行文件和源代碼請參閱http://www.dailzh.net上相關內容)。    終於將uClinux的映像文件燒寫到Flash中了,用一根串口電纜將ARM7開發板和開發主機的Com1口連接起來,從網上下載一個tip程序,執行這個命令:    tip –l /dev/ttyS0 –s 19200  等屏幕上顯示 connected.以後,將ARM7開發板的電源接通。如果夠幸運的話,你應該看到下面的信息:  <<Linux version 2.4.20-uc0 (root@dailzh) (gcc version 2.95.3  <<20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)  <<(uClinux XIP and shared lib patches from http://www.snapgear.com/)) 一 5月19 23:44:11 CST 2003  <<Processor: Samsung S3C4510B revision 6  <<Architecture: SNDS100  <<On node 0 totalpages: 4096  <<zone(0): 0 pages.  <<zone(1): 4096 pages.  <<zone(2): 0 pages.  <<Kernel command line: root=/dev/rom0  <<Calibrating delay loop... 49.76 BogoMIPS  …  <<Command: cat /etc/motd  <<Welcome to uClinux.org  <<For further information check: http://www.uclinux.org/  <<\<  uClinux在ARM7目標板上已經運行起來了,鍵入熟悉的ls命令,看有什麼輸出。    通過JTAG接口燒寫uClinux映像文件到Flash中速度太慢,調試uClinux內核非常不方便,有沒有其他的方法?有,uClinux除了可以從Flash中直接運行外,還可以加載到內存中運行。我們來為ARM7開發板寫一個Bootloader,Bootloader的作用是初始化ARM7開發板,然後通過以太網接口將uClinux映像下載到內存中,然後從內存中運行uClinux。這種方法下載uClinux內核映像只需要10幾秒,適合於開發階段經常修改uClinux內核時使用(Bootloader for ARM7的源代碼可以從http://www.dailzh.net 上下載得到)。調試完uClinux的內核以後,可以再通過JTAG接口燒寫uClinux映像文件到Flash中,這樣又可以直接從Flash中運行調試好的uClinux了。    uClinux下用戶程序的開發和調試  現在ARM7開發板可以運行uClinux了,如何開發uClinux下的應用程序呢?和在普通計算機上開發Linux程序一樣,首先編寫應用程序的源代碼,只不過編譯的時候不能用gcc編譯,需要用arm-elf-gcc編譯。編譯以後的可執行文件必須下載到ARM7開發板上才能運行,下載程序到目標板上可以通過在uClinux中啟用tFTPd程序,在開發主機端用tftpcmd 程序來下載,然後在uClinux的控制台窗口鍵入可執行文件名的方法來運行。

如果想要應用程序在uClinux啟動時自動運行,可以修改uClinux系統中/etc/rc文件的內容來來實現。如果要用gdb來調試用戶程序,可以參考www.uclinux.org上的相關文檔。



Copyright © Linux教程網 All Rights Reserved