SOC FPGA linux系统搭建(Terasic DE10-Nano开发板)
Embeeding linux for Cyclone V SoC FPGAs(Terasic DE10-Nano)
本设计使用黄金硬件参考设计 (GHRD) 和添加自定义 IP 到开发 Linux 内核驱动程序以使用自定义 IP
更多信息参考:
- rocketboards.org文档
- Building embedded Linux for the Terasic DE10-Nano (and other Cyclone V SoC FPGAs)
0.要求
- 操作系统
本设计基于linux Ubuntu16.04操作系统,如果使用 Windows,某些步骤可能会有所不同。 - 软件环境
Quartus Prime18.1
包括英特尔 SoC FPGA 嵌入式开发套件 (EDS) 和Cyclone V 芯片包等 - 硬件设备
Terasic DE10-Nano 开发板
SD读卡器
1. 创建和修改硬件设置
FPGA开发板制造商通常提供参考设计,以便用户可以快速启动并运行其板。对于英特尔Altera 主板,这些被称为黄金硬件参考设计 (GHRD)。我们将使用 GHRD 来创建我们自己的硬件设计。 这一步的主要的目的是生成rbf文件。
2. 编译u-boot bootloader
2.1 生成preloader
需要在注意的是这里的操作,需要在终端执行embedded_command_shell.sh
命令,然后按照参考文档的描述步骤依次操作,即可生成preloader相关文件。
2.2 设置u-boot
- 在下载工具链时,可能会找不到目标下载链接
Page not found: /components/toolchain/binaries/latest-6/arm-linux-gnueabihf/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
这里需要注意,由于参考文档的提供的GCC tool chain网站下载链接已经变更了,可以在
[https://releases.linaro.org/components/toolchain/gcc-linaro/latest-6/]自行下载所需的工具链即可。
如果需要下载和参考文档相同的工具链,则需将文档中:
wget https://releases.linaro.org/components/toolchain/binaries/latest-6/arm-linux-gnueabihf/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
tar -xvf gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
修改成
wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabihf/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
tar -xvf gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
- 设置工具链的环境变量
文档中设置环境变量为临时环境变量,依赖终端所在路径,在每次关闭终端后将会失效,避免每次重复设置环境变量,可以参考其他设置方法。
2.3 生成和编译设备树
2.4 测试系统(1)
1. 创建镜像并挂载
- 创建512M的镜像文件
sudo dd if=/dev/zero of=sdcard.img bs=512M count=1
其中if=文件名,指定输入文件名;of=文件名,指定输出文件;bs指定输入输出文件大小。
- 将磁盘镜像文件虚拟成块设备,并输出回环设备名称
sudo losetup --show -f sdcard.img
2. 创建分区
我们将使用 fdisk
创建三个分区:一个 256 MiB 的 FAT
分区、一个 ext4
类型、大小为 254 MiB 的根文件系统,以及一个 A2
类型的 1 MiB 分区(Altera 自定义)。这将留下 1 MiB 的可用空间,供主引导记录使用。
3. 创建文件系统
这一步在新建的分区上创建适当的文件系统,将之前的生成的文件复制到对应的分区位置中。按照文档步骤建立相应的分区,将对应的文件复制到对应得分区。对应的分区的文件如下所示:
分区编号 | 文件类型 | 大小 | 存储内容 |
---|---|---|---|
p1 | FAT | 256M | Zimage,u-boot.scr,soc_system.dtb,soc_system.rbf |
p2 | EX4 | 254M | rootfs |
p3 | RAW(A2) | 1M | preloader-mkpimage.bin,u-boot.img |
- A2分区
我们没有为 A2 分区创建文件系统,因为 A2 分区类型是原始分区,而预加载器是原始二进制文件。
首先将u-boot SPL复制到编号为3的A2分区
sudo dd if=software/spl_bsp/preloader-mkpimage.bin of=/dev/loop0p3 bs=64k seek=0
同时需要把u-boot.img也拷贝到A2分区,负责会导致SPL无法读取u-boot.img而重复引导
sudo dd if=u-boot.img of=/dev/loop0p3 bs=64k seek=4
- FAT分区和ext4分区
FAT和ext4根文件系统分区都是需要创建文件系统,其中FAT分区存储硬件配置信息、设备文件、u-boot相关文件以及后续步骤生成Linux内核镜像,ext4分区主要是后续生成的文件系统,使用以下两个命令创建两个文件系统:
sudo mkfs -t vfat /dev/loop0p1
sudo mkfs.ext4 /dev/loop0p2
- 将相应的文件复制到对应分区挂载的路径下后,最后将sdcard.img 写入SD卡中并完成测试
3. 编译Linux内核
3.1. 下载并设置gcc工具链
这里可以用编译u-boot相同的工具链,设置好相应的环境变量即可。
3.2. 下载Linux源码
这里我们使用的4.11版本的内核,切换分支到4.11内核。
3.3. 编译内核
- 创建默认配置
make ARCH=arm socfpga_defconfig
- 配置内核
make ARCH=arm menuconfig
完成对应修改后保存配置文件
- 编译内核
生成zImage
4. 制作根文件系统
根据指南,我们使用buildroot工具创建根文件系统和必要的系统应用程序。
4.1 下载buildroot
4.2 配置bulidroot
4.3 配置busybox
4.4 生成根文件系统
5. 完善和测试SD卡镜像
分区编号 | 文件类型 | 大小 | 存储内容 |
---|---|---|---|
p1 | FAT | 256M | Zimage,u-boot.scr,soc_system.dtb,soc_system.rbf |
p2 | EX4 | 254M | rootfs |
p3 | RAW(A2) | 1M | preloader-mkpimage.bin,u-boot.img |
根据表格,我们继续完善我的sdcard.img,把根文件解压到对应的分区的挂载点下:
sudo tar -xvf buildroot/output/image/rootfs.tar -C <mount point of the 254MB ext4 partition>
再把生成的Linux内核镜像复制到的FAT分区所挂载的位置:
sudo cp linux_socfpga/arch/arm/boot/zImage <mount point of the 256MB FAT partition>
至此Linux系统搭建完成,可以上板测试,通过串口调试工具控制和显示信息。
SOC FPGA linux系统搭建(Terasic DE10-Nano开发板)相关推荐
- Linux系统中用DNW向ARM开发板下载程序
在Linux下通过dnw来给开发板发送程序.包括驱动程序代码:secbulk.c,应用程序代码:dnw.c.只能运行在32位系统上,在64位系统上提示错误:DNW download Data size ...
- yolov3在Linux主机端和jetson nano开发板上的部署,使用,以及tensorrt加速yolov3-tiny
Linux 主机端上 darknet识别 图片识别:./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg 视频识别:./darknet ...
- 【Linux系统移植】NXP 官方开发板 kernel内核 编译与烧录
1.下载 NXP 官方 I.MX6ULL EVK 开发板的kernel :linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 2.使用 FileZilla Client ...
- SoC学习篇—Linux 系统搭建
SoC学习篇-Linux 系统搭建 一.制作.dtb与.rbf文件 1.编译硬件工程 2.文件制作 二.启动操作系统内核 1.编译uboot 2.生成preloader-mkpimage.bin文件 ...
- Linux系统搭建Red5服务器
Linux系统搭建Red5服务器 Red5 是 支持Windows,Linux等多平台的RTMP流媒体服务器,Windows下搭建相对容易,图形界面操作比较简单,Linux服务器的环境下没有图形界面, ...
- 软raid1 重新同步_软RAID搭建基于linux系统搭建RAID5
实验二.软RAID搭建-基于linux系统搭建RAID5 实验要求: 1)创建RAID5; 2)添加一个热备盘sdj 3)指定chunk为32k 4停止阵列,重新激活阵列 5使用热备盘,扩展阵列容量, ...
- Linux系统搭建多用户多目录不同权限访问的FTP服务器
Linux系统搭建多用户多目录不同权限访问的FTP服务器 1 安装服务 [root@host-192-168-9-19 home]# yum -y install vsftpd 2 创建访问目录 创建 ...
- 嵌入式Linux学习笔记(1-1)——linux系统搭建
版权声明:本文为博主原创文章,未经博主允许不得转载. 学习嵌入式linux已经有2年时间,虽然时间不长,但一路走来遇到很多问题,绕了很多弯路.写这篇文章的目的是分享我的经验,以供初学者参考,希望能够帮 ...
- linux系统搭建redis cluster集群 切片集群 教程 centOS系统redis6
目录 一.说明 二.环境信息 三.介绍 四.部署流程 五.测试 一.说明 该教程为redis集群-cluster切片集群部署方式,不包含redis的安装过程,如需redis安装教程请移步以下链接: & ...
最新文章
- 【每日DP】day12、P1063 能量项链(区间DP又一模板,震惊,只需要4行代码?)难度⭐⭐⭐
- 开源版本_重磅!阿里开源 OpenJDK 长期支持版本 Alibaba Dragonwell
- InfluxDB存储引擎Time Structured Merge Tree——本质上和LSM无异,只是结合了列存储压缩,其中引入fb的float压缩,字串字典压缩等...
- 纯c gSoap实现WebService
- 浅谈 温故知新——HTML5!
- Linux之字符串截取
- 做一辆超mini平衡自行车,全开源!
- fpm制作mysql rpm包_FPM简介(定制rpm包)
- 核心API最佳实践——JDK日志分级
- 送你一个在线机器学习网站,真香!
- 科技抗疫,少年可期,为这群有AI的天使开发者疯狂打call
- 韩顺平php视频笔记37 php数据类型(部分)
- citrix 产品上线
- iplat62--按钮使用规范
- JMP M16:64
- 27-React Lists and Keys
- 如何查看mysql数据库的端口
- 完美打造安全的系统。
- java抽签_java制作一个简单的抽签程序
- js实现简单的有序map
热门文章
- Axure9 实现点击获取验证码倒计时功能
- mysql front mac安装_Mac下配置安装数据库-MySQL
- 2021年世界地图shp数据arcgis中英文字段美化mxd(含效果图)
- openCV study-Module1_图像处理基础
- 腾讯内部转岗_即将退出历史舞台,腾讯微博将于9月28日停止服务和运营
- DVD-RW与DVD-ROM的区别
- 一款能够提高工作效率的小软件
- VBS基础篇 - 循环语句(2) - While...Wend
- T2080RDB: booting vxworks using uboot
- 软件工程第三次作业 结对编程