1:何为杂项、何为驱动、Linux下驱动有什么特点
不想做分类的设备,统一叫作杂项
驱动:使得硬件正常工作的代码
在面试过程中,没有底气,尝试回答问题
Linux下的驱动有什么特点:
最终把 设备抽象成文件!
而我门驱动开发工程师就是在内核层描述这个设备文件的 底层操作!
打开是怎样
关闭是怎样
misc\_register\(\); misc\_unregister\(\);
Linux下的写出来一套接口
适用于任何的Linux平台
32\*大组 \+ 8\*小组 \+编号 == 瑞芯微芯片
6:GPIO子系统如何申请一个 引脚,不申请行不行?
gpio\_dircetion\_output/input\(\)
9:如果我想让 GPIO工作在 复用模式,是否可以用GPIO子系统开发
I2C UART\-> PinCtrl \->设备树里面用
二:Linux2.6的驱动开发
更加标准
设备号范围广泛
注册设备完毕后不会生成设备文件!
alloc\_chrdev\_region\(\);
cdev\_init\(\);
cdev\_add\(\);
cdev\_del
三:多节点和内核接口
我想用一个驱动 生成多个设备文件
而且这些文件有独立性
提高了代码的效率 降低重复性
read 和 write这里面最重要就是
你要理解里面的传参: buf size
buf:
copy\_from\_user\(\)//在 write
size:
参考长度
四:设备树
只是存放设备信息的文本文件,后缀 dts
提取出一个驱动的设备信息层,使得驱动更加具备通用性!
这样更方便驱动开发工程师做移植工作!
arch/arm\(64\)/boot/dts/rockchip
最终生成 dtb文件 \->二进制文件
不可以,因为连CPU的信息都在设备树
如果原生内核就不支持设备树,那么内核可以独立运行!
追加只有一个意义:
裁剪内核驱动、或者方便驱动移植!
五:平台设备总线
方便驱动开发工程师裁剪内核
使用平台设备总线编写的驱动,加载到内核如果没有设备树
则会挂载,我们在裁剪内核就不需要考虑驱动是否需要移除
驱动不移除,内核也不会报错和异常。
除此之外,我们可以添加多个设备的驱动,后期通过动态修改设备树
使其支持不同的设备
香橙派5B做个实验
最开始的意义:
为了更好的管理内核驱动,以及降低内核的臃肿性
平台设备总线的设备层 就是 设备树\!
只负责提供设备的信息
compatible:
只要有一个名字匹配成功
资源自动匹配绑定到一起了
platform\_driver\_register\(\);
新入口:probe
新出口: remove
匹配的名字