關於註冊雜項裝置需要以下幾個檔案
root@s:
/driver/rootfs/module/misc# ls
misc_module.c檔案**如下:
#include
#include
#include
#include
#define nisc_devname "miscdev1"
//編寫核心層/底層open函式
static
intmisc_open
(struct inode *node,
struct file *f)
//編寫核心層/底層read函式
static ssize_t misc_read
(struct file *f,
char __user *buff, size_t size, loff_t *poff)
//編寫核心層/底層write函式
static ssize_t misc_write
(struct file *f,
const
char __user *buff, size_t size, loff_t *poff)
//上層應用採用close關閉檔案,核心層使用release
static
intmisc_release
(struct inode *node,
struct file *f)
//填充裝置驅動中的檔案操作結構體
static
const
struct file_operations misc_fops=
;//填充核心結構體
static
struct miscdevice misc=
;//核心模組載入函式,將註冊功能放到該函式中執行
static
int __init msic_register_module_init
(void
)printk
("misc_register is success\n");
return0;
}//核心模組解除安裝函式,將登出功能放到該函式中執行
static
void __exit misc_deregister_module_exit
(void
)else
printk
("misc_deregister is success\n");
}//宣告
module_init
(msic_register_module_init)
;module_exit
(misc_deregister_module_exit)
;module_license
("gpl"
);
#include
#include
#include
#include
#include
#include
intmain
(int argc,
char
const
*ar**)
;int fd=
open
(ar**[1]
,o_rdwr)
;//以讀寫方式開啟字元裝置節點
if(fd<0)
printf
("open is success\n");
ret=
write
(fd,
"123456789",10
);//if
(ret<0)
printf
("write is success\n");
ret=
read
(fd,buff,5)
;if(ret<0)
printf
("read is success\n");
sleep(3
);for(i=
0;i<
5;i++
)sleep(2
);close
(fd);if
(fd<0)
printf
("close is success\n");
return0;
}
makefile**如下:
obj-m +
= misc_module.o
kerdir=
/qudong/
0703kernel/linux-
3.5/
all:
make -c $(kerdir) m=$(pwd)
.cclean:
make -c $(kerdir) m=$(pwd) clean
最終在超級終端執行:
[root@ubuntu misc]# insmod misc_module.ko
[20332.190000
] msic_register_module_init is success
[20332.195000
] misc_register is success
[root@ubuntu misc]# .
[20336.140000
]/driver/rootfs/module/misc/misc_module.c's misc_open is called
[20336.140000
]/driver/rootfs/module/misc/misc_module.c's misc_write is called
[20336.140000
]/driver/rootfs/module/misc/misc_module.c's misc_read is called
open is success
write is success
read is success
buff[0]
=0buff[1]
=0buff[2]
=0buff[3]
=0buff[4]
=0[20341.145000
]/driver/rootfs/module/misc/misc_module.c's misc_release is called
close is success
[root@ubuntu misc]# rmmod misc_module.ko
[20349.455000
] misc_deregister_module_exit is success
[20349.515000
] misc_deregister is success
很明顯,雜項裝置的註冊是成功的,但是存在疑問:為什麼資料沒有寫入成功?buff的列印沒有資料?還是說有其他的原因,目前我是不理解的,希望隨著之後的學習能夠解答這個現象 裝置註冊 驅動註冊以及雜項裝置註冊之間的關係
1.裝置宣告是在平台檔案 home leizi android itop4412 kernel 3.0 arch arm mach exynos mach itop4412.c中,如下圖,並且裝置名稱是led two.核心編譯之後,s3c device leds ctl被註冊到核心中,並不名稱是le...
Linux混雜裝置註冊方法
linux混雜裝置註冊,相對來說更加簡單,可以這樣做 static int init init fpga void 可以看到沒有字元裝置標準的那種什麼申請裝置號,初始化,新增等操作,只用乙個misc register 就可以了。static struct miscdevice ppc dpram m...
linux字元裝置註冊相關函式
本文介紹linux字元裝置註冊相關的四個函式 cdev alloc cdev init cdev add和cdev del。這四個函式在檔案 fs char dev.c中定義,在標頭檔案include linux cdev.h中宣告。其中cdev alloc和cdev init是一對 互斥 函式,以...