娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

IMX257 linux設(shè)備驅(qū)動之Cdev結(jié)構(gòu)

發(fā)布者:Meilin8888最新更新時間:2024-08-15 來源: cnblogs關(guān)鍵字:linux設(shè)備驅(qū)動 手機看文章 掃描二維碼
隨時隨地手機看文章

 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 }


[1] [2]
關(guān)鍵字:linux設(shè)備驅(qū)動 引用地址:IMX257 linux設(shè)備驅(qū)動之Cdev結(jié)構(gòu)

上一篇:IMX257 Linux內(nèi)存空間內(nèi)存分配
下一篇:【改進定時器】IMX257實現(xiàn)GPIO-IRQ定時器消抖驅(qū)動程序

小廣播
設(shè)計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 东港市| 合山市| 东明县| 临沧市| 拉萨市| 石首市| 墨脱县| 太仆寺旗| 深圳市| 甘德县| 天等县| 皋兰县| 卢龙县| 磐安县| 永清县| 黄浦区| 烟台市| 龙山县| 岳池县| 永德县| 青川县| 壤塘县| 西宁市| 称多县| 贺州市| 桂平市| 资兴市| 井冈山市| 凭祥市| 铜陵市| 温州市| 金坛市| 阿城市| 正定县| 双江| 安西县| 赫章县| 兴安县| 婺源县| 晋城| 玛纳斯县|