zynq MPSoc Linux开发

前言

前文继续在正点原子的Zynq 7000板子上学习Linux驱动开发,学习过程蜿蜒曲折,按着教程一步一个坑,一步一个报错,想越过试着尝试下一步学习,果不其然还是报错,最后想到切换到MPSoC开发可能还会来一遍这样的报错经历,故决定直接改换到zynq MPSoC的Linux开发学习中,要报错也早点遇到

zynq MPSoC Linux系统搭建

这是米联客官方的教程版本,流程和正点原子又有所不同

报错记录

在编译uboot时会报一下错误

/usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status

原因:gcc版本过新了,使用gcc-9或更早版本

解决办法

sudo apt install gcc-9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 100

后面又遇到编译报错,问题难以解决,选择下载米联客官方的虚拟机Ubuntu镜像,使用新的虚拟机

进入,鼠标无反应,重启,键盘无反应,重启,网络无,重启,更换NAT模式,重启,无法下载软件,更换软件源

编译无报错,问题终于解决

安装流程

  1. Vivado创建工程,编译导出硬件XSA

0

这里第一次生成bitstream失败,因为米联客使用了Xilinx的某个收费的IP核,人家申请了IP核使用我没申请,故不给生成,解决办法:

向官网 https://xilinx.entitlenow.com/AcrossUser/main.gsp?

申请IP核使用,好像只有几个月试用期,不管,能编译成功就行

  1. 构建Vitis工程

导入设备树模板 https://github.com/Xilinx/device-tree-xlnx

1

创建Platform Project,创建过程中会导入刚才生成的XSA和使用到添加的设备树

然后编译程序

编译好后寻找下面几个文件: system_wrapper.bit: {工程位置}\zu_sdk\zu_base\hw
fsbl.elf: {工程位置}\zu_sdk\zu_base\export\zu_base\sw\zu_base\boot
pmufw.elf: {工程位置}\zu_sdk\zu_base\export\zu_base\sw\zu_base\boot
zynqmp-mzux.dts:{附件目录}\soc_dts\

将这几个文件移到一个文件夹存放好,下一步使用

  1. 构建linux镜像

下载这个文件发送到虚拟机解压

uisrc-lab-xlnx20220501(MPSOC系列) 链接:https://pan.baidu.com/s/1W8wZ4EKlpqML-zTWyLzGhw提取码:1111

将 system_wrapper.bit、fsbl.elf 两个文件分别改名为 system.bit、zynqmp_fsbl.elf

将 system.bit 、 zynqmp_fsbl.elf 、 pmufw.elf 三个文件拷贝到 { 解 压 目 录 }/uisrc-lab-xlnx/boards/mzux/ubuntu/output/target

将 zynqmp-mzux.dts 设备树文件,分别复制到,选择覆盖: {解压目录}/uisrc-linuxb/sources/uboot/arch/arm/dts {解压目录}/uisrc-linuxb/sources/kernel/arch/arm64/boot/dts/xilinx

进入米联客提供的开发目录下

cd uisrc-lab-xlnx

配置环境变量

source scripts/mzuxcfg.sh

然后分别输入下面三个命令执行脚本,这也是编译的过程,需等待一定时间

make_uboot.sh

make_kernel.sh 

create_image.sh

然后插入 TF 卡准备烧写,分别执行

make_parted.sh      
deploy_image.sh     

将模式开关拨至 SD 卡启动模式,选择ON-ON-OFF-OFF

给开发板上电,串口连接电脑找不到,正在研究原因

但我觉得应该会是启动成功的,因为核心板上有亮蓝光

已知:JTAG模式启动不会有蓝光,EMMC启动因为出厂固化了Linux系统,也有蓝光

SD卡启动也有蓝光,判断SD卡启动的情况应该接近EMMC的Linux系统启动情况,但问题是找不到串口


本文章使用limfx的vscode插件快速发布