通過新增核心模組實現乙個基於記憶體對映的雜項裝置驅動程式。
拓展:
該模組只實現了顯示記憶體對映區域資訊的功能,而且該資訊是固定;
拓展部分實現了將當前程序在記憶體對映後的vma區域的資訊顯示出來。
編譯時:
$make
$sudo insmod miscdev_map.ko
$sudo chmod a+rw /dev/mymap
$gcc -o miscdev_maptest miscdev_maptest.c
$./miscdev_maptest
//miscdev_map.c
// 通過記憶體空間對映,實現裝置驅動程式與使用者程式的通訊
// 注意: 雜項裝置不需要再顯示地使用mknod建立裝置節點
//測試使用miscdev_maptest.c程式
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include // for init_module()
#include // for create_proc_read_entry()
#include // for sequence files
#include // for 'struct vm_area_struct'
#include // for 'struct task_struct'
#include
#include
#include
#define device_name "mymap"
#define device_info "i am the devive mymap, this is my test output"
static
unsigned
char *buffer;
static
int my_open(struct inode *inode, struct file *file)
static
int my_map(struct file *filp, struct vm_area_struct *vma)
static
struct file_operations dev_fops = ;
static
struct miscdevice misc = ;
static
int __init dev_init(void)
static
void __exit dev_exit(void)
module_init(dev_init);
module_exit(dev_exit);
module_license("gpl");
module_author("lkn@scut");
/*miscdev_maptest.c
本程式用於測試開發的miscdev_map核心模組,必須在miscdev_map核心模組編譯、新增並修改裝置許可權後執行。。
程式編譯命令: $ gcc -o miscdev_maptest miscdev_maptest.c
*/#include
#include
#include
#include
#include
#include
#include
#include
#define page_size 4096
int main(int argc , char *argv)
//記憶體對映
p_map = (unsigned
char *)mmap(0, page_size, prot_read | prot_write, map_shared,fd1, 0);
if(p_map == map_failed)
//列印對映後的記憶體中的內容
printf("%s\n",p_map);
//sleep(7);
out:
munmap(p_map, page_size);
return
0;
}
/*makefile*/
ifneq ($(kernelrelease),)
obj-m := miscdev_map.o
else
kdir := /lib/modules/$(shell uname -r)/build
pwd := $(shell pwd)
default:
$(make) -c $(kdir) subdirs=$(pwd) modules
rm -r -f .tmp_versions *.mod.c .*.cmd *.o *.symvers
endif
linux裝置驅動程式 字元裝置驅動程式
先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...
Linux裝置驅動程式 字元裝置驅動程式
1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...
裝置驅動程式
首先要問,什麼是裝置驅動程式?又名裝置處理程式,是i o系統的高層與裝置控制器之間的通訊程式 起乙個翻譯的作用 這個東西能幹什麼?簡要來說就是啟動指定裝置,完成上層指定的i o工作 裝置驅動程式的特點 略,書上193頁有 裝置處理方式 為每一類裝置設定乙個程序,專門用於執行這類裝置的i o操作 一對...