首先 :
1. 建立裝置
//分配cdev結構體
if (globalmem_major)
//手動分配
ret = register_chrdev_region(devno, 1, "globalmem");
else
globalmem 提供給上層使用 。
2 。
建立核心裝置
struct globalmem_dev ;
globalmem_devp = kzalloc(sizeof(struct globalmem_dev), gfp_kernel);
int err, devno = mkdev(globalmem_major, index);
//對cdev結構體設定file_operations結構體
cdev_init(&dev->cdev, &globalmem_fops);
dev->cdev.owner = this_module;
//將cdev結構體註冊入系統,系統能夠識別呼叫當前cdev
err = cdev_add(&dev->cdev, devno, 1);
if (err)
printk(kern_notice "error %d adding globalmem%d", err, index);
//實現建立檔案系統節點
dev->lkm_memory_class = class_create(this_module, "globalmem");
if (is_err(dev->lkm_memory_class))
return ptr_err(dev->lkm_memory_class);
device_create(dev->lkm_memory_class, null,mkdev(globalmem_major,0),null,"globalmem");
struct cdev __randomize_layout;
新增linux核心驅動
1.將核心驅動.ko放入 lib modules 3.2.0 23 generic kernel drivers 目錄下 2.執行depmod a來解決依賴 掃瞄driver下的驅動依賴關係 命令執行完成後,會自動生成modules.dep 和modules.alias。dep為依賴關係。3.更新當...
linux核心驅動 poll waitqueue
在操作io裝置時,讀取裝置狀態或者資料時,如果採用輪詢方式,會占用大量的cpu資源,這種方式肯定是不可取,所以需要在核心驅動支援非同步通知方式,等到裝置準備好,再通知應用程式,其他時間應用程式應當處於休眠狀態,讓出cpu。本篇介紹poll的使用方法。1 首先定義乙個wait queue head t...
Linux驅動 核心延時測試
linux驅動 核心延時測試 環境 主機 fedora12 目標板 mini6410 目標板linux核心版本 2.6.38 實現功能 延遲2s 方法1 利用系統全域性變數jiffies jiffies記錄系統節拍,每一次節拍,核心時鐘中斷函式會將jiffies加1.hz在arm中為100,表示1s...