6.3 Linux 驱动开发 设备驱动

一、主设备号和次设备号的用途?

主设备号:标识设备类型;并区分不同的设备驱动程序。

次设备号:标识同一类型设备中的不同个体。驱动程序依据次设备号来设置具体的设备。

二、字符驱动设备怎样创建设备文件?

1、手动创建

mknod /dev/led c 250 0	//指令 设备节点 字符设备类型 主设备号 次设备号

2、自动创建

在字符设备驱动程序里面使用 class_create 和 device_create 来创建设备类和设备实例。

三、设备驱动程序如何注册一个字符设备?

dev.cdev.owner = THIS_MODULE;
cdev_init(&dev.cdev, &device_fops);   /* 初始化 cdev 结构体变量 */
cdev_add(&dev.cdev, dev.devid, 1); /* 添加字符设备到内核 */
void cdev_init(struct cdev *cdev, struct file_operations *fops)
//该注册函数可以将cdev结构嵌入到自己的设备特定的结构中。cdev是一个指向结构体cdev的指针,而fops是指向一个类似于file_operations结构(可以是file_operations结构,但不限于该结构)的指针。

四、/dev/ 下面的设备文件是怎么创建出来的?

1、mknod

2、udev 机制中的 class_create()、device_create()

五、Linux设备中字符设备和块设备有什么主要区别?分别举例。

两者本身并没有严格区分,只是基于功能进行了分类。

字符设备:提供连续的数据流,应用程序可以按顺序读取,但不支持随机存取,这类设备按字节来传输数据。

块设备:应用程序可以随机访问设备数据,数据的读写只能按块(通常是 512 字节)的整数倍进行。

六、驱动中操作物理绝对地址为什么要先 ioremap?

ioremp 是内核中用来将外设寄存器物理地址映射到主存,。为什么非要映射呢,因为保护模式下的 cpu 只认虚拟地址,不认物理地址,给它物理地址它并不帮你做事,所以你要操作外设上的寄存器必须先映射到虚拟内存空间,拿着虚拟地址去跟 cpu 对接,从而操作寄存器。

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++/嵌入式开发 秋招面经 文章被收录于专栏

一名985硕,在25年秋招中斩获多个C++/嵌入式开发Offer。本专栏将分享我的面经,涵盖C/C++、操作系统、计算机网络、ARM体系与架构、Linux应用/驱动开发、Qt、通信协议及开发工具链等核心内容。

全部评论

相关推荐

04-24 18:13
南京大学 Java
不吃酸菜血肠:看力竭了
点赞 评论 收藏
分享
04-28 15:42
郑州大学 C++
找工作勤劳小蜜蜂:网易这几个月在大面积裁员,外包岗全退,今年网易收缩严重,建议慎重考虑网易
点赞 评论 收藏
分享
评论
4
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务