Linux裝置驅動之字元裝置(三)

2021-07-13 21:47:45 字數 2141 閱讀 7276

在linux裝置驅動之字元裝置(一)中學習了裝置號的構成,裝置號的申請與釋放。在linux裝置驅動之字元裝置(二)中學習了如何建立乙個字元裝置,初始化,已經註冊到系統中和最後釋放該字元裝置。

本節將結合前兩節學到的知道,編寫乙個簡單的字元裝置驅動。最後總結一下字元裝置驅動的模型。

#include 

#include

#include

#include

static

int major = 0;

static dev_t ndev;

//static struct cdev char_dev; //靜態分配

static

struct cdev* char_dev; //動態分配

static ssize_t char_read(struct file *file, char __user *buf, size_t size, loff_t *offset)

static

int char_open(struct inode *node, struct file *filp)

//檔案操作函式集

static

struct file_operations char_ops=;

static

int char_dev_init(void)

}else

//主裝置號不存在,動態分配

}char_dev = cdev_alloc();//動態分配cdev

if(char_dev)

//cdev_init(&char_dev, &char_ops);//初始化cdev,以及設定操作函式集

cdev_add(char_dev, ndev, 1);

return0;}

static

void char_dev_exit(void)

module_init(char_dev_init);

module_exit(char_dev_exit);

module_license("gpl");

注: 注釋掉的是靜態分配cdev過程

insmod demo_char_dev.ko

cat  /prco/devices

root@test_home

:/data

# cat /proc/devices

character

devices:

....

189 usb_device

237 char_dev

238 audio_dsp_mem

可以看到系統給分配的主裝置號為237,所以下一步就是根據主裝置號建立裝置節點。

root@test_home

:/data

# mknod /dev/mychardev c 237 0

root@test_home

:/data

# ls /dev/mychardev

/dev/mychardev

#include 

#include

#include

#include

#include

int main()

read(fd, &buf, 1);

close(fd);

return

0;}

測試結果如下:

root@test_home

:/data

# ./chardev_test

root@test_home

:/data

# dmesg | grep char_dev

[ 9921.636518] c7 char_dev: char_open!

[ 9921.639924] c7 char_dev: char_read!

可以看到是進入了open函式和read函式。

Linux裝置驅動之《字元裝置驅動》

linux裝置中最大的特點就是裝置操作猶如檔案操作一般,在應用層看來,硬體裝置只是乙個裝置檔案。應用程式可以像操作檔案一樣對硬體裝置進行操作,如open close read write 等。下面是乙個字元裝置驅動程式的簡單實現test.c 模組分析 1.初始化裝置驅動的結構體 struct fil...

Linux裝置驅動之字元裝置驅動

一 linux裝置的分類 linux系統將裝置分成三種基本型別,每個模組通常實現為其中某一類 字元模組 塊模組或網路模組。這三種型別有 字元裝置 字元裝置是個能夠像位元組流 類似檔案 一樣被訪問的裝置,由字元裝置驅動程式來實現這種特性。字元裝置可以通過檔案系統節點來訪問,比如 dev tty1等。這...

驅動 linux裝置驅動 字元裝置驅動開發

preface 前面對linux裝置驅動的相應知識點進行了總結,現在進入實踐階段!linux 裝置驅動入門篇 linux 裝置驅動掃盲篇 fedora下的字元裝置驅動開發 開發乙個基本的字元裝置驅動 在linux核心驅動中,字元裝置是最基本的裝置驅動。字元裝置包括了裝置最基本的操作,如開啟裝置 關閉...