论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
主机系统
›
linux
›
从零开始顺从Linux(一):ZYNQ-Linux启动文件构建全剖 ...
从零开始顺从Linux(一):ZYNQ-Linux启动文件构建全剖析 ...
盛世宏图
金牌会员
|
2025-3-20 23:05:13
|
显示全部楼层
|
阅读模式
楼主
主题
975
|
帖子
975
|
积分
2925
从零开始顺从Linux(一):ZYNQ-Linux启动文件构建全剖析
ZYNQ系列芯片集成了ARM处理器和FPGA(可编程逻辑单元),正是因为由于ARM处理器的存在,所以我们可以在ZYNQ系列芯片上面运行Linux系统。
在ZYNQ系列芯片上运行Linux会给我们带来很多优势:首先,我们可以将部分逻辑处理(比如信号处理、数据流控制等)放到FPGA中,剩下的操纵交给ARM处理器执行。这样,硬件和软件可以无缝协同,优化整体系统服从;其次,运行Linux意味着可以使用Linux的丰富生态和开源资源。你可以利用大量的开源软件、驱动、工具和库,减少开发本钱并加快开发周期。最后,ZYNQ的开发情况(如Xilinx的Petalinux)对Linux的支持非常好,同时也可以利用如GDB、JTAG等调试工具进行开发,便于定位题目并优化代码。
本教程我们就一起来看一下,如何基于正点原子提供的出厂干系源代码,制作ZYNQ开发板的启动文件,并成功运行Linux系统。
1.1制作前准备工作
1)一款ZYNQ开发板:本次以领航者ZYNQ-7020开发板来演示;
2)一台运行Ubuntu系统的计算机(或者虚拟机);
资料盘A盘:
https://pan.baidu.com/s/1vXxmhg_mZm_OVg4xQeiCVQ
提取码:zdyz
资料盘B盘:
https://pan.baidu.com/s/1NNYDCpEkM2jd6jR69Y1mfg
提取码:zdyz
1.2安装ZYNQ-7000交叉编译工具链
编译uboot和内核源码须要在linux系统(虚拟机)中安装相应的交叉编译工具链。安装ZYNQ-7000系列芯片的交叉编译工具链须要sdk.sh文件。
把开发板资料盘B盘:\sdk\202002\sdk.sh拷贝到Ubuntu虚拟机。拷贝完成后,在虚拟机中切换到sdk.sh文件所在目录,为sdk.sh文件赋予可执行权限并安装,命令如下:
#如果之前没有安装过build-essential、git、u-boot-tools,请先执行如下命令进行安装
sudo apt update
sudo apt -y install build-essential git u-boot-tools
#安装SDK
chmod +x sdk.sh
./sdk.sh
复制代码
默认是安装在/opt/petalinux/2020.2 目录下,如果想安装在其他目录下,可以输入相应的路径,此处笔者保持默认,按回车键继承,结果如下图所示:
图 1.1.1 安装SDK
再次确认是否将SDK安装在/opt/petalinux/2020.2 目录下,默认为“Y”,也就是“是”,按回车键继承往下执行,体现要输入用户密码,输入完成后回车进行安装,等待安装完成。安装完成后提示每次当你在一个新终端中使用SDK,须要先执行“. /opt/petalinux/2020.2/environment-setup-cortexa9t2hf-neon-xilinx-linux-gnueabi”以设置相应的情况变量,其中的“.”和source具有雷同含义。
1.3拷贝源码到Ubuntu系统
拷贝u-boot源码
开发板出厂镜像使用的u-boot源码路径为:开发板资料盘(A 盘)\4_SourceCode\3_Embedded_Linux\资源文件\出厂镜像干系,在该目录下有一个名为atk-zup-uboot-xlnx.tar.gz的压缩包文件,如下所示:
图 1.2.1 u-boot源码
atk-zynq-uboot-xlnx.tar.gz是专门用于开发板出厂测试的u-boot源码压缩包文件。我们将atk-zynq-uboot-xlnx.tar.gz压缩包文件拷贝到Ubuntu系统中,如下所示:
图 1.2.2 将u-boot压缩包文件拷贝到Ubuntu
接下来将其解压,对应的解压目录就是U-Boot源码目录,这个解压目录各人可以自己设置。因为解压后会自动在解压目录中创建一个名为atk-zynq-uboot-xlnx的文件夹,该文件夹下即是uboot源码。为了制止和教程中使用的uboot相肴杂,笔者这里选择将其解压到用户家目录下的~/workspace/src目录中。
执行如下命令将其解压到~/workspace/src/目录中:
mkdir -p ~/workspace/src/ #创建~/workspace/src/文件夹
cd /mnt/hgfs/share/source_code/ #切换到uboot压缩包文件所在目录
tar -xzf atk-zynq-uboot-xlnx.tar.gz -C ~/workspace/src/ #解压
ls ~/workspace/src/
ls ~/workspace/src/atk-zynq-uboot-xlnx/
复制代码
图 1.2.3 解压U-Boot源码包
解压完成后,atk-zynq-uboot-xlnx文件夹存放的即是出厂镜像使用的uboot源码。
拷贝内核源码
开发板出厂镜像使用的Linux内核源码路径为:开发板资料盘(A 盘)\4_SourceCode\3_Embedded_Linux\资源文件\出厂镜像干系,在该目录下有一个名为atk-zynq-linux-xlnx.tar.gz的压缩包文件,如下所示:
图 1.2.4 内核源码压缩包文件
atk-zynq-linux-xlnx.tar.gz是专门用于开发板出厂镜像的Linux内核源码压缩包文件。我们将atk-zynq-linux-xlnx.tar.gz压缩包文件拷贝到Ubuntu系统中,如下所示:
图 1.2.5 将内核源码压缩包文件拷贝到Ubuntu
接下来将其解压,对应的解压目录就是Linux内核源码目录,这个解压目录各人可以自己设置。因为解压后会自动在解压目录中创建一个名为linux-xlnx的文件夹,该文件夹下即是Linux内核源码。为了制止和教程中使用的Linux内核源码相肴杂,笔者这里选择将其解压到用户家目录下的~/workspace/src目录中:
执行如下命令将其解压到~/workspace/src目录中:
mkdir -p ~/workspace/src/
cd /mnt/hgfs/share/source_code/ #切换到uboot压缩包文件所在目录
tar -xzf atk-zynq-linux-xlnx.tar.gz -C ~/workspace/src/ #解压
sync
复制代码
图 1.2.6 解压内核源码
解压完成后,得到的atk-zynq-linux-xlnx文件夹即是出厂镜像使用的Linux内核源码根目录。使用ls命令(ls ~/workspace/src/atk-zynq-linux-xlnx),可看到Linux内核源码目录结构,如下图所示:
图 1.2.7 Linux内核源码目录结构
拷贝xsa文件
使用xsa文件以创建相应的Petalinux工程,
在开发板资料包中,已经给各人提供了开发板出厂时所对应的vivado工程。
对于领航者7010开发板,使用的是Navigator_7010工程。
笔者以领航者7020开发板为例,路径为:开发板资料盘(A盘)\4_SourceCode\3_Embedded_Linux\vivado_prj,在这个目录下有一个压缩包文件Navigator_7020.zip,将其在Windows系统下解压,解压后如下图所示:
图 1.2.8 vivado工程目录
system_wrapper.xsa为Vivado导出的xsa文件,这里直接将system_wrapper.xsa文件夹拷贝到Ubuntu系统某个目录下,例如/mnt/hgfs/share/xsa/7020/,如下图所示:
图 1.2.9 将xsa文件拷贝到Ubuntu
1.4编译
在上一节中我们已经将编译所须要的所有“原质料”拷贝到Ubuntu系统了,接下来可以进行编译了,须要注意在是,在编译之前,须要安装Xilinx的petalinux工具,以及设置交叉编译工具链的工作情况。如果还没安装petalinux的,可以参考《领航者ZYNQ之嵌入式Linux开发指南》的第5章内容Petalinux的安装进行安装;设置交叉编译工具链的工作情况请参考下一小节。
1.5设置交叉编译工具链的工作情况
每打开一个新终端,都须要在终端中执行如下命令设置SDK的情况变量以使用交叉编译器:
. /opt/petalinux/2020.2/environment-setup-cortexa9t2hf-neon-xilinx-linux-gnueabi
复制代码
如果不想每打开一个新终端就执行这个命令,可以将其放入~/.profile或者/etc/profile文件中,命令如下:
echo '. /opt/petalinux/2020.2/environment-setup-cortexa9t2hf-neon-xilinx-linux-gnueabi ' | tee -a ~/.profile #注意看下图,这条命令是完备的一行
tail -5 ~/.profile
复制代码
结果如下图所示:
图 1.4.1 加载~/.profile文件时设置SDK情况变量
这样,将命令“. /opt/petalinux/2020.2/environment-setup-cortexa9t2hf-neon-xilinx-linux-gnueabi”写入到~/.profile文件中,启动虚拟机登录当前用户后会自动执行该命令。不过当前终端不可用,须要重启才能见效。
注:如果读者之前用雷同的方式设置过Petalinux 2020.2版本的SDK,请先从~/.profile等文件中删除干系的行,或者直接使用之前的SDK,如果可用的话。
设置SDK的情况变量后,在终端输入命令arm-xilinx-linux-gnueabi-gcc --version来检察当前使用的交叉编译器版本号。看到如下结果,表明情况变量已经见效。
图 1.4.2检察 gcc 版本信息
可以看到,我们使用的zynq交叉编译器版本为9.2.0。
设置情况变量后可以使用env命令查瞥见效的情况变量,下图为部分截图:
图 1.4.3检察设置后的情况变量
不同的情况变量有不同的作用。比如情况变量CC,可以看出该情况变量已经配置好gcc交叉编译器编译时所用的参数,比如使用arm-xilinx-linux-gnueabi-gcc编译器,可直接使用情况变量$CC,如交叉编译某个.c文件,如hello.c,直接使用$CC hello.c就可以了。
创建Petalinux工程
创建Petalinux工程的步骤在《领航者ZYNQ之嵌入式Linux开发指南》第六章Petalinux设计流程实战中已讲解,本章就不细述,也可直接使用第六章Petalinux设计流程实战的Petalinux工程,重新导入xsa文件即可。
先在Ubuntu主机终端中选一个符合的路径以创建出厂镜像使用的Petalinux工程,然后在终端中输入如下命令:
cd <相应的目录> #切换到创建Petalinux工程的目录
sptl #设置petalinux工作环境
petalinux-create -t project --template zynq -n base #创建Petalinux工程
cd base #进入到petalinux工程目录下
petalinux-config --get-hw-description /mnt/hgfs/share/xsa/7020 #导入相应的xsa文件
复制代码
以上命令执行完成之后会自动在当前目录下创建一个名为base的文件夹,也就是我们出厂镜像的petalinux工程对应的工程目录。
xsa文件导入成功之后会自动弹出petalinux工程配置窗口,如下图所示:
图 1.4.4 petalinux工程配置窗口
使用默认配置即可,保存并退出。
编译出厂源码u-boot、制作BOOT.BIN
进入到u-boot源码根目录下。
领航者开发板对应的配置文件为:configs/xilinx_zynq_virt_defconfig
领航者开发板对应的设备树文件为:arch/arm/dts/zynq-atk.dts
执行如下命令编译u-boot源码:
make distclean # 清理工程
make xilinx_zynq_virt_defconfig #配置uboot
make -j # 编译
复制代码
图 1.4.5 编译u-boot源码
编译成功之后,会在u-boot目录下生成镜像文件,如下所示:
图 1.4.6 生成镜像文件
u-boot.elf是一个elf格式的uboot可执行文件,u-boot.dtb是uboot的设备树文件。
输入如下命令生成boot.scr启动脚本文件:
./tools/mkimage -c none -A arm -T script -d atk-zynq-boot.cmd.default boot.scr
复制代码
图 1.4.7 生成boot.scr
boot.scr是出厂镜像中uboot用于从相应的存储设备加载内核镜像和设备树的脚本文件。
切换到创建的Petalinux工程目录,执行下面的命令制作领航者开发板所需的启动文件BOOT.BIN:
petalinux-build -c bootloader #生成fsbl.elf文件
petalinux-package --boot --fsbl --fpga \
--u-boot ~/workspace/src/atk-zynq-uboot-xlnx/u-boot.elf \
--dtb ~/workspace/src/atk-zynq-uboot-xlnx/u-boot.dtb --force
复制代码
图 1.4.8 制作BOOT.BIN文件
注:如果编译报设备树干系的错误,请按照第六章Petalinux设计流程实战那样配置设备树,我们不消Petalinux编译的设备树,只是办理错误。
命令执行成功之后,会在当前Petalinux工程的images/linux目录下生成BOOT.BIN启动文件,如下图所示:
图 1.4.9 生成BOOT.BIN文件
编译内核、设备树
进入到Linux内核源码根目录下。
内核defconfig配置文件为:arch/arm/configs/xilinx_zynq_defconfig
领航者7020开发板对应的设备树文件为:arch/arm/boot/dts/atk-navigator-7020.dts
领航者7010开发板对应的设备树文件为:arch/arm/boot/dts/atk-navigator-7010.dts
执行如下命令编译内核源码:
make distclean # 清理工程
make xilinx_zynq_defconfig # 配置
make -j8 # 编译zImage和设备树
复制代码
图 1.4.10 编译内核源码
编译得到的内核镜像文件zImage在arch/arm/boot目录下,如下图所示:
图 1.4.11 生成的内核镜像文件
编译得到的设备树文件在arch/arm/boot/dts目录下,如下图所示:
图 1.4.12设成的设备树文件
atk-navigator-7020.dtb对应领航者7020开发板的设备树文件;
atk-navigator-7010.dtb对应领航者7010开发板的设备树文件。
至此,启动开发板所需所有镜像文件都已经编译完成了,包罗BOOT.BIN文件、boot.scr、zImage、设备树dtb四个文件。
1.6Linux启动!
制作一张SD启动卡,SD启动卡的制作方法,可以参考《领航者ZYNQ之嵌入式Linux开发指南》第六章Petalinux设计流程实战中的制作SD启动卡小节。这里不再赘述!
将上一节编译得到的四个镜像文件拷贝到SD启动卡的第一个分区,也就是Fat32分区,其中
BOOT.BIN文件位于Petalinux工程的images/linux目录下;
boot.scr位于uboot源码根目录下;
zImage文件位于linux内核源码根目录下的arch/arm/boot/目录下;
dtb文件位于linux内核源码根目录下的arch/arm/boot/dts/目录下。
拷贝完成后如下所示:
图 1.5.1 SD启动卡Fat分区文件
注:一般只须要拷贝开发板对应的设备树dtb文件就可以了,拷贝多个设备树文件也是可以的,启动过程中只用到开发板对应的设备树dtb文件。
接下来我们要拷贝根文件系统到SD启动卡第二个分区,在开发板资料包中已经给各人提供了出厂时使用的根文件系统,在开发板资料盘(A盘)\4_SourceCode\3_Embedded_Linux\资源文件\出厂镜像干系目录下有一个名为rootfs.tar.gz的压缩包文件,如下所示:
图 1.5.2根文件系统
rootfs.tar.gz中包含的根文件系统是出厂镜像使用的根文件系统,由于测试须要,笔者也移植了一些软件到其中。该根文件系统比力大、内容比力多,包罗Qt5、Python、opencv等常用库文件。
将rootfs.tar.gz拷贝到Ubuntu系统中,然后使用tar命令将rootfs.tar.gz压缩包文件解压到SD启动卡的第二个分区,如下所示:
sudo tar -xzf rootfs.tar.gz -C /media/$USER/rootfs
ls /media/$USER/rootfs
sync
复制代码
图 1.5.3 解压根文件系统到SD卡第二分区
sync同步完成之后,卸载SD卡(umount命令),拔掉SD卡将其插入开发板SD卡卡槽,将开发板启动方式设置为SD卡启动,连接串口、LCD屏和电源启动开发板,领航者开发板连接SD(TF)卡的正面图如下图所示:
图 1.5.4 开发板插入TF卡和串口
打开MobaXterm串口上位机或别的串口上位机。上位机打印Linux启动信息如下:
图 1.5.5 打印Linux启动信息
1.7扩展:如何使出厂镜像从QSPI启动?
出厂镜像将启动文件放在QSPI中,根文件系统存到eMMC中。从QSPI启动,首先须要像出厂镜像那样将zImage文件、dtb文件和bit文件打包成image.ub文件,打包方法如下:
首先进入到Linux内核源码根目录下。
对于7020焦点板,输入如下命令即可:
mkimage -f zynq-fit-image.its image.ub
复制代码
对于7010焦点板,输入如下命令即可:
sed -i 's/7020/7010/g' zynq-fit-image.its
mkimage -f zynq-fit-image.its image.ub
复制代码
生成的image.ub文件在内核源码根目录下,输入命令ls -l image.ub即可看到。
打包完成后,将image.ub文件和之前编译得到的BOOT.BIN、boot.scr文件拷贝到SD启动卡的第一个分区,也就是Fat32分区,其中
BOOT.BIN文件位于Petalinux工程的images/linux目录下;
boot.scr位于uboot源码根目录下;
image.ub文件位于Linux源码根目录下。
根文件依旧如前解压到到SD启动卡第二个分区。
从SD卡启动后,在串口终端中输入如下命令将启动镜像固化到QSPI和拷贝根文件系统到eMMC:
/opt/image/burn_qspi.sh
复制代码
图 1.6.1 执行固化脚本
系统固化完成之后,蜂鸣器会响,表明已经将系统镜像和根文件系统分别烧写到了QSPI和eMMC存储介质中了,也意味着开发板可以从QSPI方式启动系统了。
在资料盘中我们提供了一个.img格式文件的出厂镜像,这里重要是为了方便各人直接烧录出厂程序到TF卡中启动开发板,烧录镜像的步骤可以参考《领航者ZYNQ开发板用户快速体验》文档。相比于我们刚刚制作的这些启动文件,一个独立的img镜像文件显然更方便我们烧录到TF卡来启动Linux系统,我们也收到过很多的私信想学习如何将这些启动文件转化成img镜像文件,后续我们也会给各人分享详细步骤,敬请期待!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
盛世宏图
金牌会员
这个人很懒什么都没写!
楼主热帖
绝了,这20款可视化大屏模板太酷炫了( ...
零基础学Java(1)初识Java程序 ...
【十年网络安全工程师整理】—100渗透 ...
聊聊DevOps制品管理-不止是存储制品这 ...
Frida主动调用java函数来爆破解题思路 ...
15年了,我们到底怎样才能用好 Serverl ...
Python程序运行内存的查看
记一次 .NET 某RFID标签管理系统 CPU ...
数据库扩容也可以如此丝滑,MySQL千亿 ...
【Linux进程概念——下】验证进程地址 ...
标签云
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表