其實從很早我就想深入學習Linux,但時間有限,并且Linux門檻挺高,不是很容易上手。最近由于隧道項目中用到嵌入式Linux(Arm CPU上的Linux),并且提供硬體的機關針對Linux的程式設計收費很高,并且時間很長,是以猶豫再三,決定開始深入學習Linux,并在學習過程中完成預定的任務。
沒有想到,在嵌入式Linux上運作一個最簡單的“Hello Liunx”程式就費了很大的周折,不過功夫不負有心人,經過幾天的艱難跋涉,總算成功了,下面我把我的曆程說一下,給後來人有個參考。
要想在嵌入式Linux運作程式,需要有下面幾個問題解決:
1、需要一個基于Arm的gcc交叉編譯器;
2、需要Windows與VPC上的Linux進行互動,以便交換檔案;
3、嵌入式Linux系統需要和VPC上的Linux系統或Windows系統進行互動,以便互動檔案;

第一個問題,相對比較容易解決,直接和中間廠商要來了cross-2.95.3.tar.bz2 安裝包,這是一款基于Arm平台上的交叉編輯器。直接解壓到任意目錄即可。
第二個問題,有些棘手,查了若幹資料,終于找到可行的辦法。
1、在Windows XP建一個共享檔案夾,如“share”
2、虛拟機運作起來後,在Linux指令行方式輸入:smbmount //ip位址或計算機名/共享檔案夾名 挂載點
3、Ok,連接配接成功。
第三個問題,原想着很容易,卻沒有想到是最難的,中間廠商的辦法如下:
采用目标闆挂載NFS目錄的方式進行開發
主機:NFS伺服器
1、修改配置檔案etc/exports,如
/nfs/rootfs 192.168.0.X(rw,sync,no_root_squash) //具體含義略
2、配置其為所有使用者可讀,chmod 644 /etc/exports
3、讓NFS伺服器重新載入 etc/exports, /etc/init.d/nfs reload
4、檢查防火牆,不要屏蔽相應端口
目标闆:核心需要支援NFS
Enable:
File Systems à
Network File Systems à
NFS file system support
Provide NFSv3 client support
配置完後,重新編譯核心
目标闆啟動後,mount –t nfs 192.168.0.Y:/nfs/rootfs/mnt –o nolock
按上面一步步做了,目标闆提示RPC什麼錯誤之類,上網查資料,用Servers指令開啟服務,很可惜,目标闆不支援Servers指令。
最後發現目标闆支援FTP伺服器,總數找到一個救命稻草,不過很可惜,使用者密碼未知,問了中間廠商,使用者和密碼仍然錯誤,最後打了n次電話,告訴可以在目标闆上添加新使用者,然後再登入FTP。
很恐怖的是,書本上教的useradd竟然沒有,後來檢視目标闆bin上的檔案,原來是adduser指令,添加上使用者,果然可以登入了。不過linux上的FTP用戶端不好使,Windows自帶的也不行,隻好下了個FlashFXP軟體,還可以。
在虛拟機的Liunx系統編寫如下程式:
#include <stdio.h>
int main(int argc,char **argv)
{
printf("hello linux/n");
}
編寫Makefile檔案
all:tt
tt: test.c
/usr/local/arm/2.95.3/bin/arm-linux-gcc -o tt test.c
clean:
-rm -rf tt
在指令行運作Make指令,生成tt檔案
把tt檔案通過FTP用戶端拷貝到目标闆上。
開始直接輸入[root@()]$tt 沒有反應,查資料,發現原來要這樣(如下),為什麼?暫時不知道!
[root@()]$ ./tt ,竟然有錯誤提示,提示内容如下:-sh:./tt:Permission denied
上網查資料說是權限不夠,需要運作如下指令:chmode 777 tt
運作後,竟然告訴我,沒有這個指令,最後發現原來是 chmod(看來指令的名稱都被中間廠商修改了)。
運作chmod 777 tt 後,在去運作 ./tt ^^#$^#$@ OK ---成功了!
後記:linux的使用習慣與windows有很大的差別,linux聯網需要激活網卡才能工作,運作檔案需要 ./XXX格式,并且有權限的使用者才能執行,類似的小問題,對一個linux菜鳥來說,真是一個又一個的攔路虎,不過到現在總算接近門檻了,對我來說,後面的路還很長,困難才剛剛開始 … … :-(