![實現(xiàn)一個簡單的linux字符設(shè)備驅(qū)動_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/10/8d11b12b-928b-4059-99ea-4c6e89eebe3a/8d11b12b-928b-4059-99ea-4c6e89eebe3a1.gif)
![實現(xiàn)一個簡單的linux字符設(shè)備驅(qū)動_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/10/8d11b12b-928b-4059-99ea-4c6e89eebe3a/8d11b12b-928b-4059-99ea-4c6e89eebe3a2.gif)
![實現(xiàn)一個簡單的linux字符設(shè)備驅(qū)動_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/10/8d11b12b-928b-4059-99ea-4c6e89eebe3a/8d11b12b-928b-4059-99ea-4c6e89eebe3a3.gif)
![實現(xiàn)一個簡單的linux字符設(shè)備驅(qū)動_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/10/8d11b12b-928b-4059-99ea-4c6e89eebe3a/8d11b12b-928b-4059-99ea-4c6e89eebe3a4.gif)
![實現(xiàn)一個簡單的linux字符設(shè)備驅(qū)動_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/10/8d11b12b-928b-4059-99ea-4c6e89eebe3a/8d11b12b-928b-4059-99ea-4c6e89eebe3a5.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、實現(xiàn)一個簡單的linux字符設(shè)備驅(qū)動 步驟1: 編寫驅(qū)動程序 view plaincopy to clipboardprint?1. #include <linux/module.h> 2. #include <linux/init.h> 3. #include <linux/kernel.h> 4. #include <linux/cdev.h> 5. #include <linux
2、/fs.h> 6. #include <linux/kdev_t.h> 7. #include <asm/uaccess.h> 8. #include <linux/device.h> 9. #define DEVICE_NAME "cdev_zhangwei" 10. int number_of_devices = 1; &
3、#160; 11. struct cdev mydev; 12. dev_t dev = 0; 13. char data128 = "/0" / the data of my device 14. struct class *myclass; 15. static int mydev_
4、open(struct inode *inode, struct file *file) 16. 17. pr_info("mydev driver open!/n"); 18. return 0; 19. 20. static int mydev_release(st
5、ruct inode *inode, struct file *file) 21. 22. pr_info("mydev driver released!/n"); 23. return 0; 24. 25. ssize_t mydev_write(struct fil
6、e *file, const char _user *buf, size_t count, loff_t *f_pos) 26. 27. ssize_t ret = 0; 28. pr_info("mydev_write!/n"); 29.
7、0; pr_info("writing %d bytes/n", count); 30. if (count > 127) 31. return -ENOMEM; 32. if (count <
8、160;0) 33. return -EINVAL; 34. if (copy_from_user(data, buf, count) 35. ret = -EFAULT; 36.
9、60; 37. else 38. data127 = ''/0'' 39. pr_info("kernel received: %s/n", d
10、ata); 40. ret = count; 41. 42. return ret; 43. 44. static ssize_t mydev_read(struct file* filp, char*
11、buf, size_t len,loff_t* off) 45. 46. if( copy_to_user(buf,data,len) ) 47. 48. return -EFAULT; 49. &
12、#160; 50. 51. return len; 52. 53. struct file_operations mydev_fops = 54. .owner = THIS_MODULE, 55.
13、 .open = mydev_open, 56. .read = mydev_read, 57. .write = mydev_write, 58. .release = mydev_release 59.
14、;60. ; 61. static int _init mydev_init(void) 62. 63. int result, error; 64. result = register_chrdev(0, DEVICE_NAME, &mydev_fops); 65.
15、 pr_info("udev_cdev: get major number: %d/n", result); 66. dev = MKDEV(result, 0); 67. myclass = class_create(THIS_MODULE, "m
16、ydev_class"); 68. device_create(myclass, NULL, dev, NULL, DEVICE_NAME); 69. return 0; 70. 71. static void _exit mydev_exit(void) 72. 73.
17、160; cdev_del(&mydev); 74. unregister_chrdev_region(dev, number_of_devices); 75. device_destroy(myclass, dev); 76. class_destroy(myclass); 77.
18、0; pr_info("Goodbye cdev!/n"); 78. 79. module_init(mydev_init); 80. module_exit(mydev_exit); 81. MODULE_LICENSE("GPL"); 82. MODULE_DESCRIPTION("Simple cdev udev driver test");
19、60; 步驟2: 編譯,形成ko文件,然后利用insmod命令插入內(nèi)核。 (最好利用makefile進行編譯,網(wǎng)上有文章專門有介紹) 步驟3:創(chuàng)建設(shè)備節(jié)點: mknod /dev/your_name c 主設(shè)備號 次設(shè)備號 次設(shè)備號這里填0, 主設(shè)備號可以利用 cat /proc/devices 查看 步驟4:編寫用戶程序(測試咱們的驅(qū)動是否可行), 如以下代
20、碼,這個嘛,簡單的用gcc命令編譯就好了 view plaincopy to clipboardprint?1. #include <stdio.h> 2. #include <sys/types.h> 3. #include <unistd.h> 4. #include <stdlib.h> 5. #include <fcntl.h> 6. int main (void)
21、; 7. 8. int fd,len; 9. pid_t pid; 10. char buff = "This is from userspace zhangwei fight it!" 11.
22、60; char buff_read100 12. fd = open ("/dev/cdev_zhangwei", O_RDWR); 13. if (fd < 0) 14. perror(
23、"open failed"); 15. exit(0); 16. 17. pid = fork(); 18. if(pid>0) 19. 20. len = write (fd, buff, sizeof(buff); 21. p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二手房按揭買房買賣合同
- 國際公路運輸合同范本
- 2025船舶買賣合同書樣本版
- 提高創(chuàng)新能力的技能培訓(xùn)
- 提高人際關(guān)系的培訓(xùn)課程
- 品牌服務(wù)合同范本
- 2024年公共事業(yè)領(lǐng)域投資合同
- 吊車零租賃合同范本
- 鋼釘鐵釘售賣合同
- 2025有限責(zé)任公司銀行貸款擔(dān)保合同
- 七年級英語閱讀理解55篇(含答案)
- 管理ABC-干嘉偉(美團網(wǎng)COO)
- 基于視覺的工業(yè)缺陷檢測技術(shù)
- 軍事英語詞匯整理
- 家庭教育指導(dǎo)委員會章程
- DB31-T 1440-2023 臨床研究中心建設(shè)與管理規(guī)范
- 老客戶維護方案
- 高處作業(yè)安全教育培訓(xùn)講義課件
- 萬科物業(yè)管理公司全套制度(2016版)
- 動物檢疫技術(shù)-動物檢疫處理(動物防疫與檢疫技術(shù))
- 英語經(jīng)典口語1000句
評論
0/150
提交評論