鄠邑区建设和住房保障局网站,建设网站开发,多说评论插件对网站优化,东莞网站建设咨询文章目录 1.创建Petalinux工程#xff0c;生成BOOT.BIN创建Petalinux工程配置Petalinux工程生成BOOT.BIN 2.生成设备树文件3.编译kernel添加设备树文件defconfig配置menuconfig 配置编译内核源码编译设备树 4.编译rootfs5.启动开发板制作SD启动卡拷贝镜像到FAT分区将根文件系统… 文章目录 1.创建Petalinux工程生成BOOT.BIN创建Petalinux工程配置Petalinux工程生成BOOT.BIN 2.生成设备树文件3.编译kernel添加设备树文件defconfig配置menuconfig 配置编译内核源码编译设备树 4.编译rootfs5.启动开发板制作SD启动卡拷贝镜像到FAT分区将根文件系统解压到 EXT4 分区启动开发板 6.tcl脚本 1.创建Petalinux工程生成BOOT.BIN
编写 linux 驱动的时候经常改动的要素有设备树文件、linux 内核、根文件系统、bit文件将这些要素独立出来会方便修改。下面步骤是将 bit 文件从原先的 BOOT.BIN 文件独立出来将 image.ub 文件分开为内核 zImage 和设备树 dtb并将根文件系统放到 SD 卡的 EXT4 分区。
创建Petalinux工程
source /opt/pkg/petalinux/2018.3/settings.sh //设置 petalinux 工作环境
petalinux-create -t project --template zynq -n project //创建 Petalinux 工程
cd project //进入到 petalinux 工程目录下
petalinux-config --get-hw-description ../hdf/xx.sdk/ //导入 hdf 文件配置Petalinux工程
进入“Subsystem AUTO Hardware Settings”菜单下配置调试串口为ps7_uart_0。 进入“Advanced bootable images storage Settings”菜单中进入“dtb image settings”选项并将 image storage media 设置为 primary sd然后返回最初的配置界面。进入到“Image Packaging Configuration”菜单下的“Root filesystem type (INITRAMFS)”子菜单下选择“SD card”按键盘上的“Enter”键返回保存并退出。
生成BOOT.BIN
编译 fsbl 和 uboot生成 BOOT.BIN 文件。此时BOOT.BIN 文件仅包含 zynq_fsbl.elf 和 u-boot.elf 文件而没有包含bit文件。
petalinux-build -c bootloader
petalinux-build -c u-boot
petalinux-package --boot --fsbl --u-boot --force2.生成设备树文件
编译uboot后会在工程的components/plnx_workspace/device-tree/device-tree/目录下生成设备树相关文件红圈中的是需要用到的设备树文件skeleton.dtsi一般不用。 重新生成设备树文件 如果更改vivado工程BOOT.BIN文件不需要变动但需要重新生成设备树文件。 一、1.重新导入hdfpetalinux-config --get-hw-description hdf 文件路径 编译ubootpetalinux-build -c u-boot 二、1. 输入hsi进入到hsi命令模式 执行下面命令得到新的Vivado工程的设备树文件(device-tree-xlnx-xilinx-v2018.3是下载的设备树) open_hw_design /xxx/xxxx/.../hdf/xx.sdk/xx.hdf
set_repo_path /xxx/xxxx/.../device-tree-xlnx-xilinx-v2018.3
create_sw_design device-tree -os device_tree -proc ps7_cortexa9_0
generate_target -dir 设备树文件存放路径执行exit退出hsi。
3.编译kernel
添加设备树文件 将生成的设备树文件pcw.dtsi、pl.dtsi、system-top.dts 以及 zynq-7000.dtsi直接拷贝到内核源码目录下的 arch/arm/boot/dts 目录中。 修改system-top.dts文件主要修改了 bootargs 属性、添加了 model 属性、网口 0 的 MAC 地址以及给 qspi 进行了分区操作。
/* * CAUTION: This file is automatically generated by Xilinx. * Version: HSI * Today is: Mon Mar 16 02:51:23 2020 */ /dts-v1/; #include zynq-7000.dtsi #include pl.dtsi #include pcw.dtsi / { model Alientek ZYNQ Development Board; chosen { bootargs consolettyPS0,115200 earlyprintk root/dev/mmcblk0p2 rw rootwait; stdout-path serial0:115200n8; }; aliases { ethernet0 gem0; i2c0 i2c2; i2c1 i2c0; i2c2 i2c1; serial0 uart0; serial1 uart1; spi0 qspi; }; memory { device_type memory; reg 0x0 0x20000000; }; }; gem0 {local-mac-address [00 0a 35 00 1e 53]; }; qspi { #address-cells 1; #size-cells 0; flash0: flash0 { compatible n25q512a,micron,m25p80; reg 0x0; #address-cells 1; #size-cells 1; spi-max-frequency 50000000; partition0x00000000 { label boot; reg 0x00000000 0x00500000; }; partition0x00500000 { label bootenv; reg 0x00500000 0x00020000; }; partition0x00520000 { label kernel; reg 0x00520000 0x00a80000; }; partition0x00fa0000 { label spare; reg 0x00fa0000 0x00000000; }; }; }; 修改 arch/arm/boot/dts 目录下的 Makefile 文件 将设备树添加上去 defconfig配置
在内核源码目录下执行make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- xilinx_zynq_defconfig
不要漏掉空格 menuconfig 配置
需要时再配先默认。
编译内核源码
此步骤需要先配置一下环境变量sptl
输入make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- zImage -j10
编译完成之后会在 arch/arm/boot/目录下生成一个名为 zImage 的内核镜像文件。 编译设备树
输入make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- system-top.dtb -j10
编译成功后会在 arch/arm/boot/dts 目录下生成 system-top.dtb 文件。 4.编译rootfs
进入到petalinux工程目录下 配置根文件系统免密登录 petalinux-config -c rootfs进入“Image Features —”菜单下使能“debug-tweaks” 编译根文件系统petalinux-build -c rootfs
编译完成后产生的根文件系统压缩包rootfs.tar.bz2、rootfs.tar.gz在工程目录下的images/linux 目录下。
5.启动开发板
制作SD启动卡
格式化为两个分区FAT32和EXT4 参考petalinux设计流程
拷贝镜像到FAT分区
包括 zImage内核镜像内核源码目录 arch/arm/boot/zImage、system-top.dtb内核设备树 dtb 文件内核源码目录 arch/arm/boot/dts/system-top.dtb、system.bitpl 端 bitstream 文件Petalinux 工程目录下的 images/linux/system.bit。
然后将 BOOT.BIN 文件petalinux工程目录下的images/linux/BOOT.BIN拷贝到 FAT 分区
将根文件系统解压到 EXT4 分区
进入到 rootfs.tar.gz 压缩包文件所在目录工程目录下的images/linux 目录下 执行sudo tar -xzf rootfs.tar.gz -C /media/zr/rootfs 该路径为SD启动卡对应的 EXT4 分区的挂载点。 执行sync,将数据同步到SD卡中。 执行umount /dev/sdb*卸载SD启动卡。
启动开发板
设置ZYNQ的启动模式为SD卡启动 在 U-Boot 启动 2 秒倒计时之前按回车或者是空格键停止启动进入到 U-Boot 的命令行模式设置环境变量。
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 U-Boot 启动内核或在命令行下执行 boot 命令时其实就是去执行 bootcmd,bootcmd 的内容其实就是运行 default_bootcmd 执行saveenv保存环境变量到QSPI flash这样下次就不用再设置了。执行boot启动内核。
6.tcl脚本
把命令添加进去一块执行
创建一个.tcl文件将前面提到的命令写入
# tcl script test hsi::open_hw_design /home/zynq/hdf/xx.sdk/xx.hdf
hsi::set_repo_path /home/device_tree_library/device-tree-xlnx-xilinx-v2018.3
hsi::create_sw_design device-tree -os device_tree -proc ps7_cortexa9_0
hsi::generate_target -dir 设备树文件存放路径 执行tcl脚本xsct xx.tcl