Altera FPGA SoC搭建步骤
Altera SoC 官方搭建指南:
https://rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide
官方文档中除了讲解搭建方法之外,还有很多原理性的介绍,感兴趣的朋友可以自己阅读。
准备工作:
1. 安装Altera官方提供的IDE (Quartus 和 SoC EDS), 不需要安装DS-5. 文档中的工作是基于v15.0版本
2. 一块FPGA SoC开发板。官方Guide中的硬件平台是友晶系列的DE0-Nano-SoC,但对大多Altera板子都适用
3. 一台Linux主机
4. 一张SD卡
5. 网络可以访问github
搭建步骤:
1. 生成Preloader
2.配置和编译Bootloader (U-Boot)
3. 生成和编译Device Tree
4. 测试系统(一)
5. 配置和编译Linux Kernel
6. 生成Root Filesystem
7. 测试系统(二)
搭建方法:
1. 生成Preloader
- 下载并解压GHRD,并解压至某目录: atlas_linux_ghrd.tar.gz
tar -xvzf atlas_linux_ghrd.tar.gz
- 运行EDS配置环境变量的脚本
<path-to-soceds-tools>/embedded/embedded_command_shell.sh
- 运行BSP Editor工具:
cd atlas_linux_ghrd
bsp-editor &
将弹出如下窗口:
- 配置BSP Editor:
- File→New HPS BSP
- 在弹出的窗口中,点击"Preloader settings directory"右侧的"..."按钮,选择“atlas_linux_ghrd/hps_isw_handoff/soc_system_hps_0”,然后点击Open。完成后的界面如下图,点击确定:
- 在生成的窗口中,选中"FAT_SUPPORT",其他的使用默认,结果如下图:
- 点击Generate,正常结束后点击Exit退出。
- 编译Preloader.
cd software/spl_bsp ; ls
make
编译结束后将生成如下文件:
- 新目录 - “uboot-socfpga”
- 新文件 - “preloader-mkpimage.bin”
2.配置和编译Bootloader (U-Boot)
- 获取U-Boot编译工具: Linaro GCC toolchain for the ARMv7 instruction set,并配置其相关的环境变量
cd ..
wget https://rocketboards.org/foswiki/pub/Documentation/EmbeddedLinuxBeginnerSGuide/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz
tar -xvf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz
export CROSS_COMPILE=$PWD/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-
- 获取U-Boot源代码,查看并切换至相应的tag:
git clone https://github.com/altera-opensource/u-boot-socfpga.git
cd u-boot-socfpga git tag -l rel*
git tag -l ACDS*
git checkout rel_socfpga_v2013.01.01_15.09.01_pr
- Clean U-Boot目录
make mrproper
- 编译U-Boot
make socfpga_cyclone5_config
make
- 创建boot脚本。在software目录下,新建boot.script文件,并写入如下内容:
echo -- Programming FPGA --
fatload mmc 0:1 $fpgadata soc_system.rbf;
fpga load 0 $fpgadata $filesize;
run bridge_enable_handoff; echo -- Setting Env Variables --
setenv fdtimage soc_system.dtb;
setenv mmcroot /dev/mmcblk0p2;
setenv mmcload 'mmc rescan;${mmcloadcmd} mmc 0:${mmcloadpart} ${loadaddr} ${bootimage};${mmcloadcmd} mmc 0:${mmcloadpart} ${fdtaddr} ${fdtimage};';
setenv mmcboot 'setenv bootargs console=ttyS0,115200 root=${mmcroot} rw rootwait; bootz ${loadaddr} - ${fdtaddr}'; run mmcload;
run mmcboot;
- 编译boot脚本
mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Boot Script Name" -d boot.script u-boot.scr
编译结束后,将生成"u-boot.scr"文件
3. 生成和编译Device Tree
- 生成Device Tree所需的board xml文件已经存在了。在"atlas_linux_ghrd"目录下,运行如下命令:
sopc2dts --input soc_system.sopcinfo\
--output soc_system.dts\
--type dts\
--board soc_system_board_info.xml\
--board hps_common_board_info.xml\
--bridge-removal all\
--clocks
- 编译Device Tree源代码;
dtc -I dts -O dtb -o soc_system.dtb soc_system.dts
编译结束后,将生成二进制文件:"soc_system.dtb"。
4. 测试系统(一)
Preloader和U-Boot已经生成。我们首先,以测试preloader和bootloader编译和烧写成功。
- 制作SD Card image, 生成空值组成的sdcard.img
sudo dd if=/dev/zero of=sdcard.img bs=512M count=1
- 虚拟回环设备(loop device),并获取回环设备名。红色的X表示不同的环境下可能会有不同,在我的环境下,X=0,即我得到的结果是"/dev/loop0"。
sudo losetup –-show –f sdcard.img
/dev/loopX
- 使用fdisk命令对该回环设备关联的sdcard.img进行分区
sudo fdisk /dev/loopX
-- fdisk welcome message – Command (m for help):
首先确认,当前sd卡上没有分区:
创建分区3,用来存储preloader image,相应的配置信息如下:
转换分区类型为'a2'
创建分区2,用来存放Linux root文件系统,相应的配置信息如下,且不需要进行分区类型转换:
创建分区1,用来存放启动文件:相应的配置信息如下:
转换分区类型为FAT:
最终的分区信息如下图:
确认无误后,使用"w"命令退出,忽略下图中的错误信息。
- Kernel对上述改动尚未生效,正如上图中最后一样的提示。Reboot,或者使用"partprobe"命令,使上述改动生效。
sudo partprobe /dev/loopX
- 生成文件系统:
preloader写入分区3:
sudo dd if=software/spl_bsp/preloader-mkpimage.bin of=/dev/loopXp3 bs=64k seek=0
格式化分区1,成为FAT文件系统:
sudo mkfs –t vfat /dev/loopXp1
格式化分区2,成为ext4文件系统:
sudo mkfs.ext4 /dev/loopXp2
挂载分区1(FAT文件系统),并将拷入之前生成的"u-boot.img", "u-boot.scr"和FPGA的烧写文件"soc_system.rbf".
mkdir temp_mount
sudo mount /dev/loopXp1 ./temp_mount
sudo cp software/u-boot-socfpga/u-boot.img software/u-boot.scr soc_system.dtb soc_system.rbf temp_mount
sync
sudo umount temp_mount
- 烧写SD卡
sudo dd if=sdcard.img of=/dev/XXX bs=2048
sync
- 将SD卡插入FPGA,开机,通过串口调试工具如minicom进行调试,结果是SoC的preloader和bootloader正常启动,但因为我们还没有制作linux kernel和root filesystem, 系统提示如下错误:
5. 配置和编译Linux Kernel
- 获取Linux Kernel源代码,并切换到相应的release:
cd software
git clone https://github.com/altera-opensource/linux-socfpga.git
cd linux-socfpga
git tag –l rel*
git checkout rel_socfpga-4.1_15.09.01_pr
- 配置Linux Kernel,运行环境变量配置脚本,确保新打开的shell的环境变量配置正确:
export CROSS_COMPILE=$PWD/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-
<path-to-soceds-tools>/embedded/embedded_command_shell.sh
make ARCH=arm socfpga_defconfig
- 安装图形化的kernel配置工具:
sudo apt-get install libncurses5-dev
make ARCH=arm menuconfig
- 在打开的图形界面里,需要改动2个地方。1. 主菜单进入“General Setup”,取消 “Automatically append version information to the version string” 2. 主菜单进入“Enable the block layer”,选中 “Support for large (2TB+) block devices and files”。然后save到默认的.config文件。
- 编译Linux Kernel (zImage):
make ARCH=arm LOCALVERSION= zImage
注意,"LOCALVERSION=" 后面是空格
6. 生成Root Filesystem
- 运行环境变量配置脚本,确保新打开的shell的环境变量配置正确:
export CROSS_COMPILE=$PWD/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf- <path-to-soceds-tools>/embedded/embedded_command_shell.sh
- 获取buildroot代码 (Guide中给的地址已经打不开了,自己搜索了buildroot在github上的代码)
cd software
git clone https://github.com/buildroot/buildroot
- 切换到兼容Linaro 2014.09 toolchain的版本:
cd buildroot
git checkout 2015.08.x
cd ..
- 打开配置窗口:
make -C buildroot ARCH=ARM BR2_TOOLCHAIN_EXTERNAL_PATH=$(pwd)/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux nconfig
- 配置Target Options:
- 在"Target Architecture"选项中,选择"ARM (little endian)"
- 在"Target Architecture variant"选项中,选中 "cortex-A9"
- 在"Target ABI"选项中, 选中"EABIhf"
- Enable “NEON SIMD extension support”
- 在“Floating point strategy”选项中, 选中"NEON"
- “Target Binary Format” and “ARM Instruction set” 选项保持默认。
- 配置Toolchain:
- 在“Toolchain type”选项中, 选中 “External toolchain”
- 确保 “Toolchain” 选项中,选中 “Linaro ARM 2014.09”.
- 在“Toolchain origin”选项中, 选中 “Pre-installed toolchain”
- 忽略"toolchain path"
- Enable “copy gdb server to the Target”
- 其他选项保持默认
- 配置System configuration:
- 配置hostname
- 配置root password
- 配置Kernel:
- 去掉“Linux Kernel” 选项的选中状态
- 配置Target packages
- 在 “Debugging, profiling and benchmark”选项中, 拖动滚动条到底部并选中 “valgrind”
- 配置结束,F6保存并退出。
- 配置Busy Box
make –C buildroot busybox-menuconfig
在打开的配置窗口中,不做改变保存即可。
- 编译Root Filesystem:
make -C buildroot BR2_TOOLCHAIN_EXTERNAL_PATH=$(pwd)/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux all
7. 测试系统2
将编译好的Linux Kernel 拷入SD,并解压Root Filesystem。之后开机登陆root。
sudo cp linux-socfpga/arch/arm/boot/zImage <mount point that lsblk tells you, remember the FAT partition is the 256M one>
sudo tar –xvf buildroot/output/images/rootfs.tar –C <mount point of your ext4 partition, it’s the 254M one>
sync
备份:
1. 一切工作开始前,调整SoC的MSEL开关,至Fast Passive Parallel x16模式,
2. GHRD代表 Golden Hardware Reference Design,它是包含了很多基本功能模块的硬件设计,我们可以用它作为设计参考。
3. 在生成preloader时,我碰到一个找不到二进制文件的错误,但实际上需要的二进制文件已经存在了。问题的原因是编译出的二进制文件是32位的文件,而我的主机用的是64位的Linux。安装32位兼容库即可解决:
sudo apt-get install lib32ncurses5
4. 在生成bootloader时,缺少库文件libz.so.1和工具包,安装之:
sudo apt-get install lib32z1
sudo apt-get install u-boot-tools
Altera FPGA SoC搭建步骤的更多相关文章
- arm-linux下qt + opencv开发环境的搭建(Altera DE1 Soc)
arm-linux-gnueabihf-gcc下载 qt下载 arm-linux下qt + opencv开发环境的搭建(Altera DE1 Soc) Ubuntu 16.04 安装QT arm嵌入式 ...
- 浅谈用ModelSim+Synplify+Quartus来实现Altera FPGA的仿真
浅谈用ModelSim+Synplify+Quartus来实现Altera FPGA的仿真 工作内容: Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业 ...
- Modelsim SE 仿真 ALTERA FPGA IP
Modelsim SE 仿真 ALTERA FPGA IP 最近,有几个朋友问过我是不是有新版本的Modelsim altera,其原因是 Qii 升级为新版本的,但是没配套的modelsim,没办法 ...
- Altera FPGA管脚弱上拉电阻详细设置方法
Altera FPGA管脚弱上拉电阻的软件设置方法 在使用 Altera 的 FPGA 时候, 由于系统需求, 需要在管脚的内部加上上拉电阻. Quartus II 软件中在 Assignment E ...
- eFPGA与FPGA SoC,谁将引领下一代可编程硬件之潮流?|半导体行业观察
eFPGA:冉冉升起的新星 eFPGA即嵌入式FPGA(embedded FPGA),是近期兴起的新型电路IP. 随着摩尔定律越来越接近瓶颈,制造ASIC芯片的成本越来越高.因此,设计者会希望ASIC ...
- Java Web 环境搭建步骤(超详细,包括前期安装步骤)
Java Web 环境搭建步骤 安装对应版本的JDK 配置环境变量 本人安装的路径是C盘,在path中加入C:\Program Files\Java\jdk1.8.0_65\bin 测试配置成功,cm ...
- Linux vagrant+virtualbox环境搭建步骤
Linux vagrant+virtualbox环境搭建步骤 Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用. 我们可 ...
- SSH三大框架合辑的搭建步骤
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- cocos2d-lua 3.5 android搭建步骤
cocos2d-lua 3.5 android搭建步骤 如何安装eclipse,jdk,android sdk,ndk这里都不说了,资料很多,而且以前用eclipse搭建cocos2d-x-c++的时 ...
随机推荐
- Windwos Live Writer插件指南
Windows Live Writer 即(WLW) 是一个免费的桌面应用程序,可以用于发布博客. 官网下载地址:https://www.microsoft.com/zh-CN/download/de ...
- python locust 性能测试:locsut参数化-保证并发测试数据唯一性,不循环取数据
from locust import TaskSet, task, HttpLocustimport queue class UserBehavior(TaskSet): @task def test ...
- 禁止chrome浏览器的缓冲图片以及css等资源文件
今天做了一个动画的效果,在ff下正常 但是到了谷歌下就不正常了,非常郁闷,看了下是缓存的问题 ,于是度娘了一下发现清理缓存的技巧还是满多的,这里借鉴一下别人的总结,人的大脑有限,下次忘记的时候还可以在 ...
- nodejs笔记之初识node
1.安装node; node -v //检测node是否安装成功 node可以做什么: 搭建服务器: 读写文件: 连接数据库: 爬虫: node的模块系统: 原生模块(如http,fs); 自定义模 ...
- iOS项目之苹果审核被拒
解读: 3.2 其他业务模式问题下方列表并非详尽清单,并且您提交的 App 可能会导致我们的政策有所更改或更新,但这里有一些额外的应做事宜和勿做事宜需要您谨记在心: 可以接受 (i)在您的 App 中 ...
- 51Nod 博弈模板题
连刷3道博弈模板题,算是稍微学习了以下三个经典博弈了.推荐一个博客. 第一道模板:Bash博弈——同余理论 1066 Bash游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度 ...
- 绑定到外部验证服务LDAP、配置 autofs
题1:您的系统需要按照以下要求绑定到这个服务上:验证服务器的基本 DN 是: dc=xxxx,dc=xxxx,dc=xxxx. 帐户信息和验证信息都是由 LDAP 提供的.连 接 需 要 使 用 证 ...
- elasticsearch 索引备份恢复
备份脚本 es_backup.sh : #!/bin/bash#备份昨天数据,删除30天前索引 host=`hostname`address="xxx@xxx.com" es_us ...
- 剑指offer(1)二维数组的查找
限制今天起开始也刷剑指offer啦,一步一步来. 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数, ...
- JS(JavaScript)的初了解(更新中···)
1.js介绍 Js全称叫javascript,但不是java,他不仅是是一门前台语言,经过发展,现在也是一门后台语言:而java是后台语言. Js作者是布兰登艾奇. 前台语言:运行在客户端的 后台语言 ...