嵌入式開發環境的建立- 建立宿主主機開發環境
原地址:http://blog.csdn.net/duwchy/article/details/1612878
在進行嵌入式3D等開發,必須有一臺x86的PC機作為宿主機, 絕大多數的 Linux 軟件開發都是以 native 方式進行的,即本機(HOST)開發、調試,本機運行的方式。這種方式通常不適合於嵌入式系統的軟件開發,因為對於嵌入式系統的開發,沒有足夠的資源在本機(即開發板上系統)運行開發工具和調試工具。通常的嵌入式系統的軟件開發采用一種交叉編譯調試的方式。交叉編譯調試環境建立在宿主機(即一臺 PC 機)上,對應的開發板叫做目標板。
開發時使用宿主機上的交叉編譯、匯編及連接工具形成可執行的二進制代碼,(這種可執行代碼並不能在宿主機上執行,而只能在目標板上執行。 然後把可執 )行文件下載到目標機上運行。調試時的方法很多,可以使用串口,以太網口等,具體使用哪種調試方法可以根據目標機處理器所提供的支持作出選擇。宿主機和目標板的處理器一般都不相同,宿主機為 Intel 或 AMD 處理器, 而目標板如HHPXA270 為 PXA270,GNU 編譯器提供這樣的功能,在編譯編譯器時可以選擇開發所需的宿主機和目標機從而建立開發環境。所以在進行嵌入式開發前第一步的工作就是要安裝一臺裝有指定操作系統的 PC 機作宿主開發機,由於我選擇移植的嵌入式操作系統是linux,所以宿主機上的操作系統也跟這個保持一致,也是Linux,只不過它們所對應的計算機體系結構是不同的而已,一個是PXA270基於ARM的,一個是基於x86的。但 Linux 有多個發行版本, 而我選擇的是國人自己開發的MagicLinux,是開源操作系統,對中文支持很好,系統小巧穩定,功能齊全,支持了一下我國的開源事業。然後在宿主機上要建立交叉編譯調
試的開發環境。環境的建立需要許多的軟件模塊協同工作,這將是一個比較繁雜的工作。
宿主機操作系統選擇安裝好之後,我們需要做的是交叉編譯工具鏈的安裝,由於我們PC機上的CPU體系結構和開發板上的是完全不同的,一個是x86,一個是ARM,而開發板上又不可以對我們開發的程序進行編譯鏈接,所以我們需要一種特殊的編譯工具進行在PC機上進行編譯,然後編譯的程序可以拿到開發板上運行的,arm linux 交叉編譯工具鏈可以幫我們這個忙,下面將介紹交叉編譯工具的安裝。另外嵌入式開發通常要求宿主機配置有網絡,支持 NFS(為交叉開發調試程序時 mount 所
用),還要支持 TFTP 服務器(為下載燒寫調試內核所用)等等,這個將在後面介紹。
1. ARM Linux交叉編譯工具的安裝。
ARM Linux 在網絡上有許多開源的代碼,也有為x86平臺編譯好的可執行文件,我下載的是 arm-unknown-linux 工具,GCC內部版本為2.95.2,下載工具包
armv4l-unknown-linux-gcc-2.95.2.tar.gz
直接解壓安裝到 /opt/host 目錄就可以了
tar xzvf armv4l-unknown-linux-gcc-2.95.2.tar.gz -C /opt/host
在 /opt/host 就會有一個名為 armv4l 的目錄,裏面就有我們需要用到的交叉編譯GCC工具,以後交叉編譯工作都需要用到它。
2. 配置PC機的IP地址
由於板子u-boot(嵌入式的裝載程序,後面將介紹)的tftp有默認的服務器IP地址,而我需要從PC機tftp服務器上下載燒寫或者調試內核,所以我需要設置PC機的IP,執行下面命令:
ifconfig eth0 192.168.2.111
ifconfig eth0 broadcast 192.168.2.255
ifconfig eth0 netmask 255.255.255.0
3. 在PC機上配置NFS服務器
由於開發板上的flash空間有限,並且flash不可以頻繁的刷新,而且開發板上ramdisk文件系統空間的限制得比較少,再有提供給3D開發的鏈接庫比較大,而3D程序開發過程中測試調試次數和頻繁,所以不可能每次都把程序燒到文件系統上進行調試,所以我們可以使用一種網絡文件共享協議NFS(Network File System) ,把PC上的文件系統共享到開發板上的文件系統,開發板就可以把這個共享文件系統裏的文件看成自己的文件。所以調試起來就很方便了。只有到了程序最終發布,才把程序燒寫到開發板的flash上。下面是NFS服務器的配置過程。
3.1 以root的身份在控制臺輸入setup,在系統服務選項中選中[*]nfs [*]portmap 服務選項
portmap服務對NFS 是必須的,因為它是NFS 的動態端口分配守護進程,如果portmap不啟動,NFS就啟動不了的。如果Linux上系統服務上沒有這個配置選項,可以到網上搜索一些相關的軟件包。
3.2 編輯 /etc/exports 文件
exports文件是NFS的共享目錄配置文件,主要是指定共享目錄和共享策略。使用vi命令編輯,在文件中加入類似下面的內容:
/ *(rw,sync)
/root/share *(rw,sync)
第一條規則 / 表示整個根目錄進行共享,* 表示對於所有用戶共享,rw 可讀寫,sync 文件同步
第一條規則 /root/share 表示共享目錄,當然你還可以類似的添加其他目錄進行共享。後面的內容表示對ip為10.13.9.19的主機賦予讀寫權限,其他機器 * 僅有讀寫權限。
3.3 然後在控制臺分別執行以下兩條命令
[root]# service portmap restart
[root]# service nfs restart 或者 /etc/rc.d/init.d/nfs restart
如果看到一連串的[ok]時,表示已經啟動成功了。如果第一次啟動,nfs ,又使用restart命令,可能開始會出現一些[FAILED],那是在停止nfs服務,而nfs服務還沒有啟動所以會FAILED。
3.4 測試NFS服務
要測試NFS是否真正配置的成功,只要進行以下測試:
[root]# mout -t nfs 10.13.9.19:/root/share /mnt #/mnt 是掛載到本地的服務
如果你在/mnt 下可以看到NFS共享目錄的內容,表示你NFS設置成功了。
使用#umount /mnt 取消掛載。
使用minicom(後面將介紹)超級終端通過串口控制嵌入式Linux系統,然後執行mount操作就可以掛載共享文件系統了,不過這裏的mount操作跟PC機子上的mount有點不一樣,在我使用的開發板上需要像下面這樣:
mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.2.111:/root/share /mnt
192.168.2.111是pc機子的ip,/mnt這個目錄是我板上一個目錄,“rsize=1024,wsize=1024 ”設置很重要,沒設置對的時候,一運行Qt-embedded(嵌入式GUI系統,後面將介紹)程序就出現:
nfs: server ********* not responding, still trying.
的錯誤。只能用1024,其他都不行,應該是與網絡系統的MTU有關。
4. 在PC機上配置TFTP服務器
TFTP是在燒寫和調試嵌入式Linux內核時使用的,下面是配置過程
4.1 下載軟件包
下載 tftp-server-0.43-1.i386.rpm和tftp-hpa-0.48.tar.gz(可能有更新版本的)兩個包,一個是服務器,一個包含客戶端。
4.2 安裝tftp-server-0.43-1.i386.rpm 服務器
[root]# rpm -ivh --nodeps tftp-server-0.43-1.i386.rpm,此時根目錄下會多一個tftpboot的目錄,是tftp的共享目錄
4.3 編譯安裝tftp-hpa-0.48.tar.gz
[root]# tar vxfz tftp-hpa-0.48.tar.gz
[root]# cd tftp-hpa-0.48
[root]# make
[root]# make install
4.4 使用超級用戶身份運行setup命令,在系統服務理選上tftp服務 [*]tftp
4.5 啟動tftp服務器
[root]# service xinetd restart
看到啟動[OK]就可以了
4.6 測試tftp
1).在終端輸入命令
[root]# netstat -a | grep tftp
如果有相關的輸出,就表明tftp配置成功了。
2).可以在tftpboot中放一些文件,然後使用tftp客戶端命令連接服務器,然後用GET命令下載文件,如果下載成功,那麽配置成功了。
Copyright (C) duwchy, Please give source when reprint.
嵌入式開發環境的建立- 建立宿主主機開發環境