网络设备驱动
571d5de1f5a053f5c86199ac456cb1a43eb166bd6254c6c81e96bfa55ef337b3c98deb0075c7d2ebd9162b0d327c53b8a754f590084426675bd8a16468a7d488842a206efa22d4b03cf50d7ddf87c86e1c136f3eaec037a579f31ab106256c803b13f304eff4df9296d6d1d38af0d0b4e020c976499ca90d8f8c477c24f533bf6da8891db03cd7c78a08b060ebe3cc0a6444049a3d7b826653abbffc60b28168b664c723c2c14bb46ea4480c20986d8967dabbfa807ce4b464efaedfb7bc7c5f13aa913ad52e776a93c678fab19a4c4bdf29242309236912891455390f2c6e7436432f4b83b27e93e1a251401cd34ae1ec231c46c62b24eae ...
块设备驱动
一、块设备驱动引入1.1 磁盘读写磁盘的读写慢在“磁头”的机械结构的定位上面。从一个“磁头”的某“柱面”某“扇区”读到数据后(步骤 R0),跳到另一个“磁头”的某“柱面”的某“扇区”去写(步骤 W0),接着再跳回原“磁头”相同柱面的下一个“扇区”去读(步骤R1)。
若按“字符设备”中的“opne”,”read”,”write”方式,则总体效率在硬盘上会非常低。字符设备读写:“R0”–>”W0”–>”R1” —> “磁头”跳转 2 次。调整顺序优化:“R0”–>”R1”–>”W0” —> “磁头”跳转 1 次。
总结:先不执行读/写操作,而是放入队列,优化后再执行。若按“字符设备驱动”那样的读写步骤会在硬盘上反复横跳,整体效率会非常低。所以有必要引入“优化过程”。即:读/写操作先不执行,先放到某个“队列”中(调整顺序优化),最后再执行磁盘真正的读/写操作
1.2 Flash读写Flash分为很多“块”,“块”里有很多的扇区。Flash 要先擦除再写, 擦除是整“块”进行的。若现在要写同一“块”的“扇区 0”和“扇区 1”。 ...
gpio子系统
一、GPIO子系统的作用GPIO子系统既能支持芯片本身的GPIO,也能支持扩展的GPIO。提供统一、简便的访问接口,实现:输入、输出、中断。
芯片内部有很多引脚,这些引脚可以接到GPIO模块,也可以接到I2C等模块。通过Pinctrl子系统来选择引脚的功能(mux function)、配置引脚:
当一个引脚被复用为GPIO功能时,我们可以去设置它的方向、设置/读取它的值。GPIO名为”General Purpose Input/Output”,通用目的输入/输出,就是常用的引脚。GPIO可能是芯片自带的,也可能通过I2C、SPI接口扩展:
GPIO有一些通用功能、通用属性。
通用功能:
可以设为输出:让它输出高低电平;
可以设为输入,读取引脚当前电平;
可以用来触发中断
对于芯片自带的GPIO,它的访问时很快的,可以在获得spinlocks的情况下操作它。
但是,对于通过I2C、SPI等接口扩展的GPIO,访问它们时可能导致休眠,所以这些”GPIO Expander”就不能在获得spinlocks的情况下使用。
通用属性:
Active-High ...
pinctrl子系统
一、Pinctrl子系统使用示例1.1 要做什么
查看原理图确定使用哪些引脚:比如pinA、pinB
生成pincontroller设备树信息
选择功能:比如把pinA配置为I2C_SCL、把pinB配置为I2C_SDA
配置:比如把pinA、pinB配置为open drain
使用pincontroller设备树信息:比如在i2c节点里定义”pinctrl-names”、”pinctrl-0”
1.2 pincontroller设备树生成pincontroller设备树信息,有3中方法:
有些芯片有图形化的工具,可以点点鼠标就可以配置引脚信息,得到pincontroller中的信息
有些芯片,只能看厂家给的设备树文档或者参考设备树的例子
最差的就是需要阅读驱动代码才能构造设备树信息。
123456789101112&iomuxc { pinctrl-names = "default"; pinctrl-0 = <&BOARD_InitPins>; imx6ull-board { ...
RK3399使用日志
1、fbtft屏幕出错向往常一样想在RK3399上点亮st7789v屏幕,但是报错如下:
从信息来看应该是在:drivers/staging/fbtf/fbtft-core.c –> fbtft_probe_common中出错,最终定位到:
我们的内核是开启了DMA的,也即开启了宏:CONFIG_HAS_DMA,所以问题出在DMA空间申请失败,手动关闭LCD dma,重新编译烧录即可。这里没有深究为什么DMA申请空间失败。







