使用Petalinux定制自己的linux系统(linux三大件)
简介
zynq是xilinx推出的一款集成arm核以及fpga可编程逻辑器件的soc芯片,使得它不仅拥有 ASIC 在能耗、性能和兼容性方面的优势,而且具有FPGA 硬件可编程性的优点。zynq主要分为两端,首先是pl端,属于像fgpa开发一样的纯逻辑开发。然后是ps端,我把它类比成是单片机的裸机开发,通过操作库函数配置寄存器等,它的优势是可以将pl端当成是外设,pl端写好的东西可以被ps端直接调用。然后ps端是属于arm-A核,是可以跑系统的(linux等)。
在zynq的linux开发端,官方提供了一个名为petalinux的工具,该工具运行在pc的linux环境下(如ubuntu),使用这个工具可以为我们的开发板量身定制Uboot、kernel、rootfs。该解决方案旨在提高设计生产力,可与 Xilinx 硬件设计工具一起使用,以简化针对 Zynq-7000 SoC 的 Linux 系统的开发。
Petalinux设计流程
首先,在这里我粘贴出所有要使用的petalinux使用语句,以方便后面要修改系统时直接复制使用即可
petalinux-create -t (工程名字) //创建一个petalinux工程
petalinux-config --get-hw-description (.hdf文件所在目录的路径)//导入.hdf硬件配置文件
petalinux-config //打开petalinux工程的图形化配置页面
petalinux-config -c kernel //定制linux内核
petalinux-config -c rootfs //定制根文件系统
petalinux-build //编译整个petalinux工程
petalinux-package --boot --fsbl --fpga --u-boot --force //将--后面的文件全部打包生成BOOT.BIN 文件
1.设置petalinux运行的环境变量
source /opt/pkg/petalinux/2018.3/settings.sh
我们安装完petalinux之后,会在安装目录中生成一个settings.sh文件,我们要在使用的终端中执行这个脚本文件,对petalinux 工作环境进行初始化,以便我们使用petalinux命令的时候,系统可以自动进入安装目录中引用petalinux。
2.创建 petalinux 工程
我们在终端进入到一个你喜欢的文件夹中,在这个文件夹中运行以下命令,创建一个petalinux工程。
petalinux-create -t project --template zynq -n (工程名字)
template 参数表明创建的 petalinux 工程使用的平台模板,此处的 zynq 表明使用的是zynq 平台模板的 petalinux 工程,用于 zynq-7000 系列的芯片。
打开创建的工程有以下目录
3.配置 petalinux 工程
首次配置工程,需要引用vivado工程中生成的以.hdf结尾的硬件描述文件,因为linux可用的很多外设都不存在硬核,需要在pl端工程中配置出软核来代替硬核使用。这里根据你开发板的资源产生hdf文件导入即可。
进入到你的petalinux目录下执行以下命令:
petalinux-config --get-hw-description (hdf文件所在目录路径)
之后就会进入到一个图形化配置界面,我们通过键盘进行操作,基本操作就是上下左右移动光标,回车选择,ESC键按两下表示返回,这里建议大家多去摸索图形化配置界面,每个菜单进去看看有什么用,这是学习linux必不可少的过程。
首先我对菜单进行简单的介绍
“ Auto Config Settings”菜单主要就是选择是否使能 fsbl、 Device tree、 Kernel 和u-boot 的自动配置,默认为自动配置,无需更改。
这里大家可能会和我的不同,大家不用修改,因为后面我们会定制内核和uboot。我在这里只是向大家介绍这个地方是可以自己指定uboot和kernel,如果大家有自己内核和uboot可以在这里设置。
进入到这个目录,可以发现各个子菜单里面都已经有了默认配置,这些默认配置是根据 hdf 文件的信息自动配置的,基本上无需我们手动修改; 在serial setting 中可以设置串口用于打印后面的开机信息。
这里是设置启动引导镜像和内核镜像的存储媒介,默认为 sd 卡,这里保持默认即可。
第一个选项便是根文件系统的类型的配置,默认为 INITRAMFS,意思是从后面我们制作的.ub文件中读取根文件系统,这里也可以设置为sd卡,那么启动的时候就会从sd卡中挂载根文件系统。
Copy final images to tftpboot选项指当在 Ubuntu 的根文件下创建一个名为 tftpboot 的文件夹时,工程生成镜像后会自动将相关文件复制到/tftpboot 目录中。
回到主界面,“ Firmware Version Configuration”可以用来修改定制的 linux 系统的主机名和产品名,默认与该 Petalinux 工程同名。
这时候就配置得差不多了,记得移动光标到Save中回车保存配置再连按esc退出。
配置成功。
4.配置linux内核
到了这一步,就开始设计linux三大件之一——kernel了。
执行如下命令
petalinux-config -c kernel
等待一段时间后,就会打开kernel的menuconfig界面,大家可以随心所欲地在这里配置自己的linux内核,新手的话可以不做修改已经有默认配置,直接连按esc退出
5.配置linux根文件系统
执行如下指令进入到根文件系统的配置界面
petalinux-config -c rootfs
大家可以在这里探索配置,新手也可以不配置,则创建出来的根文件系统会比较小,但是麻雀虽小五脏俱全。
6.配置设备树
大家进入到petalinux工程中的目录project-spec/meta-user/recipes-bsp/device-tree/files 会发现有一个dtsi后缀的文件。这就是petalinux指定的设备树文件了。大家有什么设备树节点都可以添加到这里面去,它会被petalinux自动编译到设备树文件中去。新手可以不做配置,因为不配置设备树也可以启动内核,只是不能使用硬件设备而已。
7.编译工程
这时候就把工程该配置的信息配置好了,就需要编译生成我们启动linux系统需要的文件了。
petalinux-build
这个过程会比较久,petalinux虽然智能,但是因为编译太多的东西导致耗时比较长。
编译成功!警告不需要管,是因为版本问题产生的。
8.制作zynq的启动文件BOOT.BIN
BOOT.BIN 文件是 fsbl 镜像、 u-boot 镜像以及 pl 端 bit 文件集合在一起的。对于启动文件的介绍可以参考zynq启动分析。我们需要利用前面制作的文件来生成BOOT.BIN
petalinux-package --boot --fsbl --fpga --u-boot --force
“ --fsbl” 用于指定 fsbl 镜像文件所在位置,后面接文件对应的路径信息,如果不指定文件位置,默认对应的是 images/linux/zynq_fsbl.elf;选项“ --fpga” 用于指定
bitstream 文件所在位置,后面接该文件对应的路径信息,默认对应的是images/linux/system.bit;选项“ --u-boot”用于指定 U-Boot 镜像所在位置,后面接该文件所在路径信息,默认为 images/linux/u-boot.elf。这里均没有指定对应的文件的路径信息,那么 Petalinux 会自动使用默认文件。
9.成功启动linux!
进入工程目录images/linux下,将image.ub和BOOT.BIN拷贝到sd卡的fat32格式分区中。不会查看sd卡格式或者制作分区的可以参考sd卡分区操作
image.ub 这个文件的本质包括内核镜像、 dtb 以及根文件系统。
最后,将sd卡插入开发板设置启动模式为sd卡模式,开机后打印出启动日志代表开机成功啦!
zynq的默认开机名字和密码都是root。