一、驅動源**
#include
#include
#include
#include
#include
static int hello_major = 248; // 主裝置號
static int hello_minor = 0; // 次裝置號
static int number_of_devices = 1; // 裝置的數量
struct cdev *cdev; //動態分配字元裝置
dev_t dev = 0;
// struct inode:物理上的裝置資訊,只有乙個。
static int hello_open (struct inode *inode, struct file *file)
static int hello_release (struct inode *inode, struct file *file)
struct file_operations hello_fops = ;
static __init char_driver_init(void)
cdev = cdev_alloc(); // 動態分配字元裝置
cdev_init(cdev, &hello_fops); // 初始化字元裝置
cdev->owner = this_module;
//cdev->ops = &hello_fops;
result = cdev_add(cdev, dev, 1); // 註冊字元裝置
if (result)
printk (kern_info "error %d adding char_device", result);
printk (kern_info "char device registered ...\n");
return 0;
}static __exit char_driver_exit(void)
module_init(char_driver_init);
module_exit(char_driver_exit);
module_license("gpl");
module_version("v1.0");
module_author("xz@vichip.com.cn");
module_description("char driver module");
module_alias("char driver module");
二、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 := char_reg.o
endif
三、測試驅動程式
#include
#include
#include
#include
#include
#define dev_name "/dev/hello"
int main (void)
printf("/dev/hello opened ...\n");
close(fd);
printf("/dev/hello closed ...\n");
return 0;
}四、驗證驅動
1、建立裝置節點
sudo mknod /dev/hello c 248 0
chmod 0666 /dev/hello
2、執行應用程式
gcc test.c -o test
./test
3、dmesg檢視核心訊息
Linux 之動態分配記憶體方式
1 malloc free 函式 malloc 函式和free 函式是在堆中申請或釋放記憶體空間的,其函式宣告如下 include extern void malloc size t size extern void free void ptr malloc 函式在堆中申請分配乙個長度為 size位...
c 基礎之動態分配記憶體之malloc free
系統中存在乙個記憶體管理器 mm,memory manager 它負責管理已退閒置記憶體。它被設計用於解決此類問題。mm提供的服務 應用程式可以向mm申請 借出 一塊指定大小的記憶體,用完之後再釋放 還回 例如 include void ptr malloc 1024 申請,從mm借出記憶體 fre...
C 之儲存空間的動態分配和釋放
很多時候,我們需要根據問題的實際規模來定義陣列的大小,即確定實際需要使用的儲存空間的大小,這個時候就要用到動態申請 釋放儲存空間的方法。一般情況下,變數儲存空間的分配和釋放是由系統自動完成的,不需要我們的干預。系統對自動分配記憶體的變數的訪問方式有兩種 在程式執行中動態申請 釋放記憶體的變數,只能通...