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-

DE1-SOC入门之Linux开发环境搭建_第1张图片

我的文件夹解压在/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会出现自己没意料到的问题,比如下面这个,怎么要我选择这么多东西啊?

DE1-SOC入门之Linux开发环境搭建_第2张图片

别担心,别害怕,你ctrl+c退出,然后输入make menuconfig,然后load,载入刚才的.config,然后再退出保存

DE1-SOC入门之Linux开发环境搭建_第3张图片

这时候你再重新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个月前的事情了。

你可能感兴趣的:(fpga,arm,Linux,驱动)