入手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,最后一行加上这么几句话:
我的文件夹解压在/home/tiancai下面,你们要根据实际来,对,我就是天才~~
别担心,别害怕,你ctrl+c退出,然后输入make menuconfig,然后load,载入刚才的.config,然后再退出保存
这时候你再重新make一下,看看,刚才让你头昏眼花的选项是不是没有了?直接就编译内核了。