通過自己這幾天的摸索終於把linux交叉開發環境搭建好了,現在總結一下自己做的工作。
在嵌入式開發的過程中,PC應用開發是直接在pc上進行的,但是嵌入式linux應用開發則必須依靠宿主機才能進行。所以,在宿主機上搭建針對某種目標機的應用開發環境是進行嵌入式linux應用開發的第一步。我是在windows XP的平臺上來做的,利用虛擬機中的linux來搭建所需要的開發平臺。
在嵌入式開發領域廣泛的使用NFS(Network Filesystem)來開發文件系統中的應用程序。NFS最初是由Sun公司提出的,NFS使得開發板可以通過網絡遠程掛載宿主機中的文件系統。從開發板的角度來看,訪問宿主機中的文件系統就相當於在訪問本地的文件系統。這樣在宿主機上做了程序修改,就能馬上在開發板上看到修改的運行結果,應用程序的調試效率得到了極大地提高。
一、在虛擬機下安裝Fedora9,並設置其IP地址爲:202.38.214.179,並設置相應的子網掩碼和網關。
二、在pc上實現數據交互的常用接口有串口、並口、網絡接口、USB接口等,在這裏我們採用串口來實現交互,在mini2440開發板中提供了一個9針的串口。虛擬機設置串口,在本
1) 打開虛擬機的配置界面,單擊"Add"按鈕。
2) 在彈出的窗口中選擇需要安裝的"Serial Port"選項,如圖1所示:
3) 選擇串口類型"使用位於主機上的物理串行端口(P)".
4) 單擊"完成"按鈕完成串口的創建.
三、Minicom的使用:在我們用windows開發板進行連接通行的時候,是採用"超級終端"。在linux系統中,常用的串口通信軟件是Minicom。由於嵌入式linux應用開發是在linux平
啓動Minicom [root#lcoalhost]#minicom -s
啓動後minicom會自動讀取默認的配置文件,由於Minicom默認的部分配置不符合實際環境的要求,所以需要進行修改,修改過程如下:
1) 啓動minicom如圖2所示:
2) 選中"Serial port setup"選項對串口參數進行配置,配置界面如圖3所示:
從上面我們可以看到minicom採用的設備是ttyS5,在linux中/dev/目錄下的ttyS0、ttyS1、ttyS2、ttyS3是對應與串口COM1、COM2、COM3、COM4的,由於在本人的實驗在
開始設置的過程中的一些原因,在winodws下采用COM6端口的終端,所以這時候在linux得得到新的串口設備ttyS5,我是通過語句:
mknod -m 666 /dev/ttyS0 c 4 64
得到COM6對應的ttyS5串口的。最後退出Minicom設置界面。
四、設置宿主機上的NFS。
啓動NFS: [root#lcoalhost]#/etc/init.d/nfs start
啓動rpcbind: [root#lcoalhost]#/etc/init.d/rpcbind start
關閉防火牆: [root#lcoalhost]#/etc/init.d/iptables stop
設置共享目錄 [root#lcoalhost]#vim /etc/exports
在編輯nfs服務的配置文件(注意:第一次打開的時候是空的,在exports文件中添加)
/opt/FriendlyARM/mini2440/root_qtopia *(rw,sync,no_root_squash)
其中:/opt/FriendlyARM/mini2440/root_qtopia 表示nfs共享目錄,它可以作爲開發板的根
文件系統通過nfs掛接;
* 表示所有的客戶機都可以掛接此目錄
rw 表示掛接此目錄的客戶機對該目錄有讀寫的權力
sync 所有數據在請求時寫入共享
no_root_squash 表示允許掛接此目錄的客戶機享有該主機的root 身份
測試nfs是否成功,可以輸入以下命令檢驗:
[root#lcoalhost]#mount -t nfs localhost:/opt/FriendlyARM/mini2440/root_qtopia /mnt/
運行後在到目錄/mnt/下查看發現和目錄/opt/FriendlyARM/mini2440/root_qtopia下的內容一樣,這樣nfs就可以了。
五、通過nfs掛載文件系統:啓動mini2440開發板,並設置目標板啓動模式爲 Nand Flash 啓動,在windows的超級終端下我們看到了vivi菜單界面,選擇q進入Goto shell of vivi
,並寫入以下內容:
- Supervivi> param set linux_cmd_line "console=ttySAC0 root=/dev/nfs nfsroot=202.3
- 8.214.179:/opt/FriendlyARM/mini2440/root_qtopia ip=202.38.214.189:202.38.214.179
- :202.38.214.254:255.255.255.0:mini2440:eth0:off"
其中param set linux_cmd_line是設置啓動 linux 時的命令參數。其各參數的含義如下:
root=/dev/nfs 告訴內核使用NFS掛載根文件系統。
nfsroot 是自己開發主機的IP 地址。
“ip=”後面:
第一項(202.38.214.189)是目標板的臨時IP(注意不要和局域網內其他IP 衝突);
第二項(202.38.214.179)是開發主機的IP;
第三項(202.38.214.254)是目標板上網關(GW)的設置;
第四項(255.255.255.0)是子網掩碼;
第五項是開發主機的名字(一般無關緊要,可隨便填寫)
eth0 是網卡設備的名稱。
要注意的是,宿主機的IP地址、網關和子網掩碼必須和所設的參數值保持一致。內核啓動時,會自動掛載NFS服務器共享的目錄。如下所示:
- eth0: link down
- IP-Config: Complete:
- device=eth0, addr=202.38.214.189, mask=255.255.255.0, gw=202.38.214.254,
- host=mini2440, domain=, nis-domain=(none),
- bootserver=202.38.214.179, rootserver=202.38.214.179, rootpath=
- Looking up port of RPC 100003/2 on 202.38.214.179
- eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
- Looking up port of RPC 100005/1 on 202.38.214.179
- VFS: Mounted root (nfs filesystem) on device 0:11.
- Freeing init memory: 160K
- [10/Sep/2008:03:06:06 +0000] boa: server version Boa/0.94.13
- [10/Sep/2008:03:06:06 +0000] boa: server built Mar 26 2009 at 15:28:42.
- [10/Sep/2008:03:06:06 +0000] boa: starting server pid=699, port 80
- Try to bring eth0 interface up......NFS root ...Done
- Please press Enter to activate this console.
六、掛載了NFS文件系統,就可以在宿主機上進行嵌入式應用程序的開發了。
比如我們在宿主機上的root_qtopia目錄下寫一個helloword的c語言程序,通過arm-linux-gcc -o test test.c的編譯成爲在arm上可運行的可執行文件。