阅读 515

FPGA ZYNQ Linux内核分离编译

1 开发模式

image.pngimage.png

  • 编写 linux 驱动的时候,经常改动的要素有设备树文件、linux 内核、根文件系统,当然如果改动 PL 的话还需改动 bit 文件。因而我们将这些要素独立出来,从而方便修改变更。也就是说我们将 bit 文件从原先的 BOOT.BIN 文件独立出来,将 image.ub 文件分开为内核 zImage和设备树dtb。另外将根文件系统放到 SD 卡的

2 BOOT.BIN 剥离出bitStream文件

  • 先在 Ubuntu 主机终端中选一个合适的路径以创建出厂镜像的 Petalinux 工程,然后在终端中输入如下命令:

    source /opt/pkg/petalinux/2018.3/settings.sh //设置 petalinux 工作环境
    petalinux-create -t project --template zynq -n ALIENTEK-ZYNQ //创建 Petalinux 工程
    cd ALIENTEK-ZYNQ //进入到 petalinux 工程目录下
    petalinux-config --get-hw-description ../hdf/Navigator_7010.sdk/  //导入 hdf 文件复制代码

image.png

  • 进入“Subsystem AUTO Hardware Settings”子菜单下的“Advanced bootable imagesstorage Settings”菜单中,移动到“dtb image settings”选项,并将 image storage media 设置为 primary sd

image.png

  • 进入到“Image Packaging Configuration”菜单下的“Root filesystem type (INITRAMFS)”子菜单下

image.png

  • 配置完成后,编译 uboot,及生成 BOOT.BIN 文件

    petalinux-build -c u-boot
    petalinux-package --boot --fsbl --u-boot --force复制代码

image.png

3 image.ub剥离出ZImage/设备树/根文件

  • 生成设备树文件,在 Petalinux 工 程 中 执 行 编 译 uboot 后 , 会 在 工 程 的components/plnx_workspace/device-tree/device-tree/目录下生成设备树文件,红框圈出的是我们需要用到的设备树文件,skeleton.dtsi 文件我们一般不用。

image.png

  • 内核源码,用新xilinx 官方 2018.3 版本( 这个版本是 x xilinx  设定的版本,其 x linux  版本为  4.14.0)的内核源码

image.png

3.1 修改设备树文件

  • 将前面生成的设备树文件(生成的设备树文件在Petalinux 工程components/plnx_workspace/device-tree/device-tree/目录下)pcw.dtsi、pl.dtsi、system-top.dts 以及 zynq-7000.dtsi 四个文件直接拷贝到内核源码目录下的 arch/arm/boot/dts 目录中。

3.2 编译内核

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j10复制代码

image.png

  • 编译完成之后会在 arch/arm/boot/目录下生成一个名为 zImage 的内核镜像文件

3.3 编译设备树

  • 在内核里边我们需要单独编译出设备树的 dtb 文件,前面已经将我们所需要的设备树文件拷贝到内核的 arch/arm/boot/dts 目录下了,接下来执行下面这条命令编译 system-top.dtb文件:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- system-top.dtb -j10复制代码
  • 编译成功之后会在 arch/arm/boot/dts 目录下生成 system-top.dtb 文件

  • 为了方便、好看,笔者将 system-top.dtb 文件进行了重命名 system.dtb

image.png

3.4 编译 rootfs

petalinux-config -c rootfs复制代码
  • 进入“Image Features --->”菜单下,使能“debug-tweaks”,如下图所示

image.png

  • 等待其编译完成,完成之后产生的根文件系统压缩包在 images/linux 目录下

image.png

4 制作SD启动卡

image.png

4.1 拷贝镜像到FAT分区

  • 将前面过程当中生成的各种镜像文件拷贝到 SD 启动卡的 FAT 分区,包括  zImage(内核镜像,内核源码目录 arch/arm/boot/zImage)、 system-top.dtb(内核设备树 dtb 文件,内核源码目录 arch/arm/boot/dts/system-top.dtb)、 systemt.bit(pl 端 bitstream 文件,Petalinux工程目录下的 images/linux/system.bit)。

  • BOOT.BIN文件拷贝到 FAT 分区

image.png

4.2 将根文件系统解压到EXT4

sudo tar -xzf rootfs.tar.gz -C /media/linux/rootfs复制代码

image.png

5启动开发板

  • 在U-Boot 启动 2 秒倒计时之前,按回车或者是空格键停止启动,进入到 U-Boot 的命令行

模式,因为现在不能直接启动,我们需要对 U-Boot 环境变量进行修改,在 U-Boot 命令行下执 行下面这些命令设置环境变量,image.png

image.png

env default -a
setenv bitstream_load_address 0x100000
setenv bitstream_image system.bit
setenv bitstream_size 0x300000
setenv kernel_img zImage
setenv dtbnetstart 0x2000000
setenv netstart 0x2080000
setenv default_bootcmd 'if mmcinfo; then run uenvboot; echo Copying Linux from SD to RAM... && load mmc
0 ${bitstream_load_address} ${bitstream_image} && fpga loadb 0 ${bitstream_load_address} ${bitstream_size}
&& run cp_kernel2ram && run cp_dtb2ram && bootz ${netstart} - ${dtbnetstart}; fi'复制代码
  • 保存完成后执行 boot 命令启动内核或者执行 reset 重启开发板:

image.png


作者:技术洞察TIC
链接:https://juejin.cn/post/7032901481112010789


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐