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
  1. 将相应的文件复制到对应分区挂载的路径下后,最后将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开发板)相关推荐

  1. Linux系统中用DNW向ARM开发板下载程序

    在Linux下通过dnw来给开发板发送程序.包括驱动程序代码:secbulk.c,应用程序代码:dnw.c.只能运行在32位系统上,在64位系统上提示错误:DNW download Data size ...

  2. yolov3在Linux主机端和jetson nano开发板上的部署,使用,以及tensorrt加速yolov3-tiny

    Linux 主机端上 darknet识别 图片识别:./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg 视频识别:./darknet ...

  3. 【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 ...

  4. SoC学习篇—Linux 系统搭建

    SoC学习篇-Linux 系统搭建 一.制作.dtb与.rbf文件 1.编译硬件工程 2.文件制作 二.启动操作系统内核 1.编译uboot 2.生成preloader-mkpimage.bin文件 ...

  5. Linux系统搭建Red5服务器

    Linux系统搭建Red5服务器 Red5 是 支持Windows,Linux等多平台的RTMP流媒体服务器,Windows下搭建相对容易,图形界面操作比较简单,Linux服务器的环境下没有图形界面, ...

  6. 软raid1 重新同步_软RAID搭建基于linux系统搭建RAID5

    实验二.软RAID搭建-基于linux系统搭建RAID5 实验要求: 1)创建RAID5; 2)添加一个热备盘sdj 3)指定chunk为32k 4停止阵列,重新激活阵列 5使用热备盘,扩展阵列容量, ...

  7. Linux系统搭建多用户多目录不同权限访问的FTP服务器

    Linux系统搭建多用户多目录不同权限访问的FTP服务器 1 安装服务 [root@host-192-168-9-19 home]# yum -y install vsftpd 2 创建访问目录 创建 ...

  8. 嵌入式Linux学习笔记(1-1)——linux系统搭建

    版权声明:本文为博主原创文章,未经博主允许不得转载. 学习嵌入式linux已经有2年时间,虽然时间不长,但一路走来遇到很多问题,绕了很多弯路.写这篇文章的目的是分享我的经验,以供初学者参考,希望能够帮 ...

  9. linux系统搭建redis cluster集群 切片集群 教程 centOS系统redis6

    目录 一.说明 二.环境信息 三.介绍 四.部署流程 五.测试 一.说明 该教程为redis集群-cluster切片集群部署方式,不包含redis的安装过程,如需redis安装教程请移步以下链接: & ...

最新文章

  1. 【每日DP】day12、P1063 能量项链(区间DP又一模板,震惊,只需要4行代码?)难度⭐⭐⭐
  2. 开源版本_重磅!阿里开源 OpenJDK 长期支持版本 Alibaba Dragonwell
  3. InfluxDB存储引擎Time Structured Merge Tree——本质上和LSM无异,只是结合了列存储压缩,其中引入fb的float压缩,字串字典压缩等...
  4. 纯c gSoap实现WebService
  5. 浅谈 温故知新——HTML5!
  6. Linux之字符串截取
  7. 做一辆超mini平衡自行车,全开源!
  8. fpm制作mysql rpm包_FPM简介(定制rpm包)
  9. 核心API最佳实践——JDK日志分级
  10. 送你一个在线机器学习网站,真香!
  11. 科技抗疫,少年可期,为这群有AI的天使开发者疯狂打call
  12. 韩顺平php视频笔记37 php数据类型(部分)
  13. citrix 产品上线
  14. iplat62--按钮使用规范
  15. JMP M16:64
  16. 27-React Lists and Keys
  17. 如何查看mysql数据库的端口
  18. 完美打造安全的系统。
  19. java抽签_java制作一个简单的抽签程序
  20. js实现简单的有序map

热门文章

  1. Axure9 实现点击获取验证码倒计时功能
  2. mysql front mac安装_Mac下配置安装数据库-MySQL
  3. 2021年世界地图shp数据arcgis中英文字段美化mxd(含效果图)
  4. openCV study-Module1_图像处理基础
  5. 腾讯内部转岗_即将退出历史舞台,腾讯微博将于9月28日停止服务和运营
  6. DVD-RW与DVD-ROM的区别
  7. 一款能够提高工作效率的小软件
  8. VBS基础篇 - 循环语句(2) - While...Wend
  9. T2080RDB: booting vxworks using uboot
  10. 软件工程第三次作业 结对编程