日韩性视频-久久久蜜桃-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 中断的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产精品美女高潮无套 | 亚洲视频123| 伊人久久超碰 | 国内一级黄色片 | av2018| 欧美日韩中文一区 | 国产精品第12页 | 五月婷综合 | av高清一区二区 | 高跟鞋调教—视频|vk | 亚洲小说网 | 天天摸日日 | 超黄av| 日韩色在线观看 | 天天躁日日躁aaaa视频 | 中文字幕乱码一区 | 亚洲男女在线 | 日韩一区二区高清视频 | 精品一二三四区 | 久久99国产综合精品免费 | 污污的视频在线免费观看 | 欧美一区二区视频免费观看 | 自拍偷拍第 | 在线观看av大片 | 日本福利一区二区三区 | 午夜看片网站 | 久久精品10| 亚洲毛片在线看 | 爱情岛论坛亚洲品质自拍视频 | 亚洲欧美日韩动漫 | 久久中文精品 | av作品在线| 日本一本一道 | 中日韩免费视频 | 中文字幕一区电影 | 琪琪五月天 | 亚洲性精品 | 欧美草草 | 丁香久久 | 国产精品无码专区av免费播放 | www.在线视频| 国产日韩亚洲欧美 | 五月网| 插我舔内射18免费视频 | 日韩看片| 寂寞人妻瑜伽被教练日 | 成人看片网站 | 黄色片免费播放 | 激情文学亚洲色图 | 国语对白av | 欧美日韩久久久久久 | 91九色porny视频 | 天堂网www| 亚洲中文字幕无码不卡电影 | 日韩欧美国产片 | 久久盗摄 | 精品国语对白 | 女性向片在线观看 | 黄色片免费在线观看 | 欧美怡红院一区二区三区 | 成人精品免费网站 | 国产欧洲亚洲 | 欧美日韩精品一区二区三区视频播放 | 黄色av高清 | 一道本在线观看视频 | 好姑娘在线观看高清完整版电影 | 男人与雌宠物交h | 国产一级视频在线播放 | 色哟哟免费观看 | 体内精视频xxxxx | 2019av视频| 国产熟妇乱xxxxx大屁股网 | 欧美午夜在线 | 亚洲黄色片免费看 | 超碰福利在线观看 | 91精品国产91久久久久久黑人 | 97精品人妻一区二区 | 秋霞成人午夜鲁丝一区二区三区 | 成人毛片在线精品国产 | 美女色呦呦 | 日本大尺度激情做爰hd | 人av在线 | 体感预报日剧 | 三上悠亚人妻中文字幕在线 | japanese24hdxxxx日韩| 亚洲午夜视频 | 91久久精品国产91性色tv | 色国产视频 | 精品久久久久久 | 在线免费av网址 | 91香焦视频| 男人爆操女人 | 色一情一乱一伦 | 日韩av在线一区二区 | 91免费版在线 | 超碰人人爱人人 | 国产色区 | 亚洲三级黄色 | 日韩专区欧美专区 |