一般乙個普通的字元類裝置驅動要經歷下面的幾個步驟
整個流程如下
/*標頭檔案
#include
#include
#include
#include
#include
#include
#include
#include
#include
整個驅動模組大框架 module_init(scdev_init);
申請裝置號 num_dev = mkdev(numdev_major,numdev_minor);
ret = register_chrdev_region(num_dev,device_minor_num,device_name);
ret = alloc_chrdev_region(&num_dev,numdev_minor,device_minor_num,device_name);
建立裝置類 myclass=class_create(this_module , device_name);
申請你想要的資料型別的記憶體
struct reg_dev *my_devices;
my_devices = kmalloc(device_minor_num * sizeof(struct reg_dev),gfp_kernel);
初始化這段記憶體
memset(my_devices,0,device_minor_num * sizeof(struct reg_dev));
實現裝置函式fops
cdev_init(&dev->cdev,&my_fops);
dev->cdev.owner = this_module;
dev->cdev.ops = &my_fops;
註冊裝置到系統
err = cdev_add(&dev->cdev,devno,1);
建立裝置節點
device_create(myclass,null,mkdev(numdev_major,numdev_minor+i),null,device_name"%d",i);
初始化具體硬體 iic io spi....
***x_init();
這其中不能忘記硬體的初始化,因為這是個板集支援包和板子linux系統的橋梁
另外就是裝置節點的裝置號要和註冊裝置到系統 cdev_add 中的裝置號一致
這樣才能完成乙個裝置的使用。
申請的記憶體要記得釋放,而且要逐級釋放,不能有遺漏,否則會造成記憶體漏洞
關於shell的除錯問題
1,如果你在shell指令碼裡看見了這樣一句話 set e 這句話一般是寫在shell指令碼的開頭第二句的,就是說從 set e 之後出現的語句如果執行錯誤就是返回值為非0,程式就直接退出。2,如果你在shell指令碼裡看見了這樣一句話 set x 這句話的意思就是說在執行命令前會列印命令 例 fi...
關於ie的js除錯問題
專案採用了extjs配合googlemap以及乙個ext的 結果產生了firfox可以出現效果,ie無效果,firfox有httpfox,有firebug,而ie這方面差的就太遠了,這裡推薦下companion.js,這是乙個簡單實用的ie環境下的除錯工具,寫道這個人的blog寫得比較清楚了,照做就...
關於QEMU GDB除錯引導程式問題
我們除錯引導程式 通常是在0x7c00上斷下 並使用gdb檢視 但是gdb反彙編的內容是32位 不能得到正確解析。以下是解決辦法 保證qemu以qemu system i386執行 因為我測試 qemu system x86 64 並不能成功會報錯。我們也是為了除錯引導程式 所以也無傷大雅.執行qe...