Petalinux驱动开发

发布于:2025-08-05 ⋅ 阅读:(22) ⋅ 点赞:(0)

1. Petalinux开发流程

  1. 创建工程
    petalinux-create -t project -n petalinux --template zynq

    -t 代表类型
    -n 工程的名称
    –template 选择工程的模板
    请添加图片描述
    工程创建成功

  2. 更新硬件xsa
    petalinux-config --get-hw-description ../hardware/xx.xsa
    petalinux-config --get-hw-description ../hardware/system_wrapper_dma.xsa

  3. 设置外部的u-boot和内核(可选)
    请添加图片描述

  4. 设置Auto Config Settings
    请添加图片描述

    默认Device tree autoconfig是打开的,这个不要动
    Kernel autoconfig默认关闭,这里打开
    u-boot autoconfig默认关闭,这里打开

  5. 修改设备树
    请添加图片描述

    这两个设备树修改哪个都可以
    请添加图片描述

  6. build
    petalinux-build工程编译
    会生成image/linux下的boot.scr和image.ub

  7. 打包到BOOT.BIN
    petalinux-package --boot --u-boot --fpga --force

  8. 复制文件到SD卡的第一启动镜像
    请添加图片描述

  9. 清理工程
    petalinux-build -x distclean

    这种会保留image/linux内部的东西
    petalinux-build -x mrproper -f
    这种会清理掉image/linux内部的东西

2. Petalinux工程目录说明

请添加图片描述

  1. build就是一些编译过程的文件
  2. image是编译的结果
  3. project-spec是一些配置文件

3. Petalinux创建应用,驱动,开机启动脚本

1. 添加应用

petalinux-create -t apps --template c --name first-app --enable
添加–enable是为了默认在rootfs加载该first-app

  1. 在first-app/file

    1. 添加源文件(.c文件)操作
      请添加图片描述

    添加.c文件比较简单
    1. 修改Makefile 添加a.c
    2. 修改first-app.c 声明a.c中定义的函数
    2. 添加头文件(.h)文件操作
    请添加图片描述

    注意,对于应用的make不需要什么指定编译的路径-C,直接make即可,但是对于下面驱动的make,要用-C指定编译的路径

  2. 在first-app下
    请添加图片描述

    修改.bb文件,.bb文件是bitbake的基础单元
    由于在file中添加了.c .h文件 但是在.bb里面不会自动去添加,需要用户手动去添加
    如果不添加,petalinux-build就会报错
    请添加图片描述

2. 添加驱动

  1. 创建驱动模块
    petalinux-create -t modules --name first-mod --enable
    请添加图片描述

    生成了对应的modules

  2. README会讲驱动树如何添加,这部分会在Linux驱动中会讲
    请添加图片描述

  3. 工程编译
    petalinux-build就会生成对应的.ko文件
    请添加图片描述

    能搜到对应的.ko文件,说明驱动生成成功了

  4. 添加a.c 在first-mod.c进行声明和引用
    请添加图片描述

  5. 修改Makefile
    请添加图片描述

  6. 修改.bb文件
    请添加图片描述

  7. 添加a.h文件
    请添加图片描述

  8. petalinux-build

  9. 但是如果仅仅是为了获取.ko文件就petalinux-build,会花费很长的时间,我们能不能像app那样,直接在file文件夹内直接make的方式生成.ko文件呢?
    请添加图片描述

    报错
    修改file下面的Makefile
    请添加图片描述

    注意位置的获取,上图左侧是原来的Makefile的文件(备份为了.tmp),右侧是修改后的Makefile文件
    这里要借助错误的a.c代码,可以把printf(“%s\n”,AA);修改为printf(“%s\n”,AAA);
    从而在petalinux-build的时候出现错误,然后看错误信息来获取地址和编译器的类型
    请添加图片描述

    把上图中信息填写进Makefile即可即可,注意修改上述的Makefile后,上述过程会导致petalinux-build失败,要想petalinux-build成功,必须要用原来的Makefile文件,也就是把Makefile.tmp重命名为Makefile

    实际上,有了上述修改后的Makefile后就可以不使用petalinux-create -t modules --name first-mod --enable来添加驱动了,我们可以随便建立一个文件夹来生成对应的驱动

  10. 单独编译.ko文件
    随便找个目录创建一个文件夹(这里是driver),使用上述的8获取的内核编译路径和编译器
    请添加图片描述

  11. 配合9制作开机自启动脚本
    petalinux-create -t apps --template install --name <APPS-NAME> --enable
    请添加图片描述

    通过修改.bb文件,来实现开机启动
    请添加图片描述

    需要填写的内容太多,这里把代码贴出来

    1. autostart.bb
    inherit update-rc.d
    
    INITSCRIPT_NAME = "autostart"
    INITSCRIPT_PARAMS = "start 99 5 ."
    
    do_install() {
    	     install -d ${D}${sysconfdir}/init.d
    	     install -m 0755 ${S}/autostart ${D}${sysconfdir}/init.d/autostart
    }
    
    RDEPENDS_${PN}_append += "bash"
    
    1. file/autostart
    #!/bin/sh
    
    echo "Hello PetaLinux World"
    
    USERHOOK_SD0=/media/sd-mmcblk0p1/autostart.sh
    USERHOOK_SD1=/media/sd-mmcblk1p1/autostart.sh
    if [ -f $USERHOOK_SD0 ];then
    	sh $USERHOOK_SD0 &
    fi
    if [ -f $USERHOOK_SD1 ];then
    	sh $USERHOOK_SD1 &
    fi
    
    

之后,运行petalinux-build,把boot.scr BOOT.BIN image.ub 写入SD的FAT分区
在串口助手上,能够打印出由petalinux生成的autostart脚本的内容
请添加图片描述

此外,为了因为在autostart脚本中预留了
USERHOOK_SD0=/media/sd-mmcblk0p1/autostart.sh
USERHOOK_SD1=/media/sd-mmcblk1p1/autostart.sh
这两个新的自动化运行脚本,在板卡(7020)上通过串口助手可以创建脚本,用户可以自定义运行在的板卡上的脚本
touch /media/sd-mmcblk0p1/autostart.sh
vi /media/sd-mmcblk0p1/autostart.sh

#!/bin/sh
echo "Hello ZYNQ7020!!!"

查询应用的位置

find / -name first-app
/usr/bin/first-app

查询驱动的位置

find / -name first-mod.ko
/lib/modules/5.4.0-xilinx/extra/first-mod.ko

添加到/media/sd-mmcblk0p1/autostart.sh

echo "Hello DXY"
 
/usr/bin/first-app
insmod /lib/modules/5.4.0-xilinx/extra/first-mod.ko

请添加图片描述

可以看出,分别运行了来自autostart产生的
Hello DXY
来自应用程序打印的

insmod /lib/modules/5.4.0-xilinx/extra/first-mod.ko


[外链图片转存中...(img-yk3lpsCJ-1754305473158)]
可以看出,分别运行了来自autostart产生的
`Hello DXY`
来自应用程序打印的
`AAAAAAA`

网站公告

今日签到

点亮在社区的每一天
去签到