块设备驱动
一、块设备驱动引入1.1 磁盘读写磁盘的读写慢在“磁头”的机械结构的定位上面。从一个“磁头”的某“柱面”某“扇区”读到数据后(步骤 R0),跳到另一个“磁头”的某“柱面”的某“扇区”去写(步骤 W0),接着再跳回原“磁头”相同柱面的下一个“扇区”去读(步骤R1)。
若按“字符设备”中的“opne”,”read”,”write”方式,则总体效率在硬盘上会非常低。字符设备读写:“R0”–>”W0”–>”R1” —> “磁头”跳转 2 次。调整顺序优化:“R0”–>”R1”–>”W0” —> “磁头”跳转 1 次。
总结:先不执行读/写操作,而是放入队列,优化后再执行。若按“字符设备驱动”那样的读写步骤会在硬盘上反复横跳,整体效率会非常低。所以有必要引入“优化过程”。即:读/写操作先不执行,先放到某个“队列”中(调整顺序优化),最后再执行磁盘真正的读/写操作
1.2 Flash读写Flash分为很多“块”,“块”里有很多的扇区。Flash 要先擦除再写, 擦除是整“块”进行的。若现在要写同一“块”的“扇区 0”和“扇区 1”。 ...
gpio子系统
571d5de1f5a053f5c86199ac456cb1a43eb166bd6254c6c81e96bfa55ef337b30ef7fffad4ccf2147b4986dfb39f6dbe375cd01e0f025e0b1a01773e5c43df500300e3c436c06e35d29910270292f1a78b2fa3c15ba2164fb766f487b4e1d069d6ed014fa526af67e6f4ce8d29104a0a7c85771da6e7d517d34767b6129be92faee8306664856a367a305371394f07e7456df7612ebf45c24e00045fc5b2e1460999ff3ccf6d844caa5b7cbf66aed10ea5e4c096e552d9a000c1fcf9a8b5cb4b88f23893f6b73c23788838e3168a5a360f398238f38e278c47a2f21c10b27a41914966c0400c7c706ece176f47ceb670166f405b9ff107c01 ...
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申请空间失败。
深入浅出C指针
1. 指针基本介绍
2. 指针类型
3. 指针的指针
4. 传值与传引用
5. 指针与数组
6. 数组作为函数参数
7. 指针和字符数组
8. 指针和多维数组
9. 指针和动态内存
10. 函数返回指针从栈底向上传一个局部变量或者一个局部变量的地址是可以的,但是反过来不行;如果函数要返回一个指针,要用堆。因为栈是自动释放的,而堆需要手动释放。