转至https://www.cnblogs.com/li--chao/p/7294306.html

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-socfpgagit 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搭建步骤相关推荐

  1. fpga烧写bin文件_Altera FPGA烧写步骤及注意事项_骏龙科技

    Altera FPGA烧写步骤及注意事项 作者:Altera中国区代理――骏龙科技 由于Fiberhome在一些比较老的项目中使用了EPC1或者EPC1441一次性编程器件,不能进行重复编程,如果烧写 ...

  2. Altera 的SOC器件之将自定义的IP挂在ARM硬核下(通过avalon总线),实现arm核与IP之间的通信

    Altera 的SOC器件之将自定义的IP挂在ARM硬核下(通过avalon总线),实现arm核与IP之间的通信 软件: Quartus II 17.0 芯片: ALTERA Cyclone5 5CG ...

  3. Altera FPGA管脚弱上拉电阻详细设置方法

    Altera FPGA管脚弱上拉电阻的软件设置方法 在使用 Altera 的 FPGA 时候, 由于系统需求, 需要在管脚的内部加上上拉电阻. Quartus II 软件中在 Assignment E ...

  4. Altera FPGA程序固化

    转载自CSDN博客: https://blog.csdn.net/yuan_hust/article/details/75269111 Altera FPGA程序固化 对MCU进行烧写程序,程序固件被 ...

  5. 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON12 IPCORE核之FIFO详细教程

    ALTERA FPGA IPCORE核之FIFO详细教程 若要观看该博客配套的视频教程,可点击此链接 一. FIFO简介 FIFO: 是英文first in first out的缩写,即先进先出,指的 ...

  6. 浅谈用ModelSim+Synplify+Quartus来实现Altera FPGA的仿真

    浅谈用ModelSim+Synplify+Quartus来实现Altera FPGA的仿真 工作内容: Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业 ...

  7. Altera FPGA/CPLD设计 基础篇+高级篇(附随书光盘)

    获取方法: 微信公众号:OpenFPGA   后台回复 Altera设计 基础篇介绍 <Altera FPGA/CPLD设计(基础篇)>是王诚.蔡海宁.吴继华编著的一本图书.该书可作为高等 ...

  8. quartus II Altera FPGA 未使用管脚默认设置

    刚接触Altera FPGA,测试时程序时,未使用的管脚有输出,如没有驱动的LED点亮了,这是因为 未使用的管脚系统默认设置为驱动接地,低电平驱动的LED就点亮了,本文将说明如何修改未使用管脚系统默认 ...

  9. kafka+zookeeper搭建步骤kafka问题

    kafka+zookeeper搭建步骤 帅气的名称被占用关注 0.1392018.12.04 13:48:00字数 1,007阅读 88 vmware 安装centOS7 克隆虚拟为:三台 本地你的I ...

最新文章

  1. 使用pxe来实现无人值守linux
  2. Kettle连接HiveServer2配置和常见问题解决
  3. incon函数图像c语言,[转载]c语言经典题目
  4. angular指令:tm.tags添加/删除标签
  5. 给博客园加一个会动的小人-spig.js
  6. ios开发证书,描述文件,bundle ID的关系
  7. 包图网签约神策数据,助力产品优化
  8. 1054 The Dominant Color (20 分)_12行代码AC
  9. [NOI2009] 变换序列 (匈牙利最大匹配)
  10. ubuntu12.04 安装Android Studio笔记
  11. JS身份证合法性校验完全版
  12. 开发不能上外网怎么查资料_中考生不能复读,近一半上不了高中,怎么办?
  13. MyBatis的CRUD操作
  14. python判断素数的函数_使用Python判断质数(素数)的简单方法讲解
  15. 【刷题篇】鹅厂文化衫问题
  16. 【SDU项目实训2019级】前端和后端实现手机短信验证码登录和注册功能
  17. .hex 文件详解 stm32
  18. PCI GXL系统测试报告1(支持混合传感器)
  19. gif表情制作一键轻松搞定,教你自制gif表情
  20. linux 安装 wget 失败 未知错误

热门文章

  1. GSM系统信令接续流程(一)(转)
  2. android usb触摸屏idc实现触摸唤醒
  3. 计算机一级经验分享,计算机一级考试经验
  4. 计算机网络--自顶向下方法 学习笔记之计算机网络和因特网
  5. LeetCode第258场周赛
  6. HTML+CSS的基础复习篇~
  7. 微信公众号如何开通留言功能?
  8. 郊区春游(状压DP水题)+ 记录路径
  9. Android界面布局练习
  10. 中华象思维的算法特征与逻辑基础