近打算設計新產品,在Friendly Arm買了一套Matrix5系統研究一下。發現用ARM-Linux開發似乎比較明智些!
但用Windows習慣了,還不太熟悉Linux,而且重裝RH9恐怕很費事。還是先用Win2000吧,Linux熟悉熟悉再說!
看見版上有個Cygwin,可以在Windows下建立仿Linux系統,下了一個試用一下,感覺還不錯,只可惜沒有圖形界面!
根據楊老板所說,Cygwin里可以編譯Matrix5的vivi和kernel。就先以此開始熟悉Linux吧!
大約用了一周左右的時間,終于搞定了vivi和kernel在Cygwin里的編譯。
現在把編譯的過程貼出來,以供有相同感受的兄弟們參考:
?。ㄓ捎贑ygwin里操作全部使用行命令輸入方式,所以先熟悉一下Linux的常用命令)
1、安裝Cygwin:
安裝過程不多說了,開發中心里有參考。不過要提兩點:在系統比較干凈時安裝,建議系統剛啟動完就安裝,否則安裝可能會出錯;另外安裝時一定要裝gcc和ncurse庫,否則menuconfig用不了,如果搞不清就全部安裝吧!
裝完Cygwin后會有一個快捷方式,運行它就可以進入Cygwin系統了。次進Cygwin系統還會有一些初始化過程,完了會進入命令輸入狀態,提示符為“<用戶名>@<計算機名>”。
這里要先說明一下,Linux的文件系統是從/開始的,Cygwin系統的/就是在Windows里安裝Cygwin時選的安裝路徑(X:\cygwin)。如果想在Cygwin里訪問Windows的所有邏輯盤,到/cygdrive里找。比如Windows里的C:就是Cygwin里的/cygdrive/c 。這樣可以在Windows和Cygwin中交叉訪問文件,對于已經熟悉Windows操作的人來說是比較方便的。
還有就是要注意Linux里是區分大小寫的,也就是說“file”和“FILE”不是同一個名字。尤其一些文件或目錄名中既有大寫字母也有小寫字母,注意不要輸錯!
2、安裝arm-linux-gcc:
這個安裝開發中心里也有,去下載一下解開就算安裝好了,注意要解到/opt目錄(Windows中的X:\cygwin\opt)下。
修改啟動腳本/etc/profile文件(可在Windows中用文本編輯器修改X:\cygwin\etc\profile)中的PATH環境變量為
PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/opt/FriendlyARM/crosstool/arm-linux/gcc-2.95.3-glibc-2.2.3/bin:$PATH
gdbserver可以先不用,好象是Debug時才會用到。至少我在編譯時是沒用到。
輸入“arm-linux-gcc -v”,自己測試一下吧。
3、編譯VIVI:
在開發中心已有較詳細的說明。一定要下載版上的“vivi_cygwin.tgz”,不要用光盤里的。預配置文件在包里已經有了(config.friendlyarm),不用再下載。
由于VIVI要用到kernel的一些頭文件,所以需要kernel的源代碼,在光盤里“SBC-2410X/SBC-2410X-Linux/matrix5-kernel-v5.5.tgz”。將vivi和kernel都解到/friendly-arm下,即/friendly-arm/vivi和/friendly-arm/kernel里。然后需修改/friendly-arm/vivi/Makefile里的一些變量設置:
LINUX_INCLUDE_DIR = /friendly-arm/kernel/include/
CROSS_COMPILE = arm-linux-
ARM_GCC_LIBS = /opt/FriendlyARM/crosstool/arm-linux/gcc-2.95.3-glibc-2.2.3/lib/gcc-lib/arm-linux/2.95.3
三個變量在不同位置,自己找一下吧。其中前面兩個變量楊老板已經改好了,核對一下就可以了;注意第三個變量中FriendlyARM中間沒有減號,gcc-2.95.3-glibc-2.2.3中的g是小寫。
為確保編譯的有效性,在編譯之前將vivi里所有的“*.o”和“*.o.flag”文件刪掉(本人曾經上過當)。
進入/friendly-arm/vivi目錄里,輸入“make menuconfig”,開始選擇配置。可以Load也可以自己修改試試(不要亂選,有些選項是不能支持的)。注意Exit時一定要選“Yes”保存配置。
再輸入“make”正式開始編譯,一會兒就完了。如果不報錯,在/friendly-arm/vivi里面就有你自己的“vivi”了。
4、編譯kernel:
這是痛苦的一步,開發中心里雖然有這個條目,但還沒放上去。只好自己摸,搞了好幾天。
kernel的源程序在上面編譯vivi時已經解到/friendly-arm/kernel中了。因為這個程序包已在Linux中編譯過,有一些中間和目標代碼和Cygwin是不兼容的。必須先處理一下,否則不能正常進行編譯。
首先,還是把kennel里所有的“*.o”和“*.o.flag”文件刪掉,以免不必要的麻煩。然后進入/friendly-arm/kernel目錄,可以輸一下“make menuconfig”試試。結果提示出錯。這是由于配置腳本已在Linux中編譯過,在scripts/lxdialog里產生了一個Linux下的可執行程序lxdialog。在Cygwin里這是個壞東西,它既不能執行,還會阻止可執行程序的生成。必須把它刪掉。類似的文件如下:
/friendly-arm/kernel/scripts/lxdialog/lxdialog
/friendly-arm/kernel/scripts/mkdep
/friendly-arm/kernel/scripts/split-include
/friendly-arm/kernel/drivers/char/conmakehash
/friendly-arm/kernel/drivers/net/hamradio/soundmodem/gentbl
這幾個文件必須刪掉,注意是沒有擴展名的文件,不要把源文件“*.c”刪掉!
現在應該可以用“make menuconfig”進行配置了。這里的選項太多,先Load包里的config.friendly配置,待會兒再慢慢研究各個選項吧。同樣,Exit時一定要選“Yes”保存配置。
下面可以開始編譯了。輸入“make zImage”,可以看見開始一個個模塊的編譯。但是過了一、二分鐘,就會報一個錯,大概是說“/friendly-arm/kernel/include/asm/arch/ide.h”沒找到。這個問題很奇怪,按理說頭文件丟失是個低級錯誤,不可能發現不了,不知道RH9中編譯是否也有同樣問題。可以這樣解決,從別的地方復制一個ide.h過來,只要其中有相應的兩個函數定義就可以了。比如:
cp /friendly-arm/kernel/include/asm/arch-l7200/ide.h /friendly-arm/kernel/include/asm/arch/ide.h
再執行“make zImage”應該可以完成編譯了。不過時間比較長,得要好幾分鐘。不報錯的話,在/friendly-arm/kernel/arch/arm/boot目錄里會生成你編譯的zImage 。
接下來,也許你打算自己修改一下“make menuconfig”里的配置。這里有個比較麻煩的問題,你先把“/friendly-arm/kernel/.hdepend”這個文件備份一下。問題是這樣的:當你修改了某些比較關鍵的選項后,會提示你進行“make dep”。此時即使你直接進行“make zImage”,該過程亦會自動先運行。一旦執行到一個要生成“.hdepend”的命令時會提示命令參數太長。再看.hdepend已成了一個空文件。
這個“.hdepend”真是個頭痛的問題,估計在RH9里應該沒這種事,否則這編譯根本進行不下去。開始想把Cygwin的設置改一下應該就可以了,可找了半天也沒找到有關的設置。求助楊工,倒是給了一個辦法,可還是不頂用。直到現在,這個問題仍沒有很好的解決。不過,把我自己用的兩個方法寫出來給大家參考一下:
a)把備份好的“.hdepend”復制回來,修改“/friendly-arm/kernel/Makefile”,將其中一行“scripts/mkdep -- `find $(FINDHPATH) -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` > .hdepend”的行首加一個“#”字符。實際上就是直接使用原有的“.hdepend”,編譯時跳過重新生成該文件。此法已經試過,是可以的。但有什么副作用不知道!
b)仍然要把“Makefile”中生成“.hdepend”那一行去掉,換成下面三個命令行:
scripts/mkdep -- `find $(HPATH)/asm -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` > .hdepend
scripts/mkdep -- `find $(HPATH)/linux -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` >> .hdepend
scripts/mkdep -- `find $(HPATH)/scsi $(HPATH)/net -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` >> .hdepend
注意三行前面都有一個TAB。當執行過“make dep”后還要手工修改一下“.hdepend”:查找“.PRECIOUS:”字樣引導的三段列表,將它們合并成一個“.PRECIOUS:”列表(列表頭上的“.PRECIOUS:”留著,中間兩個刪掉即可)并將列表放在文件尾上。然后再執行“make zImage”即可完成編譯。此法較麻煩,但可靠性高一點!
Cygwin下vivi和kernel編譯全攻略
更新時間: 2007-01-24 15:56:28來源: 粵嵌教育瀏覽量:1011