【梦想终会实现】Linux驱动学习1

1 、实际工作中块设备和网络设备驱动专业性比较高,基本都是厂家给你写好的,基本不需要修改,主要是字符设备的配置。

2、非标准的编写,与标准的移植(LED、蜂鸣器等)。

狭义上驱动和广义上的驱动:

广义上的驱动包含裸机驱动,即操作硬件部分代码。

狭义驱动就是专指操作系统中用来操控硬件的逻辑部分代码。

狭义上驱动:先了解要学习的平台是什么,windows下驱动 or linux下驱动 or android驱动,这个驱动是非常依赖平台的,要看这个平台采用什么样的编译方式,区分于裸机驱动。linux驱动仅是庞大linux系统中很小的一部分,除此外还有linux文件系统管理等等。应用-->C库-->API-->驱动,API与驱动之间分了各层级,重点学习这中间各层级间的关系, 驱动往上是API,往下是寄存器。要有框架思维!!!类似于中间件开发时的框架思维。一定要建立Linux驱动学习框架,不然就是裸机驱动了!

3、微内核和宏内核

windows是个典型的微内核,各组件间通过IPC通信,一个模块失效不影响另一个服务。

linux兼具微内核和宏内核的特点,它的代码都是集成在一起的,因此是个大的宏内核,但是又可以通过宏开关来裁剪(静态模块化),且驱动是以.ko的形式存在,可以动态注册与删除(动态模块化)。

为什么推荐使用微内核?

首先是方便维护,每个层级之间都有专门的开发人员维护,方便公司统一管理。微内核各层级间使用IPC通信,不会出现接口空实现导致的Coredump(对不存在的地址进行解引用等)。IPC是微内核中十分重要的点!!

其次是宏内核模块间的依赖比较大,各模块间直接使用全局变量调用的形式,若出现Coredump会导致整个系统崩溃!

4、Linux驱动中设备划分

驱动分类是由驱动本身决定的,而非由软件决定的。

字符设备:“字节”设备,软件操作时以字节为单位进行的,典型的如LCD、串口、LED、蜂鸣器、触摸屏等等。

块设备:以块大小来操作的,一个块可能4个字节,8个字节......块大小是由硬件决定的,每个硬件块大小都是不一样的。一个4G的U盘价格和一个4G的内存的价格不同,一个按照内存寻址一个按照块寻址。块设备一般都是写好的。

网络设备:是一个独立的体系,为了支持API中的socket相关的函数,一般不用。

现实中有大量的非标准设备,大部分都是字符设备。

5、驱动的安全性

驱动代码量占内核总代码量的1/3。Linux内核中代码都是集成在一起的,内部会直接调用,若驱动代码存在异常,则会直接回导致系统崩溃。

驱动设计要考虑通用性与安全性:入口参数防护、加锁防护、指针的初始化等等。

6、

MODULE_LICENSE("GPL");

GPL全称是GNU General Public License,即指明该模块支持GNU通用公共安全许可证,是一个被Linux社区广泛接受的许可证。

如果不声明许可证或者声明了一个其他的许可证,则该模块可能会被内核拒绝加载,因此内核加载器会检查模块的许可证以保证与内核的许可证兼容。

除GPL外还有哪些许可证?如BSD、MIT、MPL等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱笑的七小沐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值