字节设备注册的驱动开发(基于汇编语言)_汇编语言开发内核驱动

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

内核部分适用struct cdev结构来表示字符设备

在内核调用设备的操作之前,必须要分配一个或多个struct cdev结构。我们的代码应包含
分配和初始化cdev结构有两种方法,
如果想运行时获取一个独立的cdev结构,则应该编写下面代码:

struct cdev \* my_cdev = cdev\_alloc();
my_cdev->ops = &my_fops;

这时,就可以将cdev结构嵌入到自己的设备特定的结构中,scull也是这样做的,这种情况下,我们需要用下main的代码来初始化已分配到的结构:
void cdev_init(struct cdev *cdev,struct file_operations *fops);另外,还有一个struct cdev的字段需要初始化。和file_operations结构类似,struct cdev也有一个所有者字段,应被设置位THIS_MODULE.
在cdev结构设置好之后,最后的步骤是通过下面的调用告诉结构信息:

 int cdev\_add(struct cdev \*cdev,dev\_t num,unsigned int count);
 dev是cdev结构,
 num是该设备对应的第一个设备编号,
 count是应该和该设备关联的设备编号的数量。
 count经常取1,
 但是在某些情况下,会有多个设备编号对应于特定的设备。例如,考虑SCSI磁带驱动程序,它通过每个物理设备的多个次设备号来允许用户空间选择不同的操作模式(比如密度)

在适用cdev_add是需要记住一点。首先,这个调用可能会失败。如果它放回一个负错误码,则设备不会添加到系统中。但这个调用几乎总会成功返回,只要cdev_add返回就可以确定设备好的,操作时被内核调用。在驱动程序还没准备好处理设备上的操作时,就不会调用cdev_add。

Scull的设备注册

在scull内部,它通过struct scul_dev的结构表示每个设备,该结构定义如下:

struct scull\_dev{
	struct scull\_qset \*data;   //指向第一个量子集的指针
	int quantum;      ///当前量子大小
	int qset;   //当前数组的大小
	unsigned long size;   //保存在其中的数据总量
	unsingned int access_key;  //由sculluid和scullpriv使用
	struct semaphore sem;   //互斥信号量
	struct cdev cdev   //字符设备结构
}

即内核和设备件的接口struct cdev,该结构必须加上所叙地被初始化并添加到系统中,scull中完成这一工作的代码

static void scull\_setup\_cdev(struct_major,scull_minor +index){
	cdev\_init(&dev->cdev,&scull_fops);
	dev->cdev.owner = THIS_MODULE;
	dev->cdev.ops = &scull_fops;
	err = cdev\_add(&dev->cdev,devno,1);
	if(err)
	prinkt(KERN_NOTICE \*Error %d adding scull%d", err,index);
}

应为cdev结构被嵌入到了struct scull_dev中,因此必须调用cdev_init来执行该结构的初始化


补充:汇编语言是什么

汇编语言是直接面向处理器(Processor)的程序设计语言。处理器是在指令的控制下工作的,处理器可以识别的每一条指令称为机器指令。每一种处理器都有自己可以识别的一整套指令,称为指令集。处理器执行指令时,根据不同的指令采取不同的动作,完成不同的功能,既可以改变自己内部的工作状态,也能控制其它外围电路的工作状态。

总结

提示:使用汇编解决的好处或汇编知识模块的总结

  • 在内核调用设备的操作之前,必须要分配一个或多个struct cdev结构
  • 汇编语言是直接面向处理器(Processor)的程序设计语言。处理器是在指令的控制下工作的,处理器可以识别的每一条指令称为机器指令
  • 即内核和设备件的接口struct cdev,该结构必须加上所叙地被初始化并添加到系统中

本期内容就结束了,如果内容有误,麻烦大家评论区指出!

如有疑问可以在评论区留言!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

片转存中…(img-fZ7ezohP-1713396178882)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值