linux内核gpio设备树,LINUX篇 基于debian9系统 CH14_gpio_leds设备树驱动

14.1概述

在上一节课中我们学习了platform device driver,是在字符驱动后发展起来的,注册的时候把驱动分成了device和driver两部分开发,通过compatible在总线匹配,达到触发probe函数,进而进行初始化、读写等操作。在本节课中我们将要学习gpio_leds设备树驱动,也是我们之后教程里使用的驱动方式。

14.2 gpio_leds设备树驱动

1>首先我们打开debian下的fpga工程,本节课我们使用的axi_gpio_led。

f78c5126a440c7e6b13db27ea7fe6260.png

2>可以查看一下地址空间。可以看到偏移地址是0x4121 0000,地址长度是64K。

7ce3a1230df6b1988a41693c248d6add.png

3>进入SDK我们可以看到系统设备树的信息,但是需要注意的是我们一般自动产生的设备树文件是不能利用的,需要进行修改。

83bf85b6e050177db197776e011aeb61.png

4>以上设备树的产生需要说明下,产生设备树需要注意首先设置路径,这个dtg的路径就是设备树源码。

f671c20373e7d524a99f37638c7ce2c8.png

5>新建设备树工程

55969604647442ea161e23f4b31aa10b.png

6>选择device_tree新建设备树工程,单击Finish

ce6383d9bfd53872794af7a4ac1929ac.png

7>单击OK

eb9b1513b0fde03406689ef8e935de52.png

这样就能完成前面的设备树工程了

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,也可以把不经常改动的内容放在里面。

e3aab62281ac682fc5102d84a0514501.png

ac79612b5dfae46aff0a37c7175036ac.png

9>接下来进入我们的编译部分,课程是以debian系统为例,所以我们需要在settings64.sh的ZN_PROJECT_NAME选择debian。

3e1ea49165e81a74024ace4596808e3a.png

10>首先我们执行settings64.sh。

e9f2c7dd7a7b2e0d997cb72698433472.png

11>根据xilin-wiki网站提示打开相应开关,修改/mnt/workspace/osrc-lab/sources/kernel/arch/arm/configs路径下的xilinx_mz7x_defconfig文件,保存。

e2b49bf75bba987d4bf55e39ec5055d6.png

12>进入kernel文件夹,执行cfg_kernel.sh脚本。

2eea470a8e23557737d88e0dea448cb9.png

13>执行编译内核脚本make_kernel.sh。

af858cea22d56cb72eb240048fb56594.png

14>在编译内核的过程中,下面路径下的dts文件就会调用,并且在内核里面重新进行编译。

0decb2a729f666365a746d95a8be70d8.png

15>通过create_image.sh脚本产生image文件。

c062cbac237e7c54ce0d9ede02ff1094.png

16>如果我们的开机系统本身就是debian9的,我们可以只替换boot内的内容,替换文件的路径如下,如果不是,还需要执行分区和烧录工作。

0d9b8ce307d0812116c5ade3eb0449f8.png

17>退出SD卡,插入开发板中,window下打开putty软件,上电开机启动开发板。

aef2aa5d85e2fe1c7c92a30bc7365572.png

18>使用ssh软件连接开发板,注意开发板、虚拟机和PC要在同一网段。

ec90e54ee6c72868293cf97d5c1430e9.png

19>进入/sys/class/leds目录查看驱动是否存在。

3dbb2606ce0e6e88aaa13ee6a4c7344a.png

20>使用scp –r命令把driver_app复制到开发板上。

8d39e44d15c197177fdf4b9247f81ae7.png

21>使用gcc命令生成.out文件。

8589ba69553c21a46ada34d186f14535.png

22>执行.out文件,查看led循环点亮。

1d420a0fac0982c106f277b40678a103.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值