回顧
裝載模組到正執行的核心和移除模組
#include
module_init();
module_exit();
用於指定模組的初始化和清除函式的巨集
__init
__exit
__initdata
__exitdata
#include
最重要的標頭檔案之一,該檔案包含驅動程式使用的大部分核心api函式的定義,包含睡眠函式以及各種變數宣告。
struct task_current *current;//當前程序
current->pid //程序id
current->comm //命令名
#include
核心版本資訊
#include
必須 的標頭檔案,必須包含在模組源**中
#include
模組引數
module_param(variable,type,perm);
#include
int printk(const char * fmt,...)
container_of(pointer, type, field)
乙個方便使用的巨集,它用於從包含在某個結構中的指標獲得結構本身的指標
#include
檔案系統標頭檔案,它是編寫裝置驅動程式的必需的標頭檔案
int register_chrdev_region(dev_t first, unsigned int count, char *name)
first 是要分配的裝置編號範圍的起始值,first的次裝置號經常被設為0,但對函式來將並不是必須的,count 是所請求的連續裝置編號的個數,常設為1,如果count非常大,那請求的範圍內可能和下乙個主裝置重迭,name是和該編號範圍關聯的裝置名稱,他講出現在sysfs中
和大部分核心函式一樣,register_chrdev_region返回值在分配成功時為0,錯誤情況下返回乙個負的錯誤碼,
int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name);
dev為輸出的引數,firstminor是要使用的被請求的第乙個次裝置號,通常是0,count 與name 同上
void unregister_chrdev_region(dev_t first, unsigned int count);
#include
初始化、註冊字元裝置
void cdev_init(cdev *cdev, struct file_operations *fops);
初始化分配到的結構
int cdev_add(struct cdev *dev, dev_t num, unsigned int count);
告訴核心該cdev結構的資訊
void cdev_del(struct cdev *dev)
#include
dev_t 表示裝置編號的資料型別
int major(dev_t dev)
int minor(dev_t dev)
獲取主次編號
dev_t mkdev(unsigned int major, unsigned int minor)
由主次編號構造dev_t資料項
struct file_operations;
struct file;
struct inode;
大多數裝置驅動都會用到的三個資料結構,
file_operations結構儲存字元裝置驅動程式的方法
file結構表示乙個開啟的檔案
inode結構表示磁碟上的檔案
#include
核心**和使用者空間之間移動資料的函式
unsigned long copy_from_user(void *to, const void *from, unsigned long count);
unsigned long copy_to_user(void *to, const void *from, unsigned long count);
linux驅動學習(五) char dev總結
裝載模組到正執行的核心和移除模組 include module init module exit 用於指定模組的初始化和清除函式的巨集 init exit initdata exitdata include 最重要的標頭檔案之一,該檔案包含驅動程式使用的大部分核心api函式的定義,包含睡眠函式以及各...
linux驅動學習
1.在dev目錄下用ls l檢視字元裝置,輸出第一列為c的的標識的裝置,其中有主裝置號,和次裝置號 裝置檔案對應裝置驅動,linux將每個裝置對映成為乙個檔案,如果訪問檔案,那麼對應的訪問就是相應的io驅動程式,檔案和驅動主要是通過主裝置號聯絡起來的,次裝置號就是反應了具體是那個裝置 核心中 dev...
Linux驅動學習
1.make時使用make arch arm cross compile arm linux gnueabihf 命令而不是make命令 2.編譯.c檔案使用arm linux gnueabihf gcc o c生產可執行檔案 3.cat proc devices 只顯示驅動的主裝置號,且是分類顯示...