
linux设备驱动程序
linux设备驱动程序
小小城御园
生命在于折腾,知识在于积累
展开
-
Linux内核启动及根文件系统加载过程
Linux内核启动及文件系统加载过程当u-boot开始执行bootcmd命令,就进入Linux内核启动阶段,与u-boot类似,普通Linux内核的启动过程也可以分为两个阶段,但针对压缩了的内核如uImage就要包括内核自解压过程了。本文以linux-2.6.37版源码为例分三个阶段来描述内核启动全过程。第一阶段为内核自解压过程,第二阶段主要工作是设置ARM处理器工作模式、使能MMU、设置一级...转载 2020-02-17 22:27:56 · 1586 阅读 · 0 评论 -
kthread_work和kthread_worker机制
最近在看spi的驱动,驱动中有一个队列化机制,看起来不是很懂,所以就整理了下这块的内容,即kthread_work队列化机制,其实也可以理解为一种内核线程机制。我们首先来分析一下下面两个结构体kthread_worker 和 kthread_work 。结构体分析kthread_worker数据结构定义在:include/linux/kthread.hstruct kth...转载 2020-02-14 23:00:55 · 1851 阅读 · 0 评论 -
w25qxx的三字节地址模式和四字节地址模式
我们知道w25qxx支持3-Byte和4-Byte模式,其实就是地址空间不同,对应的空间大小不同,3-Byte空间最大只达到128MbW25Q256FV提供了两种地址模式,可用于指定存储器阵列中的任何数据字节。 3字节地址模式向后兼容仅支持最大128Mb位数据的较早版本的串行闪存。为了在3字节地址模式下寻址256M位或更多数据,除3字节地址外,还必须使用扩展地址寄存器。4字节地址模式旨在支持2...原创 2019-10-28 23:09:24 · 11958 阅读 · 2 评论 -
Stand SPI Dual SPI 和Quad SPI
目录Stand SPI Dual SPI Qual SPIStand SPI标准SPI通常就称SPI,它是一种串行外设接口规范,有4根引脚信号:clk , cs, mosi, misoStandard SPI: CLK, /CS, DI, DO, /WP, /Hold这是全双工模式,输入和输出可以同时进行(mosi, miso分别对应的是DI和DO)Dual SPI它...原创 2019-10-25 22:53:14 · 3340 阅读 · 0 评论 -
W25Qxx nor flash驱动学习
如下所示是原子哥提供的w25qxx的驱动,作为学习参考非常实用,驱动比较通用,注释清晰,方便移植:#include "w25qxx.h"#include "spi.h"#include "delay.h"#include "usart.h"#include "stm32f4xx_hal_gpio.h"u16 W25QXX_TYPE=W25Q256; //默认是W25Q256/...原创 2019-10-24 23:25:55 · 1577 阅读 · 0 评论 -
构造和运行模块
目录当前进程浮点计算编译模块版本宏符号表初始化错误处理驱动参数当前进程内核模块不像应用程序那样顺序的执行,但是内核执行的大多数操作还是和某个进程相关。内核代码可以通过访问全局项current来获得当前进程的信息,current定义在<asm/current.h>中,是一个指向struct task_struct的指针,struct task_stru...原创 2019-08-17 14:20:07 · 281 阅读 · 0 评论 -
输入设备驱动框架
目录输入设备驱动框架简介 输入核心层 设备驱动程序 输入事件驱动程序输入设备驱动框架简介输入设备(案件、键盘、鼠标、触摸屏等)是典型的字符设备。该类驱动的工作特点是,底层在进行按键或者触屏等其他动作时会产生一个中断,或者驱动中定时获取底层的操作,当检测到动作发生的时候,回去读取键值或者坐标数据,然后将数据存储在一段缓冲区中,字符设备驱动负责管理者这块缓冲区,而用户则直接通过字符设备...原创 2019-09-13 20:44:52 · 753 阅读 · 0 评论 -
platform设备资源与数据
目录设备端资源定义 驱动端资源获取 设备端数据定义 驱动端数据获取设备端资源定义上一篇文章(https://blog.youkuaiyun.com/qq_37600027/article/details/100802337)中,我们定义了一个platform_device设备结构体,其中有一变量resource,他描述了platform的资源数据,资源本身由resource结构体描述。结...原创 2019-09-13 16:03:49 · 651 阅读 · 0 评论 -
platform总线设备与驱动
目录platform总线、设备、驱动 platform设备 platform总线 platform驱动platform总线、设备、驱动Linux2.6以后的设备驱动模型中,需要关注总线设备和驱动这三个实体,总线将设备和驱动绑定,在系统注册一个设备的时候,总线会去匹配驱动,注册驱动的时候,总线回去匹配相应的设备,匹配工作由总线完成Linux中有一种总线叫做platform总线,相...原创 2019-09-13 14:47:45 · 846 阅读 · 1 评论 -
rmmod: can't change directory to '/lib/modules': No such file or directory错误解决
使用rmmod命令来卸载一个调试的驱动时,出现无法卸载驱动的错误,提示如下:rmmod: can't change directory to '/lib/modules': No such file or directory用lsmod查看时发现globalmem_platform.ko模块并没有被卸载掉。查看/lib目录,确实没有modules这个目录存在,于是在/lib/目录下创...原创 2019-09-13 10:13:09 · 2601 阅读 · 1 评论 -
linux I2C驱动框架(一)
目录I2C核心。I2C 总线驱动。I2C 设备驱动。linux I2C代码i2c-core.c。i2c-dev.c。chips 文件夹。busses 文件夹。algos 文件夹。I2C结构体i2c_adapter 结构体i2c_algorithm 结构体i2c_driver 结构体i2c_client 结构体I2C结构体解析i2c_a...原创 2019-09-01 21:04:09 · 911 阅读 · 0 评论 -
linux I2C驱动框架之设备驱动(四)
目录i2c设备驱动结构体 模块的加载和卸载 I2C通信模板i2c设备驱动结构体I2C 设备驱动要使用i2c_driver和i2c_client数据结构并填充其中的成员函数。i2c_client 一般被包含在设备的私有信息结构体yyy_data 中,而i2c_driver 则适合被定义为全局变量并初始化,i2c_driver结构体原型如下所示:struct i2c_driver ...原创 2019-09-14 15:32:51 · 445 阅读 · 0 评论