1. 程式人生 > >DE1-SOC入門之Linux開發環境搭建

DE1-SOC入門之Linux開發環境搭建

入手DE1-SOC這塊FPGA也有兩三個月了,將友晶提供的入門學習例程、程式碼等摸索了一下,感覺正常的fpga和arm之間的通訊、控制已經沒多大問題了。可是很多時候,事情沒有自己想的那麼簡單。現在接手的專案,實時性略高(不是相當高的那種,延遲的1、2ms還是能接受的),對arm的運算量也非常大,本來想著用輪詢一遍遍檢視fpga的標誌位,一旦有變,立刻去讀取資料,後面想想看,這樣有點太浪費cpu了,於是還是選擇用中斷吧,既然要用到中斷,就需要中斷驅動的編寫、編譯,要編譯驅動嘛,Linux開發環境還是必須得有滴~~

言歸正傳,首先先來說一下本人的電腦和使用的軟體,本人電腦win10 64位(之前用win7開發的,還是win7好,win10略有一點相容性小問題,不過被我解決了),虛擬機器使用的是virtual box的5.0.16 64位版本,Linux使用的是ubuntu-12.04.5-desktop-i386,沒有用64位的原因是當時安裝arm-linux編譯器好像有個什麼庫裝不上,索性就用32位了,其實用高版本的編譯器就沒問題了,但是自己也沒試過了,DE1-SOC我使用的是友晶提供的ubuntu系統,核心版本3.12。注意,這個教程不太適合新手,至少你需要把友晶提供的幾個例程都做一遍,而且要了解驅動方面的知識,這個知識嘛,我是買了訊為的4412板子,看訊為的視訊學習的,不過訊為的驅動教程還沒有更新完,你當然也可以去找韋東山的資料,這個貌似是嵌入式驅動最全面的教學資料了(韋東山後面兩期的視訊是付費的,比較貴,但是買的人都說物超所值)。

開發環境搭建主要參考一下幾篇文章,連結如下:

http://www.alterawiki.com/wiki/Compiling_u-boot_and_Linux_Kernel_for_Cyclone_V_SoC

http://www.amobbs.com/forum.php?mod=viewthread&tid=5620951
當然,還參考了很多其他的文章,具體的已經記不得了。以上兩篇文章把過程講得非常詳細,但是還是有一些小細節沒有說清楚,使得我走了一些彎路,因此在這裡寫出來,和前面的一些文章形成互補,也算是取之於網際網路,奉獻之於網際網路。具體步驟如下:

1、在虛擬機器安裝ubuntu作業系統(這個我就不說了,具體的方法請百度)。

2、下載必要的原始碼、軟體,分別是uboot原始碼、soc-fpga的linux原始碼、gcc-linaro-arm-工具鏈。其實大多數的都能從https://rocketboards.org/foswiki/view/Documentation/MoveToGitHub下載,不過為了大家方便,還是具體列出來:

uboot使用的是2012.10的版本,地址是https://github.com/altera-opensource/u-boot-socfpga/tree/socfpga_v2012.10

Linux原始碼使用的是3.12的核心版本,地址是https://github.com/altera-opensource/linux-socfpga/tree/socfpga-3.12

工具鏈使用的是2014.05的gcc-linaro-arm-linux-gnueabihf-4.9版本,地址是http://releases.linaro.org/14.05/components/toolchain/binaries/,選擇gcc-linaro-arm-linux-gnueabihf-4.9-2014.05_linux.tar.xz,也就是那個48mb的版本的,注意,這個是32位的,如果你用64位的linux,請選擇支援64位的工具鏈(比較新的版本貌似有64位的)。

這些下好後在Linux裡解壓,然後新增路徑,新增方法:我用的是普通使用者,因此在自己的家目錄下vim .bashrc,最後一行加上這麼幾句話:
export PATH=$PATH:/home/tiancai/gcc-linaro-arm-linux-gnueabihf-4.9-2014.05_linux/bin
export PATH=$PATH:/home/tiancai/u-boot-altera-2012.10/tools
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-


我的資料夾解壓在/home/tiancai下面,你們要根據實際來,對,我就是天才~~大笑
然後source .bashrc,路徑就新增好了,你可以試試輸入arm-然後tab,如果後面彈出來了arm-linux-gnueabihf-那麼就沒問題了。
3、編譯uboot,如果你不用生成uImage的話,其實應該也不需要用到uboot,編譯方法是在uboot資料夾下面./MAKEALL socfpga_cyclone5,其實這個真有點忘了,應該是這樣吧。
4、編譯核心,編譯之前,咱們需要用來配置Linux的.config檔案,這個檔案呢,在開發板的/proc資料夾下面,有一個config.gz,拷貝出來,複製到soc的Linux原始碼中,命名為.config,然後就可以make了,當然,有時make會出現自己沒意料到的問題,比如下面這個,怎麼要我選擇這麼多東西啊?


別擔心,別害怕,你ctrl+c退出,然後輸入make menuconfig,然後load,載入剛才的.config,然後再退出儲存


這時候你再重新make一下,看看,剛才讓你頭昏眼花的選項是不是沒有了?直接就編譯核心了。
停!!!別繼續編下去了,這樣編出來的核心,用來編寫的驅動時不能用的,為啥子咧?因為和友晶提供的ubuntu核心不一樣,友晶的核心雖然也是3.12的,但是後面還是有一排小字的,-00307-g507abb4-dirty,就是這些,所以我們也要把這個加到我們自己的核心上,否則到時候安裝驅動的時候系統會說,你這個驅動編譯的環境所用的核心和我自己本身的核心版本不一樣啊,不行,我不裝,不是原裝的我不要!!傲嬌吧……多嚴格的機制,所以要在Makefile最上面加上
VERSION = 3
PATCHLEVEL = 12
SUBLEVEL = 0
EXTRAVERSION = -00307-g507abb4-dirty
再編譯,嗯,這個核心就對了。
ps:如果你需要編譯uImage的話,需要在Linux原始碼下面輸入make uImage LOADADDR=0x8000,不過不知道是這個config檔案補全還是怎麼回事,編出來的uImage vga不能使用,但是對於我這種萬年不用一下vga的人而言,影響不太大。
再ps:如果工具鏈下不下來,可以從我這裡下載,我還能順便賺一分吐舌頭。連結是http://download.csdn.net/detail/tiancai13579/9480907
如果大家遇到什麼問題,歡迎積極討論,畢竟開發環境的製作已經是2個月前的事情了。