努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处
http://blog.csdn.net/woshixingaaa/archive/2011/05/16/6423462.aspx
下图是LCD的引脚截图,GPG4是复用引脚,可以发送电源使能信号。GPIO的程序很简单,这里不再赘述。
驱动程序:
#include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <mach/regs-gpio.h> #include <asm/io.h> #include <mach/hardware.h> #include <linux/device.h> #include <linux/cdev.h> #include <linux/delay.h> int MYGPIO_MAJOR = 0; int MYGPIO_MINOR = 0; #define MYGPIO_NAME "lwp-gpio" dev_t dev_num; struct cdev *gpio_cdev; struct class *gpio_class; int i; static unsigned long led_table[]={ S3C2410_GPF3, S3C2410_GPF4, S3C2410_GPF5, S3C2410_GPF6, }; static unsigned long led_cfg_table[]={ S3C2410_GPF3_OUTP, S3C2410_GPF4_OUTP, S3C2410_GPF5_OUTP, S3C2410_GPF6_OUTP, }; int gpio_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg){ switch(cmd){ case -1: s3c2410_gpio_cfgpin(S3C2410_GPG4, S3C2410_GPG4_OUTP); //关闭LCD背光 s3c2410_gpio_setpin(S3C2410_GPG4, 0); break; case 1: //打开背光 s3c2410_gpio_setpin(S3C2410_GPG4, 1); break; case 2: //开启流水灯 while(1){ for(i = 0; i < 4; i++) s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]); for(i = 0; i < 4; i++){ s3c2410_gpio_setpin(led_table[i],0); msleep(1000); s3c2410_gpio_setpin(led_table[i],1); } } break; case -2: //关闭流水灯 for(i = 0; i < 4; i++){ s3c2410_gpio_setpin(led_table[i],1); } break; case 3: //开启蜂鸣器 s3c2410_gpio_cfgpin(S3C2410_GPB0, S3C2410_GPB0_OUTP); s3c2410_gpio_setpin(S3C2410_GPB0, 1); break; case -3: //关闭蜂鸣器 s3c2410_gpio_setpin(S3C2410_GPB0, 0); break; default: break; } return 0; } int gpio_open(struct inode *inode, struct file *file){ printk("gpio is opened success/n"); return 0; } int gpio_close(struct inode *inode, struct file *file){ printk("gpio is closed success/n"); return 0; } struct file_operations gpio_ops = { .owner = THIS_MODULE, .ioctl = gpio_ioctl, .open = gpio_open, .release = gpio_close, }; static int __init my_gpio_init(void){ int ret; ret = alloc_chrdev_region(&dev_num, MYGPIO_MINOR, 1, MYGPIO_NAME); //分配设备号 if(ret < 0) printk("can't get major number/n"); gpio_cdev = kmalloc(sizeof(struct cdev),GFP_KERNEL); //分配字父设备 if(!gpio_cdev){ return -ENOMEM; goto fail_malloc; } memset(gpio_cdev,0,sizeof(struct cdev)); cdev_init(gpio_cdev, &gpio_ops); //初始化字父设备 cdev_add(gpio_cdev, dev_num, 1); //字符设备注册到系统 gpio_class = class_create(THIS_MODULE,MYGPIO_NAME); //在/sys下建立一个类 if(IS_ERR(gpio_class)){ printk("ERROR: Fail to create gpio_class class/n"); return -1; } device_create(gpio_class,NULL,dev_num,NULL,MYGPIO_NAME); //创建设备节点 printk("gpio_cdev is registered success/n"); fail_malloc: unregister_chrdev_region(dev_num, 1); return 0; } static void __exit my_gpio_exit(void){ unregister_chrdev_region(dev_num, 1); cdev_del(gpio_cdev); kfree(gpio_cdev); device_destroy(gpio_class,dev_num); class_destroy(gpio_class); printk("gpio_cdev is dereigstered success/n"); } module_init(my_gpio_init); module_exit(my_gpio_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("liwanpeng");
测试程序:
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <sys/ioctl.h> int main(){ int fd, cmd; cmd = 0; fd = open("/dev/lwp-gpio",O_RDWR); if(fd < 0){ printf("cannot open /dev/lwp-gpio/n"); exit(1); } while(1){ scanf("%d", &cmd); printf("cmd is %d/n",cmd); ioctl(fd, cmd); } close(fd); return 0; }
您还没有登录,请您登录后再发表评论
Linux驱动修炼之道-LCD背光与gpio控制.pdf Linux驱动修炼之道-INPUT子系统(下).pdf Linux驱动修炼之道-INPUT子系统(上).pdf Linux驱动修炼之道-framebuffer(中).pdf Linux驱动修炼之道-framebuffer...
《Linux驱动修炼之道》是李万鹏先生撰写的一本深入探讨Linux驱动程序开发的专业书籍,旨在帮助读者理解和掌握Linux系统下的驱动程序设计与实现。这本书的内容涵盖了从基础概念到高级技术,适合对嵌入式系统、Linux...
light.rar_2.6 linux 驱动_2440 linux_backlight gpio_gpio 背光_背光"所涉及的Linux 2.6内核版本下的LCD背光驱动,特别是基于Samsung S3C2440处理器的GPIO(General Purpose Input/Output)口控制背光的实现。...
结合本作者博客 Linux简单设备驱动(1):使用IO内存操作GPIO–LED 的源代码
linux下通过GPIO驱动点阵LCD,通过GPIO模拟的LCD数据总线
《RPi-Camera-Driver-for-GPIO-LCD:在Raspberry Pi上实现GPIO LCD驱动的摄像头功能》 在 Raspberry Pi 的世界中,扩展其功能并不仅仅是连接外部硬件那么简单,更有趣的是通过编程来控制这些硬件,使其发挥出更多...
在Linux系统中,GPIO(General Purpose Input/Output)是一种广泛使用的接口,允许操作系统与硬件进行直接的低级交互。在本教程中,我们将探讨如何在Linux环境下,利用GPIO架构驱动来操作sysfs下的GPIO,实现对硬件...
《Linux驱动修炼之道》这本书是Linux驱动开发领域的经典之作,旨在帮助读者深入理解Linux内核驱动程序的原理和实现,从而提升在Linux系统中的驱动开发技能。以下将围绕标题、描述以及标签,详细阐述Linux驱动的相关...
通过使用嵌入式的FSMC(Flexible Static Memory Controller,灵活静态存储控制器)和片上DMA(Direct Memory Access,直接内存访问)控制器来实现对TFT-LCD的有效驱动。 #### STM32 QVGA TFT-LCD直接驱动原理 FSMC...
以上知识点涵盖了在Linux驱动层对Zynq-7000的GPIO进行输入输出控制的基本流程。在实际应用中,开发者需要结合具体的硬件设计和软件需求,编写相应的驱动代码,以实现对GPIO的灵活控制。在提供的链接博客中,作者详细...
标题中的"GPIO_key_driver.rar_GPIO_key_driver_gpio-k_linux GPIO_k_linux_gp"暗示了这是一个关于GPIO按键驱动的项目,主要用于Linux操作系统,特别是针对ARM9架构的处理器,如s3c2410。GPIO(General Purpose ...
在"Linux-gpio.zip"这个压缩包中,我们主要会关注与Linux GPIO相关的源代码,这通常包括驱动程序、用户空间API以及可能的示例应用。压缩包内的"Makefile"文件则用于编译和构建这些源代码,确保它们能在目标硬件平台...
2. **GPIO-1**: GPIO(General Purpose Input/Output)是指通用输入/输出接口,通常用于路由器上的硬件扩展和自定义功能,例如通过编程控制LED灯或者外接传感器等。 3. **PSG1208-64M**: PSG1208可能是路由器内部...
compatible = "linux,gpio-leds"; status = "okay"; led0: gpio-led@0 { gpios = <&pl 56 GPIO_ACTIVE_LOW>; label = "LED0"; }; }; }; ``` 这段配置表示MIO引脚56被用作LED0,并且当GPIO状态为低时LED亮起...
标题中的"Gpio--keyboard-driver-under-INPUT-.rar_GPIO linux _gpio_keys"暗示了我们要讨论的是在Linux内核中,如何使用GPIO(General Purpose Input/Output)来驱动键盘设备,特别是通过`gpio_keys`驱动模块。...
在S3C2440的LCD背光驱动中,ioremap用于获取和映射控制背光亮度的GPIO引脚或特定的硬件寄存器,使得驱动程序可以通过虚拟地址对这些硬件资源进行读写操作。 2. **字符驱动**:Linux字符驱动是一种简单且基础的驱动...
i2c.rar_GPIO_i2c_gpio i2c_i2c-gpio_linux GPIO I2C_linux i2c"提到了几个关键元素,包括“gpio_i2c”(GPIO-I2C驱动)、“i2c-gpio”(GPIO模拟I2C)以及“linux_gpio_i2c”和“linux_i2c_gpio”,这些都是与Linux...
在ZYNQ-Linux环境下,GPIO(General Purpose Input/Output)和VDMA(Video Direct Memory Access)是两个关键的硬件接口,广泛应用于嵌入式系统中的设备控制与数据传输。本实例将深入探讨如何在ZYNQ SoC(System on ...
首先,开发者需要了解在Linux或Android系统下,GPIO的控制通常通过GPIO子系统驱动实现,该驱动支持通过文件系统进行操作。这意味着开发者可以通过读写文件的方式来配置GPIO端口的电平输出或读取输入状态。 在QIHUA-...
相关推荐
Linux驱动修炼之道-LCD背光与gpio控制.pdf Linux驱动修炼之道-INPUT子系统(下).pdf Linux驱动修炼之道-INPUT子系统(上).pdf Linux驱动修炼之道-framebuffer(中).pdf Linux驱动修炼之道-framebuffer...
《Linux驱动修炼之道》是李万鹏先生撰写的一本深入探讨Linux驱动程序开发的专业书籍,旨在帮助读者理解和掌握Linux系统下的驱动程序设计与实现。这本书的内容涵盖了从基础概念到高级技术,适合对嵌入式系统、Linux...
light.rar_2.6 linux 驱动_2440 linux_backlight gpio_gpio 背光_背光"所涉及的Linux 2.6内核版本下的LCD背光驱动,特别是基于Samsung S3C2440处理器的GPIO(General Purpose Input/Output)口控制背光的实现。...
结合本作者博客 Linux简单设备驱动(1):使用IO内存操作GPIO–LED 的源代码
linux下通过GPIO驱动点阵LCD,通过GPIO模拟的LCD数据总线
《RPi-Camera-Driver-for-GPIO-LCD:在Raspberry Pi上实现GPIO LCD驱动的摄像头功能》 在 Raspberry Pi 的世界中,扩展其功能并不仅仅是连接外部硬件那么简单,更有趣的是通过编程来控制这些硬件,使其发挥出更多...
在Linux系统中,GPIO(General Purpose Input/Output)是一种广泛使用的接口,允许操作系统与硬件进行直接的低级交互。在本教程中,我们将探讨如何在Linux环境下,利用GPIO架构驱动来操作sysfs下的GPIO,实现对硬件...
《Linux驱动修炼之道》这本书是Linux驱动开发领域的经典之作,旨在帮助读者深入理解Linux内核驱动程序的原理和实现,从而提升在Linux系统中的驱动开发技能。以下将围绕标题、描述以及标签,详细阐述Linux驱动的相关...
通过使用嵌入式的FSMC(Flexible Static Memory Controller,灵活静态存储控制器)和片上DMA(Direct Memory Access,直接内存访问)控制器来实现对TFT-LCD的有效驱动。 #### STM32 QVGA TFT-LCD直接驱动原理 FSMC...
以上知识点涵盖了在Linux驱动层对Zynq-7000的GPIO进行输入输出控制的基本流程。在实际应用中,开发者需要结合具体的硬件设计和软件需求,编写相应的驱动代码,以实现对GPIO的灵活控制。在提供的链接博客中,作者详细...
标题中的"GPIO_key_driver.rar_GPIO_key_driver_gpio-k_linux GPIO_k_linux_gp"暗示了这是一个关于GPIO按键驱动的项目,主要用于Linux操作系统,特别是针对ARM9架构的处理器,如s3c2410。GPIO(General Purpose ...
在"Linux-gpio.zip"这个压缩包中,我们主要会关注与Linux GPIO相关的源代码,这通常包括驱动程序、用户空间API以及可能的示例应用。压缩包内的"Makefile"文件则用于编译和构建这些源代码,确保它们能在目标硬件平台...
2. **GPIO-1**: GPIO(General Purpose Input/Output)是指通用输入/输出接口,通常用于路由器上的硬件扩展和自定义功能,例如通过编程控制LED灯或者外接传感器等。 3. **PSG1208-64M**: PSG1208可能是路由器内部...
compatible = "linux,gpio-leds"; status = "okay"; led0: gpio-led@0 { gpios = <&pl 56 GPIO_ACTIVE_LOW>; label = "LED0"; }; }; }; ``` 这段配置表示MIO引脚56被用作LED0,并且当GPIO状态为低时LED亮起...
标题中的"Gpio--keyboard-driver-under-INPUT-.rar_GPIO linux _gpio_keys"暗示了我们要讨论的是在Linux内核中,如何使用GPIO(General Purpose Input/Output)来驱动键盘设备,特别是通过`gpio_keys`驱动模块。...
在S3C2440的LCD背光驱动中,ioremap用于获取和映射控制背光亮度的GPIO引脚或特定的硬件寄存器,使得驱动程序可以通过虚拟地址对这些硬件资源进行读写操作。 2. **字符驱动**:Linux字符驱动是一种简单且基础的驱动...
i2c.rar_GPIO_i2c_gpio i2c_i2c-gpio_linux GPIO I2C_linux i2c"提到了几个关键元素,包括“gpio_i2c”(GPIO-I2C驱动)、“i2c-gpio”(GPIO模拟I2C)以及“linux_gpio_i2c”和“linux_i2c_gpio”,这些都是与Linux...
在ZYNQ-Linux环境下,GPIO(General Purpose Input/Output)和VDMA(Video Direct Memory Access)是两个关键的硬件接口,广泛应用于嵌入式系统中的设备控制与数据传输。本实例将深入探讨如何在ZYNQ SoC(System on ...
首先,开发者需要了解在Linux或Android系统下,GPIO的控制通常通过GPIO子系统驱动实现,该驱动支持通过文件系统进行操作。这意味着开发者可以通过读写文件的方式来配置GPIO端口的电平输出或读取输入状态。 在QIHUA-...