CSDN话题挑战赛第1期
活动详情地址:第1期话题PK赛
参赛话题:汇编知识分享
话题描述:我们的计算机知识就像一座金字塔,底层是数学,上面是数字电路,然后是汇编,再往上是操作系统、网络,数据库、高级编程语言、框架等等…我们不可能精通这个金子塔的每一层, 但是想走的更远就必须要了解这个金字塔的底层。因此,学习汇编并不是为了用汇编在应用层设计程序,而是为了深刻理解机器运行程序的机理。就像对于人来说不能没有常识一样,尽管常识不能直接挣钱吃饭,但它影响谈吐,影响你的判断力和决断力,决定着你接受新事物和新知识的程度。汇编就是计算机语言里面的常识和基础。
大家好,我是出现一片乱码。
☀️作者简介:出现一片乱码
🐋个人主页:
🎁系列专栏:
🌱每日一句:
字符设备注册
内核部分适用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,该结构必须加上所叙地被初始化并添加到系统中
CSDN话题挑战赛第1期
活动详情地址:第1期话题PK赛