#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 ...