如何編寫雜項裝置驅動

2021-08-31 23:52:29 字數 2889 閱讀 9364

1.1、註冊雜項裝置

int misc_register(struct miscdevice * misc)
標頭檔案:#include

功能:註冊乙個雜項裝置

引數:misc- 雜項裝置的核心結構指標,至少已經實現minor,name,fops三個成員。

返回值:0,表示註冊成功;負數,註冊失敗。

說明:註冊成功之後,會在/dev目錄下生成乙個裝置節點檔案。

2.2、登出函式

int misc_deregister(struct miscdevice *misc)
標頭檔案:#include

功能:登出乙個已經存在雜項裝置

引數:misc,雜項裝置的核心結構指標,已經註冊的struct miscdevice結構。

返回值:0,表示登出成功;負數,登出失敗

雜項裝置的核心資料結構struct miscdevice:(標頭檔案中已經定義好)

struct miscdevice  ;
結構體struct miscdevice結構中的函式結構液體struct file_operations(標頭檔案中已經定義好)

struct file_operations ;
**例子:

驅動**

#include #include //包含必須的標頭檔案

#include #include //以下是檔案操作方法的具體實現**

static int ***_open (struct inode *pinode, struct file *pfile)

static ssize_t ***_read (struct file *pfile, char __user *buf, size_t count, loff_t *poff)

static ssize_t ***_write (struct file *pfile, const char __user *buf, size_t count, loff_t *poff)

static int ***_release (struct inode *pinode, struct file *pfile)

//檔案操作方法集合指標

//檔案操作方法:根據具體裝置實現需要的功能

static const struct file_operations char_dev_fops=;

//定義核心資料結構

#define dev_name "mymisc"

static struct miscdevice misc_dev=;

static int __init chrdev_test_init(void)

printk("misc_register ok!\n");

return 0;

}static void __exit chrdev_test_exit(void)

printk("misc_deregister ok!\n");

}module_init(chrdev_test_init);

module_exit(chrdev_test_exit);

module_license("gpl");

應用**:

#include #include #include #include #include #include #include #define dev_name "/dev/mymisc"

int main(void)

;//1,亮,0表示滅

int fd;

//開啟檔案裝置o_rdwr, o_rdonly, o_wronly,

fd = open(dev_name, o_rdwr);

if(fd < 0)

read(fd, buf, 4); //從核心空間中讀取資料

write(fd, buf, 4);//寫資料到核心空間

close(fd);//關閉裝置 ,可以不呼叫,程式關閉時系統自動呼叫

return 0;

}

編譯**:

# makefile 2.6

#交叉編譯器字首

cc := arm-linux-

#應用程式名

#應用程式原始檔列表

#模組列表

obj-m := mise_device_moudle.o

#核心原始碼路徑

#kdir :=/lib/modules/$(shell uname -r)/build

kdir := /home/jian/aaa/linux/linux-3.5/

#模組最終存放

rootfs_dir := /home/jian/aaa/rootfs/home

all:

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

@$gcc $ -o $

cp $ *.ko $

@rm -rf .tmp_versions *.o *.mod.o *.mod.c *.bak *.symvers *.markers *.unsigned *.order *~ .*.*.cmd .*.*.*.cmd

clean:

@rm -f $ *.ko *.o *.mod.o *.mod.c *.bak *.symvers *.markers *.unsigned *.order *~

misc雜項裝置驅動

linux裡面的misc雜項裝置是主裝置號為10的驅動裝置,它的註冊跟使用比較的簡單,所以比較適用於功能簡單的裝置。它有自己的裝置結構體 struct miscdevice 它在標頭檔案linux miscdevice.h裡面有定義,其中minor是misc裝置的副裝置號,misc裝置主要依賴min...

Linux雜項裝置驅動框架

首先是標頭檔案定義 include include include include 以下是一些file operations中提供的一些函式,這些函式用於給應用層提供介面,以此來調動裝置。static int filename open struct inode my indoe,struct fi...

關於如何編寫linux裝置驅動

關於如何編寫linux裝置驅動 1 首先確定硬體介面使用的匯流排,然後確定要實現的功能,是網絡卡 sensor還是什麼,2 再確定對上層應用暴露的介面,從而選擇子系統,例如iio input子系統等。由於linux只有字元裝置 塊裝置 網路裝置三種裝置,其實iio input子系統都是字元裝置,只是...