歡迎您光臨本站 註冊首頁

Cygwin下vivi和kernel編譯全攻略

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

最近打算設計新產品,在Friendly Arm買了一套Matrix5系統研究一下.發現用arm-Linux開發似乎比較明智些!但用Windows習慣了,還不太熟悉Linux,而且重裝RH9恐怕很費事.還是先用Win2000吧,Linux熟悉熟悉再說!

  看見版上有個Cygwin,可以在Windows下建立仿Linux系統,下了一個試用一下,感覺還不錯,只可惜沒有圖形界面!根據楊老闆所說,Cygwin里可以編譯Matrix5的vivi和kernel.就先以此開始熟悉Linux吧!大約用了一周左右的時間,終於搞定了vivi和kernel在Cygwin里的編譯.

  現在把編譯的過程貼出來,以供有相同感受的兄弟們參考:

  (由於Cygwin里操作全部使用行命令輸入方式,最好先熟悉一下Linux的常用命令)

  1、安裝Cygwin:

  安裝過程不多說了,開發中心裡有參考.不過要提兩點:最好在系統比較乾淨時安裝,建議系統剛啟動完就安裝,否則安裝可能會出錯;另外安裝時一定要裝gcc和ncurse庫,否則menuconfig用不了,假如搞不清就全部安裝吧!

  裝完Cygwin後會有一個快捷方式,運行它就可以進入Cygwin系統了.第一次進Cygwin系統還會有一些初始化過程,完了會進入命令輸入狀態,提示符為「@」. arm

  這裡要先說明一下,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:cygwinopt)下.

  修改啟動腳本/etc/profile文件(可在Windows中用文本編輯器修改X:cygwinetcprofile)中的PATH環境變數為

  PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/opt/FriendlyARM/crosstool/arm-linux/gcc-2.95.3-glibc-2.2.3/binPATH

  gdbserver可以先不用,好象是Debug時才會用到.至少我在編譯時是沒用到.

  輸入「arm-linux-gcc -v」,自己測試一下吧.

  3、編譯VIVI:

  在開發中心已有較具體的說明.一定要下載版上的「vivi_cygwin.tgz」,不要用光碟里的.預配置文件在包里已經有了(config.friendlyarm),不用再下載. 字串5

  由於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」了. 字串5

  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已成了一個空文件. arm開發論壇

  這個「.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 字串4

  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編譯全攻略已經有1012次圍觀

http://coctec.com/docs/linux/show-post-51360.html