首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux驱动实践:如何编写【 GPIO 】设备的驱动程序

目录 示例程序目标 编写驱动程序 编写应用程序 卸载驱动模块 在前几篇文章中,我们一块讨论了:在 Linux 系统中,编写字符设备驱动程序的基本框架,主要是从代码流程和 API 函数这两方面触发。...编写驱动程序 以下所有操作的工作目录,都是与上一篇文章相同的,即:~/tmp/linux-4.15/drivers/。...创建驱动目录和驱动程序 $ cd linux-4.15/drivers/ $ mkdir mygpio_driver $ cd mygpio_driver $ touch mygpio.c mygpio.c...> #include #include // GPIO 硬件相关宏定义 #define MYGPIO_HW_ENABLE // 设备名称...从代码中可以看出:驱动程序使用 alloc_chrdev_region 函数,来动态注册设备号,并且利用了 Linux 应用层中的 udev 服务,自动在 /dev 目录下创建了设备节点。

4.8K30

基于IMX6的GPIO驱动程序

Linux内核版本:linux-3.0.35 开发板: IMX6S MY-IMX6-EK200 编译环境:Ubuntu12 主要内容:IMX6S的IO驱动程序编写(ioctl) 实现功能...因此要写好一个ioctl的驱动程序,首先要学会如何正确设置cmd参数。     在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。...要按照Linux内核的约定方法为驱动程序选择ioctl编号,因为如果不按照这个约定进行编写,就有可能因为cmd参数冲突问题不能正确调用ioctl函数。..._IOC(dir,type,nr,size)是封装好的参数设置方法,在它的上一层,又封装了_IOW()和_IOR()进行IO的写和的cmd参数设置方法。代码截图如下: ?     ...arg参数是驱动层和应用层交换的数据,例如当写GPIO,arg=1时,应用层给驱动层传递1,驱动层控制GPIO为高电平;当GPIO时,应用层通过驱动层传递过来的arg参数的值来判别GPIO的高低电平。

1.8K80
您找到你想要的搜索结果了吗?
是的
没有找到

Linux笔记】LED驱动

前言 上一篇我们分享了字符设备驱动框架:嵌入式Linux驱动基础,当时分享的是hello驱动程序。...与硬件无关的LED驱动 回顾hello驱动程序,我们的根据实际需求对其进行写字符串与字符串操作。这里我们当然也要根据实际来思考我们的LED驱动程序。...若是换了另一块板,led所连接的gpio引脚可能不一样了,我们就修改我们的驱动程序led_drv.c里与寄存器相关的操作。有没有更好的办法不用再修改我们的led_drv.c驱动程序了?...若是led_drv.c不用再修改了,那么这个led_drv.c驱动就是一个通用的驱动程序了。具体可查看韦东山老师的《嵌入式Linux应用开发完全手册第2版》第五篇第3~7节进行学习。...谢谢 参考/学习资料: 百问网《嵌入式Linux应用开发完全手册第2版》 正点原子《I.MX6U嵌入式Linux驱动开发指南V1.2》 野火《i.MX Linux开发实战指南》

8.6K32

Linux学习系列六:操作GPIO

1 引言 学习单片机的第一个例子通常都是点亮LED灯,对于Linux应用,我们也从LED入手,我就记得自己刚开始学的时候查了好多资料才勉强能控制一个灯亮,当时就感受到了Linux和单片机裸机有很大的差异...2.2.软件 1)需要在上一篇《Linux学习系列五:Nand Flash根文件系统制作》的基础上改动下Linux内核配置,生成新的970uimage并烧写到板子里。...4 GPIO操作 4.1.使用命令行操作GPIO GPIO驱动程序将NUC970芯片的IO口,从GPIOA~GPIOJ每组IO都保留32个号码,所以GPIOA编号0x000~0x01F,GPIOB编号0x020...2)先使用我们之前的交叉工具链去编译上述代码 arm-none-linux-gnueabi-gcc gpio_demo.c -o gpio_demo 将生成的gpio_demo放到板子里去运行,提示如下错误...3)使用和板子里自带文件系统匹配的交叉工具链来重新编译 arm-linux-gcc gpio_demo.c -o gpio_demo 这时它会报一个错误: ?

3.1K20

Linux系统GIC驱动程序分析

视频观看 百问网驱动大全 第五章GIC驱动程序分析 资料下载 视频观看 1....GIC中断处理流程源码分析 参考资料: linux kernel的中断子系统之(七):GIC代码分析 Linux 4.9.88内核源码 Linux-4.9.88\drivers\irqchip...\irq-gic.c Linux-4.9.88/arch/arm/boot/dts/imx6ull.dtsi Linux 5.4内核源码 Linux-5.4\drivers\irqchip\irq-gic.c...模块下有4个引脚,都可以产生中断,都连接到GIC的33号中断 GPIO也可以看作一个中断控制器,对于它的4个中断 对于GPIO模块中0~3这四个hwirq,一般都会一下子分配四个irq_desc 假设这...寄存器,确定是GPIO里2号引脚发生中断 通过GPIO irq_domain可以知道virq为102 调用irq_desc[102]中的handleA函数,它的作用是调用action链表中用户注册的函数

4.1K21

Linux通用GPIO驱动写法与应用

说明 在Linux中,可以对GPIO进行相关的控制,具体的做法就是利用字符设备驱动程序对相关的gpio进行控制。由于操作系统的限制,在Linux上又无法直接在应用程序的层面上对底层的硬件进行操作。...本文主要通过一个点亮红外灯的实例,再次理解Linux下的应用程序与驱动程序的交互,同时加深驱动程序编写流程的理解。...但是需要完成的工作量较大,既要理解驱动又要熟悉Linux应用编程。下面来介绍这种方式。 3.1 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。..._IOR(IOCTL_MAGIC, 0x02, unsigned long) 3.2 gpio驱动程序的编写 gpio属于字符设备驱动,所以可以通过字符设备驱动程序的框架来完善...通过这次的总结,对Linux的驱动的内核层与应用层要区分清楚,同时也加深对驱动程序编写流程的理解。

8.9K42

Linux设备驱动程序(四)——调试技术

这两个访问日志引擎的接口几乎是等价的,不过请注意,对 /proc/kmsg 进行操作时,日志缓冲区中被读取的数据就不再保留,而 syslog 系统调用却能通过选项返回日志数据并保留这些数据,以便其他进程也能使用...一般而言, /proc 文件要容易些,这也是 klogd 的默认方法。...在 Linux 系统中对 /proc 的使用很频繁。现代 Linux 发行版中的很多工具都是通过 /proc 来获取它们需要的信息,例如 ps、top 和 uptime。...下面是另一个例子,让我们来对 scull 设备进行操作(使用 wc 命令) [...] open("/dev/scull0", O_RDONLY|O_LARGEFILE) = 3 fstat64(3,...Linux 的可装载模块是 ELF 格式的可执行映像,模块会被划分为许多代码段。

46641

【i.MX6ULL】驱动开发4——点亮LED(寄存器版)

本篇,就要来实际操作一下GPIO,实现板子上LED灯的亮灭控制。 在介绍如何通过寄存器来控制LED之前,需要先来了解一下有关Linux地址映射相关的知识。...MMU具有如下功能: 保护内存:MMU给一些指定的内存块设置了、写以及可执行的权限,这些权限存储在页表当中,MMU会检查CPU当前所处的是特权模式还是用户模式,只有和操作系统所设置的权限匹配才可以访问...iowrite16(u16 b, void __iomem *addr); /*写入一个字*/ void iowrite32(u32 b, void __iomem *addr); /*写入一个双字*/ 对于I...\n"); } 驱动程序基本就是这些,完整的程序见我的gitee仓库:https://gitee.com/xxpcb/imx6ull 2.2 LED应用程序 写完了驱动程序(BSP),还要写对应的应用程序...搭建局域网环境(电脑和linux板子连接到同一个路由器下,Linux板子以及烧录了镜像文件,能够正常运行) 通过tftp服务将两个文件发送到linux板子的对应目录中(/lib/modules/4.1.15

73820
领券