Linux内核开发函数详解

MKDEV

功能   将主、次设备号转换成dev_t类型 主设备号 major 次设备号 minor


头文件
定义在<linux/cdev.h>中的宏
MKDEV(int major,int minor)


宏定义
#define MKDEV(major,minor) (((major) << MINORBITS) | (minor))


参数
major为主设备号
minor为次设备号


返回值
成功执行返回dev_t类型的设备编号


注解:
1 Linux设备号


主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各
设备。例如一个嵌入式系统,有两个LED指示灯,LED灯需要独立的打开或者关闭。那么
,可以写一个LED灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号
分别为1和2。这里,次设备号就分别表示两个LED灯。


主设备号相同的设 备是同类设备(使用同一个驱动程序)。
有些设备是对实际存在的物理硬件的抽象,有些设备则是内核自身提供的功能(不依赖于特定的物理硬件,又称为"虚拟设备")。
每个设备在 /dev 目录下都有一个对应的文件(节点)。
可以通过 cat /proc/devices 命令查看当前已经加载的设备驱动程序的主设备号。
内核能够识别的所有设备都记录在源码树下的 documentation/devices.txt 文件中。
在 /dev 目录下除了字符设备和块设备节点之外还通常还会存在:fifo管道、socket、软/硬连接、目录。这些东西没有主/次设备号。


copy_to_user

作用:从内核区中读取数据到用户区
简述:
#include <linux/uaccess.h>
unsigned long copy_to_user(void __user *to, const void *from, unsigned long n);
如果数据拷贝成功,则返回零;否则,返回没有拷贝成功的数据字节数。
*to是用户空间的指针,
*from是内核空间指针,
n表示从内核空间向用户空间拷贝数据的字节数


注解:
1 __user宏
__user宏简单告诉编译器(通过 noderef)不应该解除这个指针的引用(因为在当前地址空间中它是没有意义的)。 


(void __user *)arg 指的是arg值是一个用户空间的地址,不能直接进行拷贝等,要使用例如copy_from_user,copy_to_user等函数。
默认是内核空间,因为这是驱动,是在内核空间运行的。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值