📄 my_key.c
字号:
#include <linux/kernel.h>#include <linux/module.h> #if CONFIG_MODVERSIONS==1#define MODVERSIONS#include <linux/modversions.h>#endif#include <linux/fs.h>#include <linux/wrapper.h>#include <linux/types.h>#include <linux/init.h>#include <linux/delay.h>#include <asm/segment.h>#include <asm/hardware.h>#include <asm/arch/s3c2410.h> #include <asm/irq.h> #ifndef KERNEL_VERSIONS#define KERNEL_VERSIONS(a,b,c) ((a)*65536+(b)*256+(c))#endif #if LINUX_VERSION_CODE > KERNEL_VERSION(2,2,0)#include <asm/uaccess.h>#endif#define SUCCESS 0 #define DEVICE_NAME "my_key"static unsigned char key_value;void key_init(void){#if 0 rGPCCON &= 0xfffff0c3; //potr c 1 2 3 4 input#else rGPCCON &= 0xfffffc03;#endif //0xfffffc03 //rGPCDAT = port data //rGPCUP = pull ip rGPGCON &= 0xffffc30f; //port g 2 3 5 6 input //rGPGDAT = port data //rGPGUP = port up}static ssize_t mykey_read(struct file * file, char * buf, size_t count, loff_t *ppos ){ //ssize_t ret; /*if((rGPCDAT & 0x0020) == 1) { *buf |= 0x0002; } else { *buf &= 0xfffd; }*/ *buf = ((rGPCDAT >> 1) | (rGPGDAT << 2) | (rGPGDAT & 0x40));#if 0 if((rGPCDAT & 0x0010) == 1) { *buf |= 0x0002; } else { *buf &= 0xfffd; }#endif if(copy_to_user(&key_value,buf,sizeof(key_value))) { printk("key.c:write data error\n"); return -EFAULT; } return 0;}static int mykey_open( struct inode *inode, struct file *file ){ //module_speak(); key_init(); printk("device_open(%p,%p)\n",inode,file); //Message_Ptr=Message; MOD_INC_USE_COUNT; return SUCCESS;}static int mykey_release( struct inode *inode, struct file *file ){ //module_speak(); printk("device_release(%p,%p)\n",inode,file); MOD_DEC_USE_COUNT; return 0;}static int Major;struct file_operations Fops={ llseek:NULL, read:mykey_read, write:NULL, readdir:NULL, ioctl:NULL, mmap:NULL, open:mykey_open, release:mykey_release,};int init_module(){ //int ret_val; //int t; Major=register_chrdev(0,DEVICE_NAME,&Fops); //printk("register interrupt fig=%d\n",t); printk("my_key.c:register OK:The major is %d\n",Major); return 0;}void cleanup_module(){ int ret; ret=unregister_chrdev(Major,DEVICE_NAME); printk("my_key.c:unregister OK\n"); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -