驅動學習筆記(三)--------字元裝置驅動基礎
阿新 • • 發佈:2021-02-10
字元驅動原理
說明
本文為朱老師課程學習筆記
結構
- 應用
- API:open,close,read,write
- 驅動:實際的函式
- 硬體
驅動的表示
驅動實際上是一組(讀寫硬體暫存器的)api的組合
存到一個結構體裡
file_operations
static const struct file_operations i2cdev_fops = {
.owner = THIS_MODULE,
.llseek = no_llseek,
.read = i2cdev_read,
.write = i2cdev_write,
.unlocked_ioctl = i2cdev_ioctl,
.open = i2cdev_open,
.release = i2cdev_release,
};
函式指標,實際函式的地址
一個裝置,對應一個結構體變數
驅動向核心註冊時提供該結構體型別的變數
註冊
驅動向核心註冊,上面的結構體file_operations
核心把file_operations,放到數組裡
//register_chrdev使用示例
//I2C_MAJOR主裝置號,傳0代表核心自動分配
res = register_chrdev(I2C_MAJOR, "i2c", &i2cdev_fops);
cat /proc/devices檢視核心中已經註冊的
整體過程
insmod
xxx_init
register_chrdev
應用程式呼叫驅動
裝置檔案
硬體,被抽象成檔案,放在/dev下
檢視裝置號 ls -l /dev/xxx
第一個字母,b塊裝置,c字元裝置
裝置號:8主裝置號,0次裝置號
使用者空間和核心資料互動
//kbuf核心空間的
//ubuf使用者空間的
copy_from_user(kbuf, ubuf, count);
copy_to_user (ubuf, kbuf, count);
過程總結
2.6的核心
insmod,調xxx_init;lsmod,顯示出載入的驅動
在xxx_init裡呼叫register_chrdev;用cat /proc/devices顯示註冊的裝置及裝置號
建立裝置檔案mknod /dev/xxx c字元裝置 主裝置號 次裝置號
應用可以open,並write或read