1. 程式人生 > 其它 >驅動學習筆記(三)--------字元裝置驅動基礎

驅動學習筆記(三)--------字元裝置驅動基礎

字元驅動原理

說明

本文為朱老師課程學習筆記

結構

  • 應用
  • 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