Xilinx MPSOC kernel 离线编译

1. Petalinux中 保留Linux和UBoot源代码

缺省情况下,PetaLinux在编译完成后会删除源代码,以节省硬盘空间。在project-spec/meta-user/conf/petalinuxbsp.conf里,添加如下内容,可以保留Linux和UBoot源代码。

RM_WORK_EXCLUDE += "linux-xlnx"

RM_WORK_EXCLUDE += "u-boot-xlnx"

2. 取得Linux源代码

如果为Linux添加了上述RM_WORK_EXCLUDE字段,PetaLinux工程在编译后,在build目录下的某一级子目录kernel-source,含有所有Linux源代码。对于PetaLinux 2019.1的ZCU106 BSP工程,Linux源代码在目录 ./build/tmp/work-shared/zcu106-zynqmp/kernel-source/。可以复制这个目录里的Linux源代码,用来使用open source流程编译。

PetaLinux工程在编译后,在build目录下的某一级子目录kernel-build-artifacts保存了Linux的配置文件.config. 对于PetaLinux 2019.1的ZCU106 BSP工程,Linux的配置文件.config在./build/tmp/work-shared/zcu106-zynqmp/kernel-build-artifacts/。

为了方便使用,可以把文件.confi复制到Linux源代码的子目录arch/arm/configs/下,重命名为xilinx_peta_defconfig。这样使用make xilinx_peta_defconfig,可以创建PetaLinux使用的Linux配置。

生成image.ub,需要一个后缀名为its的配置文件,来指定使用的设备树文件、根文件系统文件、内核文件。在PetaLinux 2018.2/2018.3里,images/linux/下有文件rootfs.its。在PetaLinux 2019.1和2019.2里build目录下的文件fit-image-petalinux-user-image.its,也可以用于生成image.ub。对于PetaLinux 2019.1的ZCU106 BSP工程,它在目录build/tmp/work/zcu106_zynqmp-xilinx-linux/linux-xlnx/4.19-xilinx-v2019.1+gitAUTOINC+9811303824-r0/linux-zcu106_zynqmp-standard-build/下。

fit-image-petalinux-user-image.its使用了build下的层次很深的子目录来指定文件。为了方便,可以修改为使用images/linux下的文件。PetaLinux工程的目录"images/linux/"里,含有创建image.ub的devicetree、rootfs文件等。

3. 取得UBoot源代码

如果为UBoot添加了上述RM_WORK_EXCLUDE字段,PetaLinux工程在编译后,在build目录下的某一级子目录u-boot-xlnx里的子目录git,含有所有UBoot源代码。对于PetaLinux 2019.1的ZCU106 BSP工程,UBoot源代码在目录 ./build/tmp/work/zcu106_zynqmp-xilinx-linux/u-boot-xlnx/v2019.01-xilinx-v2019.1+gitAUTOINC+d895ac5e94-r0/git/。如果使用了外部UBoot源代码编译,则没有这个源代码。可以复制前面提到的UBoot源代码,用来使用open source流程编译。

值得注意的是,从PetaLinux工程里得到的UBoot源代码的include/configs/platform-auto.h文件里的宏定义里的连接符后有空格,导致编译时编译器会产生大量警告。建议修改platform-auto.h,消除编译器警告。下面是修改之前的宏定义的一部分。

"nc=setenv stdout nc;setenv stdin nc;\0" \

"ethaddr=00:0a:35:00:22:01\0" \

PetaLinux工程在编译后,在build目录下的某一级子目录u-boot-xlnx里的子目录build下,保存了Linux的配置文件.config. 对于PetaLinux 2019.1的ZCU106 BSP工程,UBoot的配置文件.config在./build/tmp/work/zcu106_zynqmp-xilinx-linux/u-boot-xlnx/v2019.01-xilinx-v2019.1+gitAUTOINC+d895ac5e94-r0/build/.config。

为了方便使用,可以把文件.confi复制到UBoot源代码的子目录configs下,重命名为xilinx_peta_defconfig。这样使用make xilinx_peta_defconfig,可以创建PetaLinux使用的UBoot配置。

PetaLinux工程生成boot.bin时,会在build目录下生成文件bootgen.bif。编译UBoot后,需要创建boot.bin,也需要bootgen.bif,所以把bootgen.bif一起复制到UBoot源代码目录。bootgen.bif里用的是临时目录,最好改成

PetaLinux工程的目录"images/linux/". PetaLinux工程的目录"images/linux/"里,含有创建boot.bin的pmu, fsbl, ATF的ELF文件。

4. Open Source 编译Linux

取得Linux源代码和配置后,可以在其中执行make,编译Linux。注意,编译前请导入PetaLinux环境变量,设置和导出ARCH为arm或者arm64;设置和导出CROSS_COMPILE,比如aarch64-linux-gnu-。编译后得到vmlinux,还需要用下列命令,把它打包成image.ub。

$make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64

$aarch64-linux-gnu-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin

$mv -f linux.bin.gz linux.bin

$mkimage -f fit-image-petalinux-user-image.its image.ub

注:如果没有mkimage可以使用sudo apt-get install u-boot-tools来安装


5. Open Source编译UBoot

取得UBoot源代码和配置后,可以在其中编译UBoot,得到u-boot.elf。然后再使用下列命令创建boot.bin。

$bootgen -arch zynqmp -image bootgen.bif -o BOOT.BIN -w on

你可能感兴趣的:(Xilinx MPSOC kernel 离线编译)