Linux驅動(三) 完善裝置驅動自動建立裝置號

2021-10-24 19:19:41 字數 2324 閱讀 7319

#include #include #include #include #include #include #include /*

*argc:應用程式引數個數,包括應用程式本身

*ar**:具體的引數內容,字串形式

*/int main(int argc, char *ar**)

filename = ar**[1]; //獲取檔名稱

fd = open(filename, o_rdwr);

if(fd < 0)

/*讀操作*/

if(!strcmp(ar**[2], "r"))

/*寫操作*/

else if(!strcmp(ar**[2], "w"))

else

/*關閉操作*/

ret = close(fd);

if(ret < 0)

return 0;

}

驅動部分:

#include #include #include #include #include #include #include #define shanwuyan_name "shanwuyan"

struct shanwuyan_dev

;struct shanwuyan_dev shanwuyan; //定義乙個裝置結構體

/*開啟裝置*/

static int shanwuyan_open(struct inode *inode, struct file *filp)

/*釋放(關閉)裝置*/

static int shanwuyan_release(struct inode *inode, struct file *filp)

/*讀裝置*/

static ssize_t shanwuyan_read(struct file *filp, char __user *buf, size_t count, loff_t *ppos)

/*寫裝置*/

static ssize_t shanwuyan_write(struct file *filp, const char __user *buf, size_t count, loff_t *ppos)

static struct file_operations shanwuyan_fops =

;static int __init shanwuyan_init(void) //驅動入口函式

else //如果沒有給定主裝置號,則主次裝置號全部由系統分配

if(ret < 0) //裝置號分配失敗,則列印錯誤資訊,然後返回

else //如果裝置號分配成功,則列印裝置的主次裝置號

/*2.向核心新增字元裝置*/

shanwuyan.c_dev.owner = this_module;

cdev_init(&(shanwuyan.c_dev), &(shanwuyan_fops)); //初始化字元裝置結構體

cdev_add(&(shanwuyan.c_dev), shanwuyan.dev_id, 1); //新增裝置到核心

/*3.自動建立裝置節點*/

shanwuyan.class = class_create(this_module, shanwuyan_name); //建立類

shanwuyan.device = device_create(shanwuyan.class, null, shanwuyan.dev_id, null, shanwuyan_name);

return 0;

}static void __exit shanwuyan_exit(void) //驅動出口函式

module_init(shanwuyan_init); //註冊入口函式

module_exit(shanwuyan_exit); //註冊出口函式

module_license("gpl"); //同意gpl開源協議

module_author("***"); //新增作者名稱

makefile部分:

#!/bin/bash

obj-m += shanwuyan.o

kdir := /home/topeet/android/itop4412_kernel_4_14_2_bsp/linux-4.14.2_itop-4412_scp #這裡要對應你的linux核心目錄

pwd ?= $(shell pwd)

all:

make -c $(kdir) m=$(pwd) modules

clean:

make -c $(kdir) m=$(pwd) clean

LINUX 裝置驅動 完善 版(二)

dev fifo.c include include include include include include define major num 250 struct mycdev static dev t g pdevnum struct mycdev g pcdev struct clas...

驅動 linux裝置驅動 字元裝置驅動開發

preface 前面對linux裝置驅動的相應知識點進行了總結,現在進入實踐階段!linux 裝置驅動入門篇 linux 裝置驅動掃盲篇 fedora下的字元裝置驅動開發 開發乙個基本的字元裝置驅動 在linux核心驅動中,字元裝置是最基本的裝置驅動。字元裝置包括了裝置最基本的操作,如開啟裝置 關閉...

裝置驅動 三

裝置分類 字元裝置 塊裝置網路裝置 訪問方式 順序訪問,位元組為單位 隨機訪問,固定大小為單位訪問 裝置鍵盤,鍵盤 磁碟 扇區 flash 讀 頁,寫 塊 有無緩衝沒有有 有無裝置檔案有有 沒有 裝置號dev t devno 32位的整數 devno mkdev major,minor 31 20 ...