正点原子嵌入式Linux学习笔记1(Petalinux设计和U-Boot篇)

Petalinux是Xilinx为嵌入式Linux开发提供的工具,包括U-BOOT、Linux内核和根文件系统。设计流程涉及创建工程、配置并编译。U-BOOT作为通用启动加载器,负责引导Linux内核,由FSBL启动。FSBL由BootROM引导,从BOOT.BIN加载。SD卡启动流程中,BootROM从SD卡读取BOOT.BIN启动FSBL。文章还介绍了U-BOOT命令、网络、文件系统等相关操作。

Petalinux简介

  1. Petalinux是Xilinx针对嵌入式Linux开发所推出的开发套件、开发工具
  2. Petalinux包括U-Boot源码、Linux内核源码以及根文件系统
  3. 嵌入式Linux系统三巨头:U-Boot、Linux内核以及rootfs

Petalinux设计流程

  1. 搭建Vivado工程,导出hdf文件
  2. 创建一个petalinux工程
  3. 将hdf文件导入到petalinux工程(将vivado设计应用到petalinux工程)
  4. 配置petalinux工程(包括配置U-Boot、配置内核以及配置根文件系统)
  5. 编译petalinux工程(U-Boot镜像、内核镜像以及rootfs,bitstream,fsbl镜像文件)
  6. 启动开发板

Petalinux设计实战

导出hdf文件

  1. 编译好整个vivado工程,生成Bitstream之后,在菜单栏中选择File > Export > Export hardware 导出硬件,勾选Include bitstream,然后就得到了hdf硬件描述文件
  2. 不妨新建一个目录专门存放hdf文件mkdir zynq_petalinx.sdk
  3. 通过Mobaxterm将hdf文件传到该目录下

创建petalinux工程

  1. 终端输入sptl 进入petalinux工作环境
  2. mkdir 新建一个工作目录并进入该目录
  3. 创建名为zynq_linux的petalinux工程petalinux-create -t project --template zynq -n zynq_linux

hdf导入到petalinux工程

  1. 进入工作目录 cd zynq_linux
  2. 导入hdf petalinux-config --get-hw-description **/zynq_petalinx.sdk/后面的路径为hdf所在目录地址

配置petalinux工程

上一步完成后会自动弹出配置窗口
当然也可以通过这个命令重新配置

petalinux-config

一般默认配置,这一部分略

配置Linux内核

终端输入如下命令

petalinux-config -c kernel

无特殊需求,无需更改

配置Linux根文件系统

终端输入以下命令可配置根文件系统

petalinux-config -c rootfs

无特殊需求,无需更改
备注:root用户密码,默认为“root”

配置设备树文件

如果需要配置设备树,则可以编辑当前工程目录下的project-spec/meta-user/recipes-bsp/devicetree/files/system-user.dtsi文件
无特殊需求,无需更改

编译petalinux工程

编译整个petalinux工程命令

petalinux-build

optional: 可选单独编译命令如下

-c u-boot  #编译U-BOOT
-c kernel  #编译内核
-c rootfs  #编译根文件系统

制作BOOT.BIN启动文件

Petalinux 提供了petalinux-package 命令将 PetaLinux 项目打包为适合部署的格式

petalinux-package --boot命令可生成可引导映像,可直接与Zynq设备的FPGA设计一起使用

ZYNQ的启动文件BOOT.BIN一般包含fsbl文件、bitstream文件和U-BOOT文件
使用下面的命令可生成BOOT.BIN文件

petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga --u-boot --force

参数--boot表明我们要通过petalinux-package命令生成BOOT.BIN启动镜像文件
参数--fsbl用于指定 fsbl 镜像文件的位置
参数--fpga用于指定 bitstream文件的位置
参数--u-boot用于指定 U-BOOT文件的位置
参数--force表示强制覆盖当前目录下的BOOT.BIN文件

制作SD启动卡

配置过程详见正点原子启明星ZYNQ之Linux开发指南第六章6.2.10节
插入SD卡,连接到虚拟机,会出现一个BOOT分区
然后将该工程image/linux目录下的BOOT.BIN和image.ub文件拷贝到BOOT分区,最后拔出SD卡

开发板启动

  1. 将SD卡插入卡槽,连接串口通信线
  2. 将启明星底板上的启动模型设置为从SD卡启动(双OFF)
  3. 连接电源线,上电
  4. 打开Mobaxterm,连接串口,登录linux系统

U-BOOT

U-BOOT简介

<think>我们正在处理一个关于在PetaLinux环境中查找特定版本的U-Boot源码的问题。用户引用了5个站内引用,我们需要从中提取相关信息。 用户需求:查找PetaLinux环境中Linux的U-Boot-2020.1版本的源码。 分析引用内容: 引用[3]提到:在旧版本中,U-Boot源码在工程目录下直接可见,但新版本(如2018.3)采用网络下载编译,编译完成后自动删除。如果想保留,可以在工程配置文件中添加: RM_WORK_EXCLUDE += "linux-xlnx" RM_WORK_EXCLUDE += "u-boot-xlnx" 并且给出了U-Boot源码的路径: bsp/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/u-boot-xlnx (注意:这个路径可能是针对Zynq7的,具体平台可能不同) 引用[4]提供了一个安装创建PetaLinux工程的步骤,其中在创建工程后,通过`petalinux-config -c u-boot`可以生成U-Boot源码到工程目录下的某个路径(如:`xilinx-zcu102-v2019.2/components/plnx_workspace/sources/u-boot-xlnx`)。但这是2019.2版本的步骤。 用户需要的是2020.1版本的U-Boot源码。虽然引用中没有直接提到2020.1版本,但我们可以根据引用[3]引用[4]推断出源码的位置。 在PetaLinux工程中,U-Boot源码通常位于: <petalinux-project>/build/tmp/work/<machine>-xilinx-linux-gnueabi/u-boot-xlnx/<version>/ 其中<machine>是工程配置的目标硬件平台(如plnx_zynq7, plnx_zynqmp等),<version>是U-Boot的版本号(如2020.1)。 另外,引用[3]还提到一个内核源码路径: bsp/build/tmp/work-shared/plnx-zynq7/kernel-source 类似的,U-Boot可能也有一个共享的工作目录。 但是,需要注意的是,默认情况下,PetaLinux在构建完成后会删除源代码(除非按照引用[3]的方法在配置文件中添加排除删除的语句)。因此,如果用户已经构建过工程,并且没有设置排除删除,那么源码可能已经被删除。 所以,为了获取U-Boot 2020.1的源码,我们可以采取以下步骤: 1. 在创建PetaLinux工程时,或者创建后,修改工程目录下的配置文件: project-spec/meta-user/conf/petalinuxbsp.conf 添加两行(如果文件不存在,可以创建): RM_WORK_EXCLUDE += "linux-xlnx" RM_WORK_EXCLUDE += "u-boot-xlnx" 这样在构建后就不会删除linuxu-boot的源码。 2. 然后,进行配置构建U-Boot组件: petalinux-config -c u-boot petalinux-build -c u-boot 或者直接构建整个工程: petalinux-build 3. 构建完成后,U-Boot源码将保留在构建目录下的工作目录中。具体路径为: <petalinux-project>/build/tmp/work/<machine>-xilinx-linux-gnueabi/u-boot-xlnx/<version>+gitAUTOINC+<commit-id>/build/ 但实际源码在解压后的目录里,通常在: <petalinux-project>/build/tmp/work/<machine>-xilinx-linux-gnueabi/u-boot-xlnx/<version>+gitAUTOINC+<commit-id>/git 其中<machine>需要替换为实际的平台(如zynq-generic,zynqmp-generic等),<version>就是2020.1(但具体版本号可能略有不同,如2020.1-xilinx-v2020.1等)。<commit-id>是git提交的哈希值。 4. 另外,在引用[4]中,也提到在配置U-Boot时,会生成源码到: xilinx-zcu102-v2019.2/components/plnx_workspace/sources/u-boot-xlnx 这个路径是在工程目录下的components/plnx_workspace/sources/u-boot-xlnx。但这个路径可能是配置过程中使用的,并不是完整的构建源码目录,而且这个目录可能只是一个链接或部分源码。 因此,最可靠的方式是使用步骤3中的路径。 但是,用户可能还没有创建工程?或者已经创建了但没有设置保留源码? 如果用户已经构建了工程但没有设置保留源码,那么需要重新构建(在设置保留源码之后)。 如果用户还没有创建工程,那么可以按照以下步骤: - 创建工程(使用`petalinux-create`命令) - 修改project-spec/meta-user/conf/petalinuxbsp.conf文件,添加两行排除删除 - 配置工程(`petalinux-config`,选择正确的硬件设置) - 构建U-Boot(`petalinux-build -c u-boot`) 然后就可以在build目录下找到源码。 注意:不同版本(如2020.1)的PetaLinux可能会有略微不同的路径,但整体结构相似。 另外,引用[5]提到非PetaLinux版的U-Boot移植,但用户明确要求在PetaLinux环境下,所以不考虑。 因此,回答用户:在设置了排除删除后,构建工程,U-Boot 2020.1的源码将位于工程目录的build/tmp/work下的对应目录中。 具体操作步骤: 1. 如果已有工程,在工程根目录下,修改或创建文件:`project-spec/meta-user/conf/petalinuxbsp.conf`,添加: RM_WORK_EXCLUDE += "u-boot-xlnx" 保存。 2. 重新构建U-Boot组件: petalinux-build -c u-boot 3. 构建完成后,进入目录: cd build/tmp/work/ 然后根据你的硬件平台(如zynqmp_generic-xilinx-linux等)找到u-boot-xlnx开头的目录,再进入其中的git目录。 4. 或者,可以使用find命令查找: find build/tmp/work -name "u-boot-xlnx" -type d 注意:在2020.1版本中,硬件平台可能是zynqmp_generic(对于Zynq UltraScale+)或zynq_generic(对于Zynq-7000)等。 如果用户还没有创建工程,则需要先创建: 1. 设置PetaLinux环境:source <安装路径>/settings.sh 2. 创建工程:petalinux-create -t project -n <工程名> --template <模板> 或使用BSP 3. 进入工程目录,修改配置文件(如上) 4. 然后配置工程(如果需要)并构建。 另外,在引用[4]中,提到了一个步骤:`petalinux-config -c u-boot`,这个步骤会准备U-Boot的配置,并且可能会将U-Boot源码下载到工作区(但不会构建)。但源码的完整下载是在构建过程中进行的。 所以,我们总结如下: 要获得U-Boot 2020.1的源码,需要在工程配置中设置保留源码,然后构建U-Boot组件,随后在build/tmp/work目录下查找。 最后,由于用户引用的信息中版本略有不同(2018.32019.2),但方法在2020.1版本中应该类似。 注意:不同版本的PetaLinux可能使用不同的目录结构,但排除删除的设置方法是相同的。 因此,我们给出操作步骤。 </think>在PetaLinux环境中查找Linux的U-Boot 2020.1版本源码,可通过以下步骤实现: ### 解决方案 1. **配置工程保留源码** 修改工程配置文件,防止编译后自动删除源码: ```bash vim project-spec/meta-user/conf/petalinuxbsp.conf ``` 添加以下内容[^3]: ```conf RM_WORK_EXCLUDE += "u-boot-xlnx" ``` 2. **定位源码路径** 构建后源码位于工程目录的子路径中,具体取决于硬件平台: - **Zynq-7000平台**: `build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/u-boot-xlnx`[^3] - **Zynq UltraScale+平台**: `build/tmp/work/plnx_zynqmp-xilinx-linux-gnueabi/u-boot-xlnx` 实际路径示例: ```bash <工程目录>/build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/u-boot-xlnx/2020.1+gitAUTOINC+<commit_id>/git ``` 3. **完整操作流程** ```bash # 创建工程(若尚未创建) petalinux-create -t project --name myproj --template zynq # 进入工程目录并配置保留源码 cd myproj echo 'RM_WORK_EXCLUDE += "u-boot-xlnx"' >> project-spec/meta-user/conf/petalinuxbsp.conf # 构建U-Boot(触发源码下载) petalinux-build -c u-boot # 进入源码目录(以Zynq-7000为例) cd build/tmp/work/plnx_zynq7-xilinx-linux-gnueabi/u-boot-xlnx/*/git ``` ### 注意事项 - **版本差异**:路径中的`plnx_zynq7`需根据实际硬件平台调整(如ZynqMP平台为`plnx_zynqmp`)[^3][^4]。 - **首次构建要求**:必须执行`petalinux-build -c u-boot`触发源码下载,否则目录不存在。 - **源码验证**:进入目录后可通过`git branch`确认是否为`2020.1`版本分支。 --- ### 相关问题 1. 如何修改PetaLinux工程中的U-Boot配置参数? 2. 在PetaLinux中如何为自定义硬件移植U-Boot?[^5] 3. PetaLinux编译后如何永久保留内核源码?[^3] [^1]: 需先初始化PetaLinux环境:`source /opt/pkg/petalinux/2018.3/settings.sh` [^3]: 通过`RM_WORK_EXCLUDE`配置保留源码,路径因硬件平台而异 [^4]: 工程创建命令需匹配硬件模板(如`zynq`/`zynqMP`) [^5]: 非PetaLinux版U-Boot移植流程参考Linux系统移植文档
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值