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子系統都是字元裝置,只是...