linux驅動學習(五) char dev總結

2021-06-01 04:59:11 字數 2072 閱讀 2034

回顧

裝載模組到正執行的核心和移除模組

#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 只顯示驅動的主裝置號,且是分類顯示...