Linux驅動開發之動態分配字元裝置 註冊

2021-08-20 22:43:34 字數 2085 閱讀 9826

一、驅動源**

#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("[email protected]");

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 之儲存空間的動態分配和釋放

很多時候,我們需要根據問題的實際規模來定義陣列的大小,即確定實際需要使用的儲存空間的大小,這個時候就要用到動態申請 釋放儲存空間的方法。一般情況下,變數儲存空間的分配和釋放是由系統自動完成的,不需要我們的干預。系統對自動分配記憶體的變數的訪問方式有兩種 在程式執行中動態申請 釋放記憶體的變數,只能通...