DE1-SoC實用經驗之——linux內核編譯


2014年初到現在,雖然DE1-SoC已經推出近兩年多並且該板子的好評率也不低,但是網上能找到的相關開發經驗卻並不多,因此很多問題也需要自己慢慢探索。本文先來談一談如何有效地對其linux內核進行編譯。

     眾所周知,SoC FPGA的最大特點就是除了運用FPGA進行硬件定制和構建NIOS軟核處理器之外,其中的ARM硬核處理器可以很方便地移植嵌入式linux操作系統,這樣就大大方便了應用FPGA進行嵌入式設計。DE1-SoC SD鏡像文件的linux系統中,默認的驅動程序是相當有限的,為了給它增加更多的驅動程序,比如SPI驅動、LCD驅動或者攝像頭驅動,我們就需要對其linux內核進行配置和重新編譯。本文的解決過程除了參考Altera WiKi (見如下鏈接)中與內核編譯相關的教程之外,還提供了筆者的一些個人經驗。

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

 
. 操作環境和必備軟件

             主機環境:Win10、Ubuntu 12.04.4(VMware Workstation虛擬機)

                目標板: DE1-SoC (原則上SOC系列FPGA開發板均可)

嵌入式Linux版本:Linux socfpga 3.12.0(DE1_SoC_SD提供, Linux Concole 2014-01-14)

     交叉編譯工具: gcc-linaro-arm-linux-gnueabihf-4.7           

            必備工具: Win32DiskImager、串口調試助手

 

二、移植及編譯內核步驟

  1. 移植Linux到DE1-SoC

      具體教程見DE1-SoC_SystemCD解壓后的UserManual文件夾下的DE1-SoC_Getting_Started_Guide文檔里。移植完成后用USB連接到DE1-SoC(板上已經有USB轉232芯片),即可在串口調試助手界面里看到linux的命令行,於是就可以通過串口來完成與linux的交互工作。需要注意的是,terasic所有的教程里使用的串口助手均為Putty,然而本人的Putty怎么都無法連接到DE1-SoC,所以使用一般的串口調試助手也是OK的(本人用ATK XCOM V2.0)。Putty的好處是Windows下和Linux下都可以使用,但一般我們用虛擬機的話在Windows下用普通的串口工具調試開發板即可。為防止Linux版本變動,啟動DE1-SOC板子並root登入Linux之后,可以用 uname -a命令查看linux版本信息

   DE1-SoC實用經驗之——linux內核編譯

  2.配置Linux內核

     雖然DE1_SoC_SD已經提供了編譯好的內核,但該內核的驅動程序是有限的,並且隨着我們給ARM HPS增加更多的外設和功能,就需要對內核作出修改和重新編譯。需要特別注意的是,如果只是單純地配置和編譯內核,不對文件系統進行修改,需要保證內核和文件系統是相同的版本,比如這里我們的文件系統是3.12版本,那么編譯內核的時候Linux源碼也要使用3.12版本的,否則會造成系統無法啟動或者配置修改無效。如果要對整個Linux文件系統進行版本更新,那么具體可以參考

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

中的相關步驟。不過一般情況下我們是不需要對文件系統進行變更的。

  (1)安裝交叉編譯工具:

   下載地址:ftp://ftp.altera.com/outgoing/SoC_FPGA/ethernet_3.7/gcc-linaro-arm.tar.bz2

   先解壓到合適的文件夾下即可,解壓后得到一個名為“gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux“的文件夾;

  (2)下載Linux源碼:

   首先安裝git工具,git 是類似於svn 的版本控制工具了,他的開發者就是linux內核的發明者linus torvalds。關於git 的安裝可以參考http://www.douban.com/note/263056199/ 這個鏈接的源碼安裝方法。安裝完成后輸入git --version 命令可以查看到 git version 1.x.x的信息說明安裝成功了。(在ubuntu 環境下也可以使用apt-get install git 命令安裝git 工具)。然后就是從rocketboards的git 倉庫中獲取linux 的源碼了。  

   git clone gits://git.rocketboards.org/linux-socfpga.git 

   cd linux-socfpga

   git checkout -b kenel_3.12 origin/socfpga-3.12 

   (這里kernel 3.12可以任意命令, origin/socfpga-3.12 表示遠程版本信息,Altera 從3.7版本開始都有上傳到git server上。用戶可以用 git branch -r 查看遠程的版本號,目前最新的版本已經到4.7了)。這樣內核源碼就已經獲取完成。 

 (3)配置並編譯內核:

    使用cd命令轉到上述socfpga文件夾目錄下以此輸入下列命令:

   export ARCH=arm   (指定CPU架構)

    export PATH=/home/felton/toolchain/gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux/bin:$PATH    (交叉編譯工具路徑指向第一步中解壓的gcc文件夾下的bin文件夾內)

    make socfpga_defconfig   (先完成SOC_FPGA的默認配置)

如果需要配置內核增加新的硬件驅動,則輸入

make menuconfig

此時會跳出菜單形式配置Linux的界面如下所示:

 

DE1-SoC實用經驗之——linux內核編譯
 
    完成對Linux內核的配置后,接下來輸入:

export CROSS_COMPILE=arm-linux-gnueabihf-   (調用gcc)

make zImage LOADADDR=0x8000         (指定引導地址)

    完成后socfpga/arch/arm/boot文件夾下找到生成的內核文件zlmage,將其拷貝到SD卡中,重啟開發板即可發現已經完成對Linux內核驅動程序的更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM