linux的驱动开发——字符设备驱动

1.字符设备驱动

\qquad字符设备驱动是最基本,最常用的设备。它将千差万别的硬件设备采用统一的接口封装起来,屏蔽了硬件的差异,简化了应用层的操作。

2.描述所有字符设备的结构体

\qquad描述所有字符设备的结构体在linux内核目录下的\include\linux\cdev.h中,结构体为:

struct cdev {struct kobject kobj;struct module *owner;const struct file_operations *ops;struct list_head list;dev_t dev;   //设备号unsigned int count;   //设备个数
};

\qquadcdev结构体中的struct file_operations位于linux内核目录下的\include\linux\fs.h中,除了第一个结构体变量是结构体指针,其它的都是函数指针。我们称struct file_operations为提供给应用层的操作方法集。
\qquaddev_t用于唯一的标识设备的号码,也是内核设备管理驱动设备的唯一标识符。其一系列定义如下,所以dev_t是32位无符号整型。设备号:主设备号+次设备号

typedef __kernel_dev_t		dev_t;
typedef __u32 __kernel_dev_t;
typedef unsigned int __u32;
MAJOR(dev_t dev)  //从设备号中提取主设备号
MINOR(dev_t dev)  //从设备号中提取次设备号
MKDEV(int ma,int mi)  //主次设备号合成设备号

3.编写字符设备驱动

3.1为cdev结构体分配空间

\qquadcdev结构体分配内存空间,内核内存空间分配函数cdev_alloc()
\qquad功能:为cdev结构体分配空间
\qquad参数:void
\qquad返回值:成功就返回分配到的结构体地址;失败就返回NULL

struct cdev *cdev_alloc(void)
{struct cdev *p = kzalloc(sizeof(struct cdev), GFP_KERNEL);if (p) {INIT_LIST_HEAD(&p->list);kobject_init(&p->kobj, &ktype_cdev_dynamic);}return p;
}
3.2初始化cdev结构体

\qquadcdev结构体初始化,初始化函数cdev_init()

\qquad功能:初始化cdev设备
\qquad参数:第一个参数:cdev结构体指针;第二个参数:操作方法集的指针
\qquad返回值:void

void cdev_init(struct cdev *cdev, const struct file_operations *fops)
{memset(cdev, 0, sizeof *cdev);INIT_LIST_HEAD(&cdev->list);kobject_init(&cdev->kobj, &ktype_cdev_default);cdev->ops = fops;
}
3.3添加(注册)字符设备到内核中,由内核统一管理

\qquad函数:int cdev_add(struct cdev *p, dev_t dev, unsigned count)
\qquad功能:添加字符设备到内核
\qquad参数:第一个参数:结构体指针;第二个参数:设备号;第三个参数:设备个数
\qquad返回值:成功返回0;失败返回错误码

int cdev_add(struct cdev *p, dev_t dev, unsigned count)
{int error;p->dev = dev;p->count = count;error = kobj_map(cdev_map, dev, count, NULL,exact_match, exact_lock, p);if (error)return error;kobject_get(p->kobj.parent);return 0;
}
3.4删除(注销)字符设备

\qquad函数:void cdev_del(struct cdev *p)
\qquad功能:删除(注销)字符设备

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/483502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nature:初步探索限制饮食如何影响肿瘤生长

来源:生物通近年来,有一些证据表明,饮食干预有助于减缓肿瘤的生长。麻省理工学院的一项新研究分析了小鼠的两种不同饮食,揭示了这些饮食是如何影响癌细胞的,并为为什么限制卡路里可以减缓肿瘤生长提供了解释。该研究检…

爬虫基本库request使用—爬取猫眼电影信息

使用request库和正则表达式爬取猫眼电影信息。 1.爬取目标 猫眼电影TOP100的电影名称,时间,评分,等信息,将结果以文件存储。 2.准备工作 安装request库。 3.代码实现 1 import json2 import requests3 from requests.exceptions i…

【计算机网络复习 数据链路层】3.5.2 ALOHA协议

一、纯ALOHA协议 纯ALOHA协议思想: 不监听信道,不按时间槽发送,随机重发。想发就发。 二、时隙ALOHA协议 时隙ALOHA协议的思想: 把时间分成若干个相同的时间片,所有用户在时间片开始时刻同步接入网络信道&#xff0c…

linux的驱动开发——设备号

1.设备号的获取 \qquad设备号的获取方法:自动分配;指定设备号注册 2.自动分配函数 \qquad函数:int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name) \qquad功能:分配设备号 \qquad参数&…

说好的「机器人出租车」和「自动驾驶汽车」,到底在哪? 原创 我爱至尊宝 科技行者 昨天...

来源:TheNexWeb编译整理:科技行者再有几周就到万圣节了,今年让人害怕的东西可不止是鬼怪、还有更多晦暗不明的新难题。 就拿自动驾驶汽车来说,技术人员直到现在也不清楚怎么才能在完全无需人类介入的情况下实现自主行驶。哪怕是代…

在Windows平台下使用Gitblit搭建Git服务器图文解说

Windows平台下Git服务器搭建 一.java环境变量的设置 下载jdk并配置jdk的环境变量,JAVA_HOME,CLASSPATH以及PATH,最后在DOS窗口输入java -version检验是否配置成功。这里参见jdk环境变量配置相关教程。 二.下载新版Gitblit.下载地址:http://ww…

【计算机网络复习 数据链路层】3.5.3 CSMA协议

CSMA协议3.5.3 CSMA协议一、CSMA协议1.1 1-坚持CSMA1.2 非坚持CSMA1.3 p-坚持CSMA3.5.3 CSMA协议 一、CSMA协议 载波监听多路访问协议CSMA(carrier se&…

linux的系统移植——序言

1.单片机裸机和带有操作系统OS的区别 \qquad裸机有三层,从上至下依次为:应用层、驱动层、硬件层;而带有OS的单片机有四层,从上至下依次为:应用层、内核层、驱动层、硬件层。 2.系统移植学习内容 \qquad四大块&#xf…

“厌氧动物”出现,科学家不清楚代谢方式,或颠覆对生命的认知

来源:科学杂志众所周知,动物的生存的基本条件就是氧气。日常生活中,我们不会感到氧气的存在,因为它是无色无味且无处不在的。可以说,地球上能孕育生命的原因除了有水资源以外,氧气的存在也是重中之重。可当…

【计算机网络复习 数据链路层】3.5.4 CSMA-CD协议

CSMA-CD协议3.5.4 CSMA/CD协议一、CSMA/CD协议二、传播时延对载波监听的影响三、截断二进制指数规避算法四、最小帧长问题3.5.4 CSMA/CD协议 一、CSMA/CD协议 载波监听多点接入/碰撞检测 CSMA/CD(carrier sense multiple access with collision detection&#xf…

GB28181开放流媒体服务平台LiveGBS实际测试时问题排查

背景 在安防监控行业中GB28181协议可以实现获取直播流、录像、报警信息、通道状态等各种信息,基本满足了监控行业中的全部需求。LiveGBS就是一套开放的GB28181流媒体服务平台,提供用户私有化部署、提供标准RESTFul HTTP接口用于二次开发,将视…

6G网络智能内生的思考

来源:6G俱乐部作者:李琴,李唯源,孙晓文,胡玉双:中国移动通信有限公司研究院研究员。孙滔:中国移动通信有限公司研究院主任研究员、网络创新实验室技术经理。面向6G时代,网络将迎来新…

linux的系统移植——交叉编译器

1.为什么要有交叉编译器? \qquad一般电脑是X86架构,而单片机一般不是,比如单片机是ARM架构,那么gcc编译生成的程序只能在X86的架构上运行,而不能在ARM架构上运行,所以需要交叉编译器编译生成能在ARM架构上运…

【计算机网络复习 数据链路层】3.5.5 CSMA-CA协议

CSMA-CA协议CSMA/CA协议一、CSMA/CA协议二、CSMA/CD 与 CSMA/CACSMA/CA协议 一、CSMA/CA协议 载波监听多点接入/碰撞避免 CSMA/CA(carrier sense multiple access with collision avoidance) 发送数据前,先检测信道是否空闲。 空闲则发出…

实验四3

#include "stdafx.h" #include "stdio.h"int main(int argc, char* argv[]) {char a[81];int i;int num0,word0;char c;gets(a);for(i0;(ca[i])!\0;i)if(c )word0;else if(word0){word1;num;}printf("%d\n",num);return 0; } 转载于:https://www…

3 个问题:MIT专家论述关于阻碍AutoML发展的障碍

来源:ScienceAI编译:萝卜皮研究人员希望更多用户友好的机器学习系统将使非专家能够分析大数据——但这样的系统能完全自主吗?麻省理工学院计算机科学家 Kalyan Veeramachaneni 分享了他对自动化机器学习 (AutoML)现状、…

linux的系统移植——交叉编译工具集

1.交叉编译工具集 \qquad在我们安装交叉工具集时,不仅安装了arm-linux-gnueabi-gcc ,还安装了很多工具,它们共同构成交叉编译工具集。 arm-linux-gnueabi-addr2line arm-linux-gnueabi-gcov-tool arm-linux-gnueabi-ar arm-linux…

【计算机网络复习 数据链路层】3.6.1 局域网

局域网基本概念和体系结构局域网基本概念和体系结构一、局域网二、局域网拓扑结构三、局域网介质访问控制方法四、局域网的分类五、MAC子层和LLC子层局域网基本概念和体系结构 一、局域网 局域网 (Local Area Network):简称LAN,…

佐治亚理工学院发文:不要迷信可解释性,小心被误导

来源:AI科技评论编译:王晔校对: 琰琰可解释性对人工智能发展来说至关重要,但在可解释系统的可信度方面,理解其可能带来的负面效应亦同等重要。近日,佐治亚理工学院研究团队发表最新研究,重点讨论了可解释人工智能系统&…

【计算机网络复习 数据链路层】3.6.2 以太网

以太网一、以太网概述二、以太网提供无连接、不可靠的服务三、以太网传输介质与拓扑结构的发展四、10BASE-T以太网五、适配器与MAC地址六、以太网MAC帧七、高速以太网一、以太网概述 以太网(Ethernet)指的是由Xerox公司创建并由Xerox、Intel和DEC公司联…