驱动笔记 - 字符设备常用函数

字符设备:

静态申请设备号
int register_chrdev_region(dev_t from, unsigned count,const char *name)
申请使用从from开始的count个设备号(主设备号不变,次设备号增加)
from:希望申请使用的设备号
count:希望申请使用的设备号数目
name:设备文件

动态分配设备号
int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)

dev:分配到的设备号
baseminor:起始次设备号
count:需要分配的设备号数目
name:设备文件

注销设备号
void unregister_chrdev_region(dev_t from,unsigned count)

mknod filename type major minor

字符设备注册(分配空间)
struct cdev *cdev_alloc(void)

字符设备注册(初始化)
void cdev_init(struct cdev *cdev, const struct file_operations *fops)

字符设备注册(添加)
int cdev_add(struct cdev *p, dev_t dev, unsigned count)

count:添加的设备个数

字符设备注销
int cdev_del(struct cdev *p)

分配设备号

MKDEV(int major, int minor);

从设备号获取主设备号

MAJOR(dev_t dev);

从设备号获取次设备号
MINOR(dev_t dev);

从用户空间获取数据(自带权限检查)

int copy_from_user(void *to, const void __user *from, int n)

向用户空间发送数据(自带权限检查)

int copy_to_user(void __user *to, const void *from, int n)

创建设备节点

mknod filename type major minor

查看设备信息

cat /proc/devices

时间: 2024-10-22 03:50:38

驱动笔记 - 字符设备常用函数的相关文章

驱动笔记 - 混杂设备常用函数

#include <linux/miscdevice.h>混杂设备:主设备号为10的字符设备struct miscdevice{ int minor; //次设备号 const char *name; const struct file_operations *fops; struct list_head list; struct device *parent; struct device *this_device;} 混杂设备注册int misc_register (struct miscd

驱动笔记 - 字符设备范例

#include <linux/types.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/module.h> #include <linux/kdev_t.h> #include <linux/fs.h> #include <linux/cdev.h> #include <linux/moduleparam.h> #in

Samsung_tiny4412(笔记)--&gt;字符设备驱动基本操作及调用流程

/*********************************************************************************** * * Samsung_tiny4412(笔记)-->字符设备驱动基本操作及调用流程 * * 声明: * 以下所有的shell命令都是在root权限下运行的; * * 2015-3-7 阴 深圳 尚观 Sbin 曾剑锋 *******************************************************

【转】深入浅出:Linux设备驱动之字符设备驱动

深入浅出:Linux设备驱动之字符设备驱动 一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用驱动程序: 字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面向流的设备,常见的字符设备有鼠标.键盘.串口.控制台和LED设备等. 块设备:是指可以从设备的任意位置读取一定长度数据的设备.块设备包括硬盘.磁盘.U盘和SD卡等. 每一个字符设备或块设备都在/dev目录下对应一个设备文件.linux用户程序通过设备文件(或称

《驱动学习 - 字符设备驱动》

1.1字符设备驱动基础 字符设备驱动:设备对数据的处理是按照字节流的形式进行的. 在linux中,“一切皆文件”(除了网络设备),这表示设备最终都会体现为一个文件.设备文件通常位于/dev目录下. 内核通常用主设备号区别一类设备,次设备号用于区分同一类设备的不同个人或不同分区. 手动创建设备文件 mknod /dev/vser0 c 256 0 mknod是make node的缩写.用于创建一个节点(设备文件也叫设备节点).在linux系统中,一个节点代表一个文件. 原文地址:https://w

LDD3阅读笔记-字符设备驱动

主要开发流程介绍 module_init宏和module_exit宏 当模块装载时需要调用module_init宏指定的函数,卸载时需要调用 module_exit宏指定的函数 以下是简单的init流程: 初始化设备 初始化file_operation 获取字符设备号 注册字符设备 当卸载模块时,需要释放申请的设备号. 主设备号和次设备号 对字符设备的访问是通过文件系统内的设备名称进行的.那些名称被称为特殊 文件.设备文件,或者简单称为文件系统树的节点,他们通常位于/dev目录. 通常而言,主设

Linux设备驱动之字符设备驱动

一.linux系统将设备分为3类:字符设备.块设备.网络设备. 应用程序调用的流程框图: 三种设备的定义分别如下, 字符设备:只能一个字节一个字节的读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后顺序进行.字符设备是面向流的设备,常见的字符设备如鼠标.键盘.串口.控制台.LED等. 块设备:是指可以从设备的任意位置读取一定长度的数据设备.块设备如硬盘.磁盘.U盘和SD卡等存储设备. 网络设备:网络设备比较特殊,不在是对文件进行操作,而是由专门的网络接口来实现.应用程序不能直接访

linux设备驱动之字符设备驱动模型(2)

在上一篇中我们已经了解了字符设备驱动的原理,也了解了应用层调用内核函数的机制,但是我们每次操作设备,都必须首先通过mknod命令创建一个设备文件名,比如说我们要打开u盘,硬盘等这些设备,难道我们还要自己创建,就如同刘老师常说的一句话,这也太山寨了吧,所以我们今天我们来点比较专业的,让函数帮我们自动创建: 在Linux 下,设备和驱动通常都需要挂接在一种总线上,总线有PCI.USB.I2C.SPI 等等,总线是处理器和设备之间的通道,在设备模型中,所有的设备都通过总线相连,一总线来管理设备和驱动函

深入浅出~Linux设备驱动之字符设备驱动

一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用驱动程序: 字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面向流的设备,常见的字符设备有鼠标.键盘.串口.控制台和LED设备等. 块设备:是指可以从设备的任意位置读取一定长度数据的设备.块设备包括硬盘.磁盘.U盘和SD卡等. 每一个字符设备或块设备都在/dev目录下对应一个设备文件.linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作字符设备和块设备