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内核驱动程序的更新。

posted @ 2017-01-11 13:48  ZYVV  阅读(3494)  评论(0编辑  收藏  举报