本文转载自: XILINX开发者社区
本文作者:赛灵思工程师 Terry
大家在使用petalinux工具实现自己工程的时候难免会需要用到patch。如何在patalinux工具下生成patch和应用patch, 对于刚接触Xilinx petalinux工具的同学来说,可能会比较头疼。下面将对如何生成patch以及在petalinux工具中应用patch做一个整理。
1. petalinux工具中各个component或者recipe源码
每个Xilinx Petalinux工具版本都会在官网有一个AR来具体说明。所有版本说明的AR的名称会按照如下格式来命名,PetaLinux XXXX.X - Product Update Release Notes and Known Issues。例如你要找2021.1版本的话,可以在官网搜索PetaLinux 2021.1 - Product Update Release Notes and Known Issues就能直接找到了。
在这个AR中会有一个列表介绍当前版本下所有petalinux工具相关的版本信息。
2. 如何修改以及生成patch
2021.1及以后的版本:
可以直接通过petalinux工具中的命令,把源码下载到当前的petalinux工程中然后直接按照你的需要进行修改。之后petalinux工具会按照你修改后的源码进行编译。命令格式如下:
petalinux-devtool modify
例如:
petalinux-devtool modify linux-xlnx
Linux kernel的源码会被下载到
如果不知道确切的recipe的名字的话,可以使用petalinux-devtool search
例如:petalinux-devtool search xen
另外,在2021.1版本之后,FSBL的recipe-name为fsbl-firmware,pmu的recipe-name为pmu-firmware。
2021.1之前的版本:
a. 通过patch的方式实现源码的修改
利用git工具,先从上面的列表中找到对应的版本,然后先下载下来。
git clone -b
下载之后修改对应的源码,修改完成后回到源码的根目录来生成patch
git add . //把修改的内容添加到本地版本中
git diff
版本信息可以使用git log或者git status来查看。
接下来就可以将生成的patch应用到petalinux工程中去。通常就是修改对应recipe的bbappend文件,把patch添加进去即可。
FSBL:
把patch文件拷贝到
然后在
SRC_URI_append = "file://0001-FSBL.patch"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
接着用petalinux-build -x mrproper清空之前的编译内容,然后用petalinux-build重新编译。
PMU:
把patch文件拷贝到
然后在
SRC_URI_append = "file://0001-PMUFW.patch"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
接着用petalinux-build -x mrproper清空之前的编译内容,然后用petalinux-build重新编译。
device-tree:
把patch文件拷贝到
然后在
SRC_URI_append = "file://0001-dtc.patch"
接着用petalinux-build -x mrproper清空之前的编译内容,然后用petalinux-build重新编译。
Xen:
把patch文件拷贝到
然后在
SRC_URI_append = "file://0001-DomU.patch"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
接着用petalinux-build -x mrproper清空之前的编译内容,然后用petalinux-build重新编译。
b.如果只是需要修改u-boot或者kernel源码的话,我们还可以通过external的方式来实现。
利用git工具,从上面的列表中找到对应的版本,然后下载下来。
git clone -b
接着在petalinux工程的目录下使用petalinux-config命令来修改u-boot或者kernel的源配置。
u-boot external配置:
Linux components Selection -> u-boot -> ext-local-src
Linux components Selection -> External u-boot local source settings -> External u-boot local source path
Kernel external配置:
Linux components Selection -> linux-kernel -> ext-local-src
Linux components Selection -> External linux-kernel local source settings -> External linux-kernel local source path