字元裝置驅動 LED驅動程式

2021-08-20 21:36:16 字數 1762 閱讀 3463

int main()

open –> sys.open –> led.open 

write –> sys.write –> led.write

//第一步:驅動功能實現

static

int first_drv_open(struct inode *inode, struct file *file)

static ssize_t first_drv_write(struct file *file,

const

char __user *buf,

size_t count,

loff_t * ppos)

//第二步:定義結構體,並把驅動函式填充進去

static

struct file_operations first_drv_fops = ;

//第四步:實現驅動入口函式

int major;

static

int first_drv_init(void)

static

void first_drv_exit(void)

//第五步:修飾入口函式,及退出函式

module_init(first_drv_init);

module_exit(first_drv_exit);

驅動程式可以自動分配主裝置號, 也可以手工指定

// 設定為 0 時是系統自動分配主裝置號

major = register_chrdev(0, "first_drv", &first_drv_fops);

// 通過 [cat /proc/device] 看一下系統為我們的first_drv分配的裝置號是多少

// 手動分配 111主裝置號給 first_drv

register_chrdev(111, "first_drv", &first_drv_fops);

當應該程式 執行 open(「/dev/xyz」) 操作時,這個/dev/xyz怎麼來的 

2.1 手動建立

// 建立裝置節點

mknod /dev/xyz c(表示是字元裝置) 主裝置號 次裝置號

//檢視裝置資訊:

ls -l /dev/xyz

int major;

static

int first_drv_init(void)

static

void first_drv_exit(void)

虛擬位址怎麼來的,用 ioremap( ) 函式來對映,對映完後操作虛擬位址就像操作實體地址一樣。

static

int first_drv_init(void)

static int first_drv_open(struct inode *inode, struct file *file)

static ssize_t first_drv_write(struct file *file, 

const

char __user *buf,

size_t count, loff_t * ppos)

else

return

0;}

裝置驅動 字元裝置驅動程式

linux下的應用程式在訪問字元裝置時,一般都是通過裝置檔案訪問的。裝置檔案一般都存放在 dev目錄下。字元裝置檔案的第乙個標誌是c,如下所示 總結 每乙個檔案代表乙個裝置,在時間前面有兩個用逗號隔開的數字,第乙個數字是主裝置號,第二個數字是次裝置號。一般認為乙個主裝置號對應乙個驅動程式,這裡列出的...

linux裝置驅動程式 字元裝置驅動程式

先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...

Linux裝置驅動程式 字元裝置驅動程式

1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...