1、驅動標頭檔案mem_dev.h
#ifndef _memdev_h_
#define _memdev_h_
#ifndef memdev_major
#define memdev_major 238 /*預設的mem的主裝置號*/
#endif
#ifndef memdev_nr_devs
#define memdev_nr_devs 2 /*裝置數*/
#endif
#ifndef memdev_size
#define memdev_size 4096
#endif
/*mem裝置描述結構體*/
struct mem_dev ;
#endif /* _memdev_h_ */
2、驅動源**
filp->f_pos = newpos;
return newpos;
}/*檔案操作結構體*/
static const struct file_operations mem_fops =
;/*裝置驅動模組載入函式*/
static __init int memdev_init(void)
if (result < 0)
return result;
/*初始化cdev結構*/
cdev_init(&cdev, &mem_fops);
cdev.owner = this_module;
cdev.ops = &mem_fops;
/* 註冊字元裝置 */
cdev_add(&cdev, mkdev(mem_major, 0), memdev_nr_devs);
/* 為裝置描述結構分配記憶體*/
mem_devp = kmalloc(memdev_nr_devs * sizeof(struct mem_dev), gfp_kernel);
if (!mem_devp)
memset(mem_devp, 0, sizeof(struct mem_dev));
/*為裝置分配記憶體*/
for (i=0; i < memdev_nr_devs; i++)
return 0;
fail_malloc:
unregister_chrdev_region(devno, 1);
return result;
}/*模組解除安裝函式*/
static __exit void memdev_exit(void)
module_license("gpl");
module_version("v1.0");
module_author("xz@vichip.com.cn");
module_description("char driver module");
module_alias("char driver module");
module_init(memdev_init);
module_exit(memdev_exit);
3、makefile
ifeq ($(kernelrelease),)
kerneldir ?= /lib/modules/$(shell uname -r)/build
pwd := $(shell pwd)
all:
$(make) -c $(kerneldir) m=$(pwd) modules
clean:
$(make) -c $(kerneldir) m=$(pwd) clean
else
obj-m := mem_dev.o
endif
4、應用程式
#include
#include
int main(void)
/*寫入裝置*/
fwrite(buf, sizeof(buf), 1, fp0);
/*重新定位檔案位置(思考沒有該指令,會有何後果)*/
fseek(fp0,0,seek_set);
/*清除buf*/
strcpy(buf,"buf is null!");
printf("buf: %s\n",buf);
/*讀出裝置*/
fread(buf, sizeof(buf), 1, fp0);
/*檢測結果*/
printf("buf: %s\n",buf);
fclose(fp0);
fp0 = null;
return 0;
5、驗證
1、sudo insmod mem_dev.ko
2、sudo mknod /dev/memdev0 c 238 0
sudo mknod /dev/memdev1 c 238 1
sudo chmod 0666 /dev/memdev*
3、4、
./test
5、觀察結果
寫入什麼資料,讀出什麼資料。
驅動 linux裝置驅動 字元裝置驅動開發
preface 前面對linux裝置驅動的相應知識點進行了總結,現在進入實踐階段!linux 裝置驅動入門篇 linux 裝置驅動掃盲篇 fedora下的字元裝置驅動開發 開發乙個基本的字元裝置驅動 在linux核心驅動中,字元裝置是最基本的裝置驅動。字元裝置包括了裝置最基本的操作,如開啟裝置 關閉...
Linux裝置驅動之《字元裝置驅動》
linux裝置中最大的特點就是裝置操作猶如檔案操作一般,在應用層看來,硬體裝置只是乙個裝置檔案。應用程式可以像操作檔案一樣對硬體裝置進行操作,如open close read write 等。下面是乙個字元裝置驅動程式的簡單實現test.c 模組分析 1.初始化裝置驅動的結構體 struct fil...
Linux裝置驅動之字元裝置驅動
一 linux裝置的分類 linux系統將裝置分成三種基本型別,每個模組通常實現為其中某一類 字元模組 塊模組或網路模組。這三種型別有 字元裝置 字元裝置是個能夠像位元組流 類似檔案 一樣被訪問的裝置,由字元裝置驅動程式來實現這種特性。字元裝置可以通過檔案系統節點來訪問,比如 dev tty1等。這...