89 case 1: pos += off; break; //偏移off
90 default: return -EINVAL;
91 }
92 if((pos > MEM_SIZE) || (pos < 0))
93 return -EINVAL;
94 filp->f_pos = pos; //修改文件指針
95 return filp->f_pos;
96 }
97
98 static void key_exit_module(void){
99 if(key_device){
100 cdev_del(&key_device->cdev);//刪除CDEV結(jié)構(gòu)體
101 kfree(key_device); //釋放cdev申請的內(nèi)存
102 }
103 //卸載設(shè)備
104 unregister_chrdev_region(MKDEV(KEY_MAJOR,KEY_MINOR),1);
105 device_unregister(drv_class_dev);
106 class_destroy(drv_class);
107 }
108
109 static struct file_operations key_fops = {
110 .owner = THIS_MODULE,
111 .llseek = key_llseek,
112 .read = key_read,
113 .write = key_write,
114 .ioctl = key_ioctl,
115 .open = key_open,
116 .release = key_release,
117 };
118
119 static int key_init_module(void){
120 int ret;
121 ret = register_chrdev_region(MKDEV(KEY_MAJOR,KEY_MINOR),1,'key_cdev');
122 if(ret < 0){
123 printk('<0>error:can't get major %dnn',KEY_MAJOR);
124 return ret;
125 }
126 drv_class = class_create(THIS_MODULE,Driver_NAME);
127 drv_class_dev = device_create(drv_class,NULL,MKDEV(KEY_MAJOR,KEY_MINOR),NULL,DEVICE_NAME); /*/dev/key_query*/
128 //分配cdev結(jié)構(gòu)體內(nèi)存
129 key_device = kmalloc(sizeof(struct key_dev),GFP_KERNEL);
130 if(!key_device){
131 ret = -ENOMEM;
132 goto fail;
133 }
134 //格式化分配的內(nèi)存
135 memset(key_device,0,sizeof(struct key_dev));
136 //初始化cdev結(jié)構(gòu),將fops和cdev連接
137 cdev_init(&key_device->cdev,&key_fops);
138 key_device->cdev.owner = THIS_MODULE;
139 key_device->cdev.ops = &key_fops;
140 //注冊cdev進入內(nèi)核
141 ret = cdev_add(&key_device->cdev,MKDEV(KEY_MAJOR,KEY_MINOR),1);
142 if(ret){
143 printk('<0>error in cdev adding %dnn',ret);
144 goto fail;
145 }
146 return 0;
147 fail:
148 key_exit_module();
149 return ret;
150 }
151
152 module_init(key_init_module);
153 module_exit(key_exit_module);
154
155 MODULE_AUTHOR('Lover雪兒');
156 MODULE_LICENSE('Dual BSD/GPL');
附上應(yīng)用程序:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include <linux/rtc.h> 7 #include 8 #include 'mx257_gpio.h' 9 10 #define COMMAND1 1 11 #define COMMAND2 2 12 13 int main(int argc, char **argv) 14 { 15 int ret; 16 int fd; 17 unsigned char key_data[256] = {0}; 18 19 fd = open('/dev/cdev',O_RDWR); 20 if(fd < 0){ 21 printf('can't open !!!n'); 22 exit(-1); 23 } 24 printf('open /dev/cdev succefullyn'); 25 ioctl(fd,COMMAND1,0); 26 //while(1){ 27 lseek(fd,0,0); //將文件指針重定位到文件的開頭 28 write(fd,'hello,Lover雪兒',sizeof('hello,Lover雪兒')); 29 lseek(fd,0,0); //將文件指針重定位到文件的開頭 30 read(fd,key_data,sizeof('hello,Lover雪兒')); 31 printf('read successfully: n%snn',key_data); 32 //} 33 close(fd); 34 return 0; 35 }
上一篇:IMX257 Linux內(nèi)存空間內(nèi)存分配
下一篇:【改進定時器】IMX257實現(xiàn)GPIO-IRQ定時器消抖驅(qū)動程序
設(shè)計資源 培訓 開發(fā)板 精華推薦
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關(guān)于ESP32/8266使用async-mqtt-client庫的一些基本介紹
- arduino環(huán)境下利用ESP32控制舵狗(初始位置的調(diào)試)
- 使用ESP32驅(qū)動TI的TMP117溫度傳感器
- (3)ESP32 Python 制作一個辦公室溫度計
- LTC2975 的典型應(yīng)用 - 具有準確輸入電流和能量測量功能的 4 通道 PMBU 電源系統(tǒng)管理器
- STM32 Nucleo-64 開發(fā)板,帶 STM32WB15CC,支持 Arduino、ST Morpho 連接
- 使用 Analog Devices 的 LT1302CN8-5 的參考設(shè)計
- MC33364臨界導(dǎo)通模式反激轉(zhuǎn)換器的典型應(yīng)用電路
- AD9754-EB,用于 AD9754、14 位、125 MSPS 高性能 D/A 轉(zhuǎn)換器的評估板
- LTC1064-3,優(yōu)于用于數(shù)據(jù)通信的貝塞爾線性相位濾波器
- NCS2001SN2T1G 0.9V單電源運放正電容乘法器典型應(yīng)用電路
- AM6TW-4803DH35Z ±3.3V 6 瓦雙路輸出 DC/DC 轉(zhuǎn)換器的典型應(yīng)用
- 使用 Analog Devices 的 LTC1538IG-AUX 的參考設(shè)計
- DC1198B-B,使用 LTM4607EV、6 至 36 Vin 至 12V、5A 高效降壓-升壓 DC/DC 模塊穩(wěn)壓器的演示板
- 肖特激光玻璃助力實現(xiàn)核聚變領(lǐng)域又一個歷史性里程碑
- 英飛凌SEMPER? NOR閃存系列獲得ASIL-D功能安全認證
- 如何在開關(guān)模式電源中運用氮化鎵技術(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- API調(diào)用小記(Touchdesigner和ESP32)
- 芯科科技Tech Talks技術(shù)培訓重磅回歸: 賦能物聯(lián)網(wǎng)創(chuàng)新,共筑智能互聯(lián)未來
- 關(guān)于ESP32/8266使用async-mqtt-client庫的一些基本介紹
- 外媒稱IBM因并購小規(guī)模裁員1700人
- 吳漢明院士演講:詳解后摩爾時代,芯片制造三大挑戰(zhàn)
- 引渡聽證會或2020年1月開始,孟晚舟律師團隊將提出動議
- 動力電池測試必備解決方案
- 商用服務(wù)機器人品牌「優(yōu)地科技」完成數(shù)億元融資
- Manz發(fā)布第三代SpeedPicker SAS系列自動化解決方案
- Vicor 面向數(shù)據(jù)中心和汽車應(yīng)用發(fā)布雙向 48V/12V NBM 轉(zhuǎn)換器
- 人工智能Watson“醫(yī)生”秒速拿出癌癥治療方案
- 臺北國際電腦展:英特爾突破現(xiàn)代計算機極限
- 升級iOS 12后微信不再提示新消息怎么辦?10秒解決