linux device driver 3 简单的字符驱动

来源:互联网 发布:广告机分屏编辑软件 编辑:程序博客网 时间:2024/05/17 23:08

p { margin-bottom: 0.08in; }

ldd 第三章

鉴于书中附带代码是综合性的,虽然很简单,但是对于初学者来说还是有点复杂,

我把作者的例子进行了一些简化,更有利于看清最重要的东西。也有利于一步步的学习,循序渐进。

首先,了解一下涉及到数据结构。

 

 

我们简化一下ldd中的设计,如下,

下面,我简要的介绍一下,例子中的函数的作用:

function

mydev_init_module:

申请设备号 register_chrdev_region or alloc_chrdev_region

分配,初始化设备,并添加设备

分配:静态或者 cdev_alloc

初始化:cdev_init

添加:cdev_add

mydev_clearup_module :

释放分配的用于存放数据的内存

删除设备cdev_del

释放“设备结构体”所占内存

释放申请的设备号

 

mydev_llseek:

修改文件的当前的读写位置(f_pos)

mydev_open:

保存”设备“指针到文件结构体的private_data

mydev_release:

open 的逆操作

mydev_read:

将写入的数据按照一定规则读出

mydev_write

讲用户数据保存到某个位置(内存或者硬件设备)

下面是简化后的代码结构

macro

MYDEBUG

ELEMENT_SIZE

 

struct

dataelem

mydev

 

variable

mydev0

mydev_major

mydev_minor

element_size

mydev_ops

mydev_init_module

mydev_clearup_module

 

function

mydev_init_module

mydev_setup_cdev

mydev_clearup_module

mydev_free_mem

mydev_llseek

mydev_open

mydev_release

mydev_read

mydev_write

 

说明:本例子为了更突出重点,而很简陋,重复打开设备的结果是不可预料的

 

 

源码:

 

操作过程:

 

# make //生成mydev0.ko

# insmod mydev0.ko //插入生成的模块

# cat /proc/devices //查看分配的主设备号

...

250 mydev <-----我们的模块

251 hidraw

252 usbmon

...

# mknod /dev/mydev0 c 250 0 //创建设备结点

# echo “” > /var/log/messages //清空记录方便查看

# echo “ I love you Linux” >/dev/mydev0 //向设备中写入数据

#cat /dev/mydev0 //从设备中读出数据

#cat /var/log/messages //查看打印出来的调试信息

 

原创粉丝点击