Linux内核驱动学习笔记(一)

学习Linux内核驱动框架记录。

学习文章:
Linux驱动框架
视频

宏内核与微内核的区别

在这里插入图片描述

宏内核:内核是一个大箩筐,什么都可以往里装。哈哈,就是本来可以放在用户态的驱动,为了效率放在了内核里,作为内核的核心模块(调度、内存、驱动、文件系统)。内核与驱动之间的通信是不需要进程间通信(IPC)的,所以运行效率很高,但是一个模块崩了所有模块都坏了,并且体积增大。
在这里插入图片描述

使用宏内核的操作系统:Linux(linux其实算半个,因为驱动程序在用户态和内核态都有分布)、Unix
宏内核的特点
在这里插入图片描述
微内核:将驱动程序放在用户态,不放在内核里,不作为内核的核心模块(调度、内存)。内核与驱动是需要进程间通信的,自然调用的效率就下降了。稳定,驱动等出现问题退出,不会影响内核。如果内核有问题会蓝屏(windows)、死机(linux)。
在这里插入图片描述

使用微内核的操作系统:Windows、微软的Fucshla、Mac。鸿蒙OS也宣称是微内核。
微内核的特点
在这里插入图片描述
混合内核:
实际上Mac和Windows都是混合内核,包括鸿蒙。
在这里插入图片描述

Linux内核的模块机制

虽然Linux是宏内核,但是Linux有模块机制Loadable Kernel Module。从开发的角度讲,对一个模块进行开发时,不需要重新加载,重启内核,使用insmod,rmmod即可。从运行时讲,模块的加载和卸载时动态的、从产品化的角度讲,他的功能是可以根据模块进行裁剪和定制的;

1 源码内模块的编译

主要在两个文件,一个是KConfig,用于给用户配置是否决定编译该模块、静态/动态编译该模块。另一个是Makefile,就是文件本身的编译控制。
KConfig:
tristate表示有三种选择,静态编译(* ),可加载模块(M),和默认。选择M以后就可以使用insmod和rmmod进行动态加载卸载了。
bool表示有两种选择,静态编译和默认。
在这里插入图片描述

Linux驱动框架中 总线、驱动和设备的关系是什么?

总线有例如USB总线、串口总线等。
各子总线系统向内核注册自己;
各驱动向自己属于的总线注册自己;
当设备连接时,设备向总线注册自己。(而此时,我猜应该是发生了一些操作,例如总线匹配对应的驱动,并将该鼠标设备交给该串口驱动管理,进行读写控制。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值