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 = ;括号内的内容包括地址,位号和触发方式。
⑤编写完成设备树后需要在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循环点亮。