Linux簡單雜項裝置註冊詳細步驟(學習筆記)

2021-10-07 21:05:37 字數 3478 閱讀 3435

關於註冊雜項裝置需要以下幾個檔案

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是一對 互斥 函式,以...