修改的源码: #include <linux/kernel.h #include <linux/module.h #include <linux/miscdevice.h #include <linux.../fs.h #include <linux/types.h #include <linux/moduleparam.h #include <linux/slab.h #include <linux.../ioctl.h #include <linux/cdev.h #include <linux/delay.h #include <linux/gpio.h #include <mach/gpio.h...#include <plat/gpio-cfg.h //添加必要的头文件 #include <linux/proc_fs.h #include <linux/uaccess.h #define...(led_gpios[i], S3C_GPIO_OUTPUT); gpio_set_value(led_gpios[i], 1); } //杂类设备 ret = misc_register(&tiny4412
/*中断相关头文件*/ #include /*硬件相关->定义了寄存器名字与地址*/... /* 平台设备驱动相关头文件*/ #include static int tiny4412_rtc_gettime... /*中断相关头文件*/ #include /*硬件相关->定义了寄存器名字与地址*/... /* 平台设备驱动相关头文件*/ #include #include #include... #include #include /*-------------------------------
demon,友善之臂在基础上完成了移植适配,也就是现在拿到的Tiny4412开发板内核,Linux 版本是3.5,不支持设备树。.../fs.h> #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mp3_data.h" #include <linux/miscdevice.h
.h" #include #include #include #include #include #include #include #include <linux/...*/ gpio_free(Tiny4412_GPIO_SPI_SCK); gpio_free(Tiny4412_GPIO_SPI_CS); gpio_free(Tiny4412_GPIO_SPI_MISO..."%d\n",gpio_request(Tiny4412_GPIO_SPI_CS, "Tiny4412_Tiny4412_SPI_CS")); printk("%d\n",gpio_request(Tiny4412...释放GPIO口使用权*/ gpio_free(Tiny4412_GPIO_SPI_SCK); gpio_free(Tiny4412_GPIO_SPI_CS); gpio_free(Tiny4412
#include "enc28j60.h" #include #include #include #include #include #include #include...*/ gpio_free(Tiny4412_GPIO_SPI_SCK); gpio_free(Tiny4412_GPIO_SPI_CS); gpio_free...释放GPIO口使用权*/ gpio_free(Tiny4412_GPIO_SPI_SCK); gpio_free(Tiny4412_GPIO_SPI_CS);...gpio_free(Tiny4412_GPIO_SPI_MISO); gpio_free(Tiny4412_GPIO_SPI_MOSI); /*2.
下面是测量的结果: 2.1 驱动代码 #include #include #include #include... #include #include #include static...tiny4412_linux_csb_init(void) { /*请求GPIO口使用权*/ gpio_request(TRIG,"CSB"); /*配置GPIO引脚*/ s3c_gpio_cfgpin...注册中断*/ request_irq(irq,csb_irq_handler_func,IRQF_TRIGGER_RISING,"tiny4412_csb",NULL); timer.expires..._linux_csb_init); /*驱动入口--安装驱动的时候执行*/ module_exit(tiny4412_linux_csb_cleanup); /*驱动出口--卸载驱动的时候执行*/
硬件环境 当前开发板采用友善之臂的Tiny4412,CPU是三星的EXYNOS4412,最高主频为1.5GHZ,Linux内核版本是3.5。...#include #include #include #include #include #include #include #include <linux/workqueue.h...获取中断号*/ irq=gpio_to_irq(NEC_INFRARED_GPIO); /*2...._hello_module_cleanup(void) { free_irq(irq,NULL); printk("驱动测试: 驱动卸载成功\n"); } module_init(tiny4412
> #include #include #include #include #include #include #include #include #include..., .release=tiny4412_release, .llseek=tiny4412_llseek }; /* Linux内核管理驱动---设备号 设备号是一个unsigned int 的变量...linux/platform_device.h> #include #include #include #include... static struct i2c_client *i2c_dev=NULL; static struct i2c_adapter *adap=NULL; static
然后再查阅数据手册,找到这个GPIO口的寄存器地址,寄存器的配置页面,方便初始化配置GPIO口为输入模式。...2.1 按键驱动源代码 #include #include #include #include <linux..._open, .read=tiny4412_read, .write=tiny4412_write, .release=tiny4412_release }; /* Linux内核管理驱动---.../*转换物理地址*/ GPX3CON=ioremap(0x11000C60,4); GPX3DAT=ioremap(0x11000C64,4); /*配置GPIO口模式--配置按键*/ *GPX3CON...KER_DRI=/home/wbyq/work/linux-3.5/linux-3.5 all: make -C $(KER_DRI) M=`pwd` modules cp *.ko /home/wbyq
#include #include #include #include #include #include #include #include #include... #include #include static int tiny4412_open(struct...> #include #include #include #include #include... #include #include #include #include
前言 Tiny4412开发是友善之臂推出的Android、Linux学习开发板,CPU采用三星的EXYNOS4412,32位芯片,属于Cortex-A系列,主频是1.5GHZ,可以运行ubuntu、Android5.0...配置GPIO口 3. 控制GPIO口输出电平控制LED 4....(2)查看芯片手册,了解GPIO口如何配置 配置方法也很好理解,在手册里做了详细介绍。LED属于输出控制器件,需要将GPIO口配置成输出模式。...GPIO的模式配置由CON寄存器完成,输出控制由DAT寄存器完成。..._UBOOT=$2 #将要烧录文件赋值给变量E4412_UBOOT MKBL2=.
3.1 设备端代码 #include #include #include #include... #include #include #include static struct...("GPL"); /*设置模块的许可证--GPL*/ 3.2 驱动端代码 #include #include #include #include #include #include #include <linux..., .release=tiny4412_release, .llseek=tiny4412_llseek }; /* Linux内核管理驱动---设备号 设备号是一个unsigned int 的变量
> 8#include 9#include 10#include 11#include 12#include 13#include 14#include 15#include...work); 63 tasklet_init(&task_t,task_fuc,data_t); 64 printk("irq_key init\n"); 65 irq_num1 = gpio_to_irq...(EXYNOS4_GPX3(2)); 66 err = request_irq(irq_num1,irq_fuction,IRQF_TRIGGER_FALLING,"tiny4412_key1",..._Key_irq_test_exit(void) 75{ 76 int irq_num1 ; 77 printk("irq_key exit\n"); 78 irq_num1 = gpio_to_irq
Linux内核提供了中断的注册接口: (1)注册中断 头文件 include\linux\interrupt.h 定义文件 include\linux\interrupt.h 函数原型 int...#include #include #include #include #include #include #include /*存放按键的信息*/ struct m_key_info...获取中断号*/ key_info[i].irq=gpio_to_irq(key_info[i].gpio); /*2....\n"); } /*驱动入口*/ module_init(tiny4412_interrupt_drv_init); /*驱动出口*/ module_exit(tiny4412_interrupt_drv_exit
License version 2 as 10 * published by the Free Software Foundation. 11 * 12 */ 13 14 #include 15 #include 16 #include 17 #include 18 #include 19 #include 20 #include 21 #include... 22 #include 23 #include 24 #include <linux/input...Linux中输入设备的事件类型有(这里只列出了常用的一些,更多请看linux/input.h中): EV_SYN 0x00 同步事件 EV_KEY 0x01 按键事件 EV_REL 0x02 相对坐标
中断问题排查步骤 6.1.4.1 GPIO 中断一直响应 6.1.4.2 GPIO 检测不到中断 Linux GPIO 开发指南 1 概述 1.1 编写目的 本文档对内核的 GPIO 接口使用进行详细的阐述...警告 该接口的 flags 参数,在 sunxi linux-4.9 及以前的平台上,必须定义为 struct gpio_config 类型变量。...linux-5.4 已经标准化该接口,直接采用 enum of_gpio_flags 的定义。...-5.4,则应该为gpios = ; linux,input-type = "1>"; linux...index, enum of_gpio_flags *flags) 拿到gpio的配置信息后(保存在flags参数中,见4.2.8.小节),在根据需要调用相应的标准接口实现自己的功能 对于linux-
以下这段代码截取友善之臂提供的linux内核中的tiny4412_led.c 1static struct file_operations tiny4412_led_dev_fops = { 2...buttons[i].gpio) 9 continue; 10 11 setup_timer(&buttons[i].timer, tiny4412_buttons_timer..., 12 (unsigned long)&buttons[i]); 13 14 irq = gpio_to_irq(buttons[i].gpio); 15...buttons[i].gpio) 25 continue; 26 27 irq = gpio_to_irq(buttons[i].gpio); 28...内核中的应用,为学习Linux内核,分析linux内核源代码打下了基础。
Tiny4412自带内核里的SPI设备端结构: SPI0的具体GPIO口位置: 3....初始化GPIO口*/ W25Q64_Init(); /*2..../spi/spidev.h> #include #include #include #include #include #include #include /*杂项字符设备头文件..._fops= { .open=tiny4412_open, .read=tiny4412_read, .write=tiny4412_write, .release=tiny4412_release
比如在ARM Linux内,一个.dts(device tree source)文件对应一个ARM的machine,一般放置在内核的"arch/arm/boot/dts/"目录内,比如exynos4412...参考板的板级设备树文件就是"arch/arm/boot/dts/exynos4412-origen.dts"。...此外,还有一些Linux内核定义好的,一类设备通用的有默认意义的属性,这些属性一般不能被内核自动解析生成相应的设备信息,但是内核已经编写的相应的解析提取函数,常见的有 "mac_addr","gpio"...随着linux kernel的发展,在内核中将interrupt controller抽象成irqchip这个概念越来越流行,甚至GPIO controller也可以被看出一个interrupt controller...gpio gpio也是最常见的IO口,常用的属性有 "gpio-controller",用来说明该节点描述的是一个gpio控制器 "#gpio-cells",用来描述gpio使用节点的属性一个cell的内容
> #include #include #include #include #.../uaccess.h> #include #include #include #include #include #include #include #include static struct work_struct touch_work; static struct i2c_client *touch_client; /*工作函数*/ void tiny4412...初始化工作队列*/ INIT_WORK(&touch_work,tiny4412_touch_work_func); /*2.
领取专属 10元无门槛券
手把手带您无忧上云