14.1概述在上一节课中我们学习了platform device driver,是在字符驱动后发展起来的,注册的时候把驱动分成了device和driver两部分开发,通过compatible在总线匹配,达到触发probe函数,进而进行初始化、读写等操作。在本节课中我们将要学习gpio_leds设备树驱动,也是我们之后教程里使用的驱动方式。 14.2 gpio_leds设备树驱动1>首先我们打开debian下的fpga工程,本节课我们使用的axi_gpio_led。 2>可以查看一下地址空间。可以看到偏移地址是0x4121 0000,地址长度是64K。 3>进入SDK我们可以看到系统设备树的信息,但是需要注意的是我们一般自动产生的设备树文件是不能利用的,需要进行修改。 4>以上设备树的产生需要说明下,产生设备树需要注意首先设置路径,这个dtg的路径就是设备树源码。 5>新建设备树工程 6>选择device_tree新建设备树工程,单击Finish 7>单击OK 这样就能完成前面的设备树工程了 8>接下来我们详细查看pl.dts内容,下面是我pl.dts的一些理解。 ①gpio-cells属性是一个GPIO controller必须定义的属性,它描述了需要多少个cell,(1)和(2)是对单个pin的配置进行读取或者设定,(3)和(4)是对pin group的配置进行读取或者设定。 ②reg后面的内容以此是地址及长度。 ③设备树通过查找compatible属性内容查找相关驱动,内核在编译的时候会查看compatible,匹配成功,驱动才能被加载。 ④gpios = <&axi_gpio_led 0 0>;括号内的内容包括地址,位号和触发方式。 ⑤编写完成设备树后需要在system-top.dts中添加pl.dts和zynq-7000.dts,也可以把不经常改动的内容放在里面。
9>接下来进入我们的编译部分,课程是以debian系统为例,所以我们需要在settings64.sh的ZN_PROJECT_NAME选择debian。 10>首先我们执行settings64.sh。 11>根据xilin-wiki网站提示打开相应开关,修改/mnt/workspace/osrc-lab/sources/kernel/arch/arm/configs路径下的xilinx_mz7x_defconfig文件,保存。 12>进入kernel文件夹,执行cfg_kernel.sh脚本。 13>执行编译内核脚本make_kernel.sh。 14>在编译内核的过程中,下面路径下的dts文件就会调用,并且在内核里面重新进行编译。 15>通过create_image.sh脚本产生image文件。 16>如果我们的开机系统本身就是debian9的,我们可以只替换boot内的内容,替换文件的路径如下,如果不是,还需要执行分区和烧录工作。 17>退出SD卡,插入开发板中,window下打开putty软件,上电开机启动开发板。 18>使用ssh软件连接开发板,注意开发板、虚拟机和PC要在同一网段。 19>进入/sys/class/leds目录查看驱动是否存在。 20>使用scp –r命令把driver_app复制到开发板上。 21>使用gcc命令生成.out文件。 22>执行.out文件,查看led循环点亮。 |
扫描关注,了解最新资讯