1 开发模式
- 编写 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 文件
复制代码
- 进入“Subsystem AUTO Hardware Settings”子菜单下的“Advanced bootable imagesstorage Settings”菜单中,移动到“dtb image settings”选项,并将 image storage media 设置为 primary sd
- 进入到“Image Packaging Configuration”菜单下的“Root filesystem type (INITRAMFS)”子菜单下
- 配置完成后,编译 uboot,及生成 BOOT.BIN 文件
petalinux-build -c u-boot
petalinux-package --boot --fsbl --u-boot --force
复制代码
3 image.ub剥离出ZImage/设备树/根文件
- 生成设备树文件,在 Petalinux 工 程 中 执 行 编 译 uboot 后 , 会 在 工 程 的components/plnx_workspace/device-tree/device-tree/目录下生成设备树文件,红框圈出的是我们需要用到的设备树文件,skeleton.dtsi 文件我们一般不用。
内核源码
,用新xilinx 官方 2018.3 版本( 这个版本是 x xilinx 设定的版本,其 x linux 版本为 4.14.0)的内核源码
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
复制代码
- 编译完成之后会在 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
3.4 编译 rootfs
petalinux-config -c rootfs
复制代码
- 进入“Image Features --->”菜单下,使能“debug-tweaks”,如下图所示
- 等待其编译完成,完成之后产生的根文件系统压缩包在 images/linux 目录下
4 制作SD启动卡
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 分区
4.2 将根文件系统解压到EXT4
sudo tar -xzf rootfs.tar.gz -C /media/linux/rootfs
复制代码
5启动开发板
- 在U-Boot 启动 2 秒倒计时之前,按回车或者是空格键停止启动,进入到 U-Boot 的命令行
模式,因为现在不能直接启动,我们需要对 U-Boot 环境变量进行修改,在 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'
复制代码
- 保存完成后执行 boot 命令启动内核或者执行 reset 重启开发板: