当前位置:   article > 正文

SOC FPGA linux系统搭建(Terasic DE10-Nano开发板)_de10-nano使用教程

de10-nano使用教程

Embeeding linux for Cyclone V SoC FPGAs(Terasic DE10-Nano)

本设计使用黄金硬件参考设计 (GHRD) 和添加自定义 IP 到开发 Linux 内核驱动程序以使用自定义 IP

更多信息参考:

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
  • 1
  • 2

修改成

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
  • 1
  • 2
  • 设置工具链的环境变量
    文档中设置环境变量为临时环境变量,依赖终端所在路径,在每次关闭终端后将会失效,避免每次重复设置环境变量,可以参考其他设置方法

2.3 生成和编译设备树

2.4 测试系统(1)

1. 创建镜像并挂载

  • 创建512M的镜像文件
sudo dd if=/dev/zero of=sdcard.img bs=512M count=1
  • 1
其中if=文件名,指定输入文件名;of=文件名,指定输出文件;bs指定输入输出文件大小。 
  • 1
  • 将磁盘镜像文件虚拟成块设备,并输出回环设备名称
sudo losetup --show -f sdcard.img
  • 1

2. 创建分区
我们将使用 fdisk 创建三个分区:一个 256 MiB 的 FAT 分区、一个 ext4 类型、大小为 254 MiB 的根文件系统,以及一个 A2 类型的 1 MiB 分区(Altera 自定义)。这将留下 1 MiB 的可用空间,供主引导记录使用。

3. 创建文件系统
这一步在新建的分区上创建适当的文件系统,将之前的生成的文件复制到对应的分区位置中。按照文档步骤建立相应的分区,将对应的文件复制到对应得分区。对应的分区的文件如下所示:

分区编号文件类型大小存储内容
p1FAT256MZimage,u-boot.scr,soc_system.dtb,soc_system.rbf
p2EX4254Mrootfs
p3RAW(A2)1Mpreloader-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
  • 1

同时需要把u-boot.img也拷贝到A2分区,负责会导致SPL无法读取u-boot.img而重复引导

sudo dd if=u-boot.img of=/dev/loop0p3 bs=64k seek=4
  • 1
  • FAT分区和ext4分区
    FAT和ext4根文件系统分区都是需要创建文件系统,其中FAT分区存储硬件配置信息、设备文件、u-boot相关文件以及后续步骤生成Linux内核镜像,ext4分区主要是后续生成的文件系统,使用以下两个命令创建两个文件系统:
sudo mkfs -t vfat /dev/loop0p1
sudo mkfs.ext4 /dev/loop0p2
  • 1
  • 2
  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
  • 1
  • 配置内核
make ARCH=arm menuconfig
  • 1

完成对应修改后保存配置文件

  • 编译内核
    生成zImage

4. 制作根文件系统

根据指南,我们使用buildroot工具创建根文件系统和必要的系统应用程序。

4.1 下载buildroot

4.2 配置bulidroot

4.3 配置busybox

4.4 生成根文件系统

5. 完善和测试SD卡镜像

分区编号文件类型大小存储内容
p1FAT256MZimage,u-boot.scr,soc_system.dtb,soc_system.rbf
p2EX4254Mrootfs
p3RAW(A2)1Mpreloader-mkpimage.bin,u-boot.img

根据表格,我们继续完善我的sdcard.img,把根文件解压到对应的分区的挂载点下:

sudo tar -xvf buildroot/output/image/rootfs.tar -C <mount point of the 254MB ext4 partition>
  • 1

再把生成的Linux内核镜像复制到的FAT分区所挂载的位置:

sudo cp linux_socfpga/arch/arm/boot/zImage <mount point of the 256MB FAT partition>
  • 1

至此Linux系统搭建完成,可以上板测试,通过串口调试工具控制和显示信息。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/383548
推荐阅读
相关标签
  

闽ICP备14008679号