日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 中断

發布時間:2025/5/22 linux 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 中断 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


中斷

gpio子系統

一系列關于GPIO設置的函數linux-3.5/arch/arm/mach-exynos/include/mach/

測試gpio端口是否合法
int gpio_is_valid(int number);

申請某個gpio端口當然在申請之前需要顯示的配置該gpio端口的pinmux
int gpio_request(unsigned gpio, const char *label)

標記gpio的使用方向包括輸入還是輸出
/*成功返回零失敗返回負的錯誤值*/
int gpio_direction_input(unsigned gpio);
int gpio_direction_output(unsigned gpio, int value);

獲得gpio引腳的值和設置gpio引腳的值(對于輸出)
int gpio_get_value(unsigned gpio);
void gpio_set_value(unsigned gpio, int value);

gpio當作中斷口使用
int gpio_to_irq(unsigned gpio);
返回的值即中斷編號可以傳給request_irq()和free_irq()

導出gpio端口到用戶空間
int gpio_export(unsigned gpio, bool direction_may_change);
/* 撤銷GPIO的導出 */
void gpio_unexport();

request_irq
free_irq

?

了解一些關于中斷的知識,下面開始寫驅動

1 #include <linux/module.h> 2 #include <linux/kernel.h> 3 #include <linux/miscdevice.h> 4 #include <linux/fs.h> 5 #include <linux/interrupt.h> 6 #include <linux/gpio.h> 7 #include <mach/gpio.h> 8 #include <asm-generic/ioctl.h> 9 #include <asm/uaccess.h> 10 11 #define MAGIC 'B' 12 #define GET_BTN_VAL _IOR(MAGIC, 1, unsigned long) 13 14 typedef struct 15 { 16 unsigned int gpio; 17 unsigned int btn; 18 unsigned int irq; 19 char* name; 20 }irq_typedef; 21 22 static irq_typedef irqsource[] = 23 { 24 {EXYNOS4_GPX3(2),1,0,"btn1"}, 25 {EXYNOS4_GPX3(3),2,0,"btn2"}, 26 {EXYNOS4_GPX3(4),3,0,"btn3"}, 27 {EXYNOS4_GPX3(5),4,0,"btn4"} 28 }; 29 30 static unsigned long btn_num; 31 32 static irqreturn_t gpio_irq_handler(int irq, void *dev) 33 { 34 irq_typedef* curdev = (irq_typedef *)dev; 35 36 printk("%s\n",curdev->name); 37 printk("btn(drv):%d\n",curdev->btn); 38 39 btn_num = curdev->btn; 40 41 return 0; 42 } 43 44 static long btn_ioctl(struct file *fil, unsigned int cmd, unsigned long arg) 45 { 46 unsigned long ret; 47 void __user *argp = (void __user *)arg; 48 49 switch(cmd) 50 { 51 case GET_BTN_VAL: 52 //ret = copy_to_user((void __user *) argp, (void *)&btn_num,4); 53 put_user(btn_num, (unsigned int __user *) argp); 54 break; 55 default:return -EINVAL; 56 } 57 58 return 0; 59 } 60 61 62 static struct file_operations btn_irq_fops = 63 { 64 .owner = THIS_MODULE, 65 .unlocked_ioctl = btn_ioctl, 66 }; 67 68 static struct miscdevice btn_irq_misc = 69 { 70 .minor = 255, 71 .name = "btn", 72 .fops = &btn_irq_fops, 73 }; 74 75 static __init int btn_irq_init(void) 76 { 77 int i,ret; 78 79 misc_register(&btn_irq_misc); 80 81 for(i=0;i<4;i++) 82 { 83 irqsource[i].irq = gpio_to_irq(irqsource[i].gpio); 84 ret = request_irq(irqsource[i].irq,gpio_irq_handler,IRQF_TRIGGER_FALLING,irqsource[i].name, &irqsource[i]); 85 } 86 87 return ret; 88 } 89 90 static __exit void btn_irq_exit(void) 91 { 92 int i; 93 94 for(i=0;i<4;i++) 95 free_irq(irqsource[i].irq, &irqsource[i]); 96 97 misc_deregister(&btn_irq_misc); 98 } 99 100 module_init(btn_irq_init); 101 module_exit(btn_irq_exit); 102 MODULE_LICENSE("GPL"); 1 #include <stdio.h> 2 #include <sys/types.h> 3 #include <sys/stat.h> 4 #include <fcntl.h> 5 #include <unistd.h> 6 #include <stdlib.h> 7 #include <sys/ioctl.h> 8 9 #define MAGIC 'B' 10 #define GET_BTN_VAL _IOR(MAGIC, 1, unsigned long) 11 12 int main(int argc,char *argv[]) 13 { 14 int btn_fd,btn_val=0; 15 16 if(argc!=2) 17 { 18 printf("Usage:<%s> </dev/?node>\n",argv[0]); 19 return -1; 20 } 21 22 btn_fd = open(argv[1],O_RDONLY); 23 24 while(1) 25 { 26 ioctl(btn_fd,GET_BTN_VAL,btn_val); 27 //ioctl(btn_fd,GET_BTN_VAL,&btn_val); 28 sleep(1); 29 30 printf("btn_val(irq):%d\n",btn_val); 31 } 32 } 1 obj-m += btnirq.o 2 SOURCE = btntest.o 3 4 CROSS_COMPLIE = arm-linux- 5 CC = $(CROSS_COMPLIE)gcc 6 7 KERNDIR = /centos/xyd/linux-3.5 8 #CURDIR = $(shell pwd) 9 CURDIR = `pwd` 10 11 .PHONY: module clean 12 13 all: module $(SOURCE:.o=) 14 15 module: 16 $(MAKE) -C $(KERNDIR) M=$(CURDIR) modules 17 18 $(SOURCE:.o=):$(SOURCE) 19 $(CC) -o $@ $^ 20 21 %.o:%.c 22 $(CC) -c $< 23 24 clean: 25 $(MAKE) -C $(KERNDIR) M=$(CURDIR) clean 26 rm $(SOURCE:.o=)

?

轉載于:https://www.cnblogs.com/wqwlinux/p/6971192.html

總結

以上是生活随笔為你收集整理的linux 中断的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲好看站 | 91高跟黑色丝袜呻吟动态图 | 欧美大片视频在线观看 | 欧美三级小说 | 香蕉视频在线观看黄 | 美女扒开内裤让男人捅 | 欧美日视频 | 久久精品人人 | 探花国产 | 91免费短视频 | 欧美热热 | 强开小嫩苞一区二区三区网站 | 欧美片网站yy | 性视频播放免费视频 | 欧美成人性生活 | 夜夜看av| 日本特黄特色aaa大片免费 | 亚洲精品aaa | 色玖玖综合| 香蕉视频色版 | 日韩一区二区视频在线 | 日韩少妇| 久久国产精品偷 | 午夜福利啪啪片 | 国产性猛交╳xxx乱大交 | 偷偷在线观看免费高清av | 日本va欧美va精品发布 | 操女人逼逼视频 | 精品aaa| 欧美激情亚洲综合 | 亚洲人人在线 | 极品丰满少妇 | www.youjizz日本 | 97人妻精品一区二区三区视频 | www日本在线观看 | 日韩人体视频 | 爱爱视频免费看 | 福利在线国产 | 国产aⅴ激情无码久久久无码 | 久久久久极品 | 欧美色图在线视频 | 久久久久久久久免费视频 | 边吃奶边添下面好爽 | 色窝窝无码一区二区三区成人网站 | av高清| 丁香色欲久久久久久综合网 | 男人天堂综合 | 生活片毛片 | 综合久久久久久久 | 亚洲xx在线| 日本欧美一级片 | 白浆一区 | 少妇喷潮明星 | 欧美性受xxxx黑人xyx性爽 | 免费观看在线高清 | 国产乱人伦精品 | 91麻豆精品秘密入口 | 欧美精品一区二区成人 | 精品在线观看视频 | 美女三级黄色片 | 欧美成人a交片免费看 | 调教丰满的已婚少妇在线观看 | 成人h视频在线 | 好吊色欧美一区二区三区视频 | 俄罗斯videodesxo极品 | 96日本xxxxxⅹxxx17 | 日本一区二区不卡在线观看 | 中文字幕精 | 国产精品视频123 | 性av免费 | 成人动漫在线观看视频 | 蜜臀久久99精品久久久久久宅男 | 国产中文字幕亚洲 | 欧美 日韩 国产一区 | 一区二区高清 | 国产伦精品一区二区三区四区视频 | 亚洲色图 欧美 | 精品久久久久久久久久久久久久久久久 | 成人午夜视频一区二区播放 | 国产成人综合在线 | 国产艳妇疯狂做爰视频 | 免费黄色激情视频 | 亚洲精品男人天堂 | 中文字幕久久久久 | 黑帮大佬和我的三百六十五天 | 在线成人小视频 | 亚洲国产成人91精品 | 日日射天天干 | 久久这里只有精品首页 | 国产成人精品免高潮费视频 | 波多野结衣电影在线播放 | 红桃视频亚洲 | 亚洲中文字幕一区二区在线观看 | 六月久久 | 日韩欧美国产亚洲 | 97久久久久久久 | 亚洲视频自拍 | 国产精品偷伦视频免费观看了 | 日本亚洲最大的色成网站www |