linux驱动编程
wangdapao12138
如果知识就是力量,我曾比牛还壮!
展开
-
linux驱动开发1之什么是驱动?
1.什么是驱动?字面意思驱动指驱使一个东西,让它动起来。2.什么是linux驱动驱动的本质是电力驱动,而驱动代码只是给出了操作方法。3.linux体系架构分层思想驱动的上面是系统调用API驱动的下面是硬件驱动自己本身也是分层的4.linux的模块化设计4.1微内核和宏内核(也说明了linux内核的紧耦合和松耦合的概念)宏内核(又称为单内核):将内...原创 2018-07-17 21:14:48 · 2134 阅读 · 0 评论 -
Linux驱动开发15之RTC驱动模型
1.需要的文件有哪些driver/rtc/class.c: 此文件向linux内核驱动模型注册了一个类RTC,同时为底层的RTC驱动提供了注册/注销RTC接口。同时实现了RTC相关的PM操作。driver/rtc/rtc-dev.c: 将各种各样的RTC设备抽象成一个字符设备,同时提供文件操作函数集。driver/rtc/rtc-sysfs.c: 用户可...原创 2018-08-27 23:26:39 · 435 阅读 · 0 评论 -
Linux驱动开发17之系统启动时platform_device在哪里注册?
1.系统启动的时候,platform_device的注册在哪里?答案:先去找启动过程中的C语言阶段,下面就是描述,我们一般看红色字体的部分。总结下来就是找:1)do_initcalls,这个比较分散,2)init_machine,这个比较集中,但实际上是被do_initcalls调用的!下面来具体分析一下。2.init_machine和do_initcalls的调用关系...原创 2018-08-28 23:25:35 · 801 阅读 · 0 评论 -
linux驱动开发19之led平台驱动框架
1.以leds-s3c24xx.c为例来分析platform设备和驱动的注册过程1)platform_driver_register2)platform_device_register2.platdata怎么玩1)platdata其实就是设备注册时提供的设备有关的一些数据(譬如设备对应的gpio、使用到的中断号、设备名称••••)2)这些数据在设备和驱动match之后,会由设备...原创 2018-09-01 10:17:34 · 392 阅读 · 0 评论 -
Linux驱动开发11之input子系统驱动
1.为什么要学习input子系统这里说要说明下:input子系统是独立于platform平台总线的。既然和总线无关,那么就是一类设备的驱动模型,就像misc设备驱动模型一样,所以必须要学习!2.什么是input子系统输入的一类设备。用于各种不同输入类设备的管理。linux系统中键盘、鼠标、触摸屏等输入设备的支持都通过、或越来越倾向于标准的input输入子系统。因为input子系统已经完...原创 2018-08-25 20:34:23 · 1099 阅读 · 0 评论 -
Linux驱动移植14之中断上下部实现按键事件
1.中断的上下半部1.1中断处理的注意点1)中断上下文,不能和用户空间数据交互2)不能交出CPU(不能休眠、不能schedule)3)ISR运行时间尽可能短,越长则系统响应特性越差1.2中断下半部2种解决方案1)为什么要分上半部(top half,又叫顶半部)和下半部(bottom half,又叫底半部)上半部:登记、标记中断,调用下半部下半部:执行中断处理函数...原创 2018-08-25 20:36:44 · 423 阅读 · 0 评论 -
Linux驱动开发16之再论register_chrdev_region
1.之前注册字符设备用的如下函数注册字符设备驱动:register_chrdev(unsigned int major, const char *name,const struct file_operations *fops);但其实这个函数是linux版本2.4之前的注册方式,它的原理是:(1)确定一个主设备号,如果major=0,则会自动分配设备号(2)构造一个file_ope...转载 2018-08-29 21:40:47 · 2007 阅读 · 0 评论 -
Linux驱动开发19之spi驱动模型的数据结构
1.SPI传输模式(各定义在include/linux/spi.h)先看一下这些和时序有关的:00075: #define SPI_CPHA 0x01 /* clock phase */ //时钟相位,数据采样时刻对应着的SCLK是第一个(0)还是第二个边沿(1)00076: #define SPI_CPOL 0x02 /* clock polarity */ //时钟极性,SCLK空...原创 2018-09-04 22:18:47 · 1104 阅读 · 0 评论 -
X210-MT7601-USB WIFI移植
1、MT7601驱动的移植(1)开发环境搭建和确认(2)源码获取和解压(3)配置、编译、安装最后得到网络设备文件。2、插入usb WiFi 启动开发板linux,lsusb查看usb驱动Bus 001 Device 003: ID 148f:7601看到的是该驱动的厂家设备信息3、获取MT7601的源码4、解压源码到linux下,确认USB的VID(VEND...原创 2018-09-09 16:20:47 · 1396 阅读 · 0 评论 -
Linux驱动开发23之设备树dts的由来及部分属性
1.什么是DTS?为什么要引入DTS?DTS即Device Tree Source 设备树源码, Device Tree是一种描述硬件的数据结构,它起源于 OpenFirmware (OF)。在Linux 2.6中,ARM架构的板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx,比如板上的platform设备、resource、i2c_board...原创 2018-10-03 09:47:42 · 1698 阅读 · 0 评论 -
Linux驱动开发18之Linux字符驱动总结之:全自动创建设备及节点
/*************************************************************************************************** linux字符设备驱动总结之:全自动创建设备及节点转载********************************************...转载 2018-08-27 23:22:17 · 253 阅读 · 0 评论 -
Linux驱动开发13之再论platform平台总线
1.平台总线体系工作流程第一步:定义初始化platform bus,并注册platform到内核,在/sys目录下出现各种相关设备第二步:内核移植人员提供platform_devices,定义各种platform_devices,然后注册第三步:写驱动的人负责提供platform_driver,定义相关的platform_driver,然后注册第四步:platform的match函...原创 2018-08-19 19:15:01 · 1279 阅读 · 2 评论 -
Linux驱动开发12之再论I2C 驱动模型之device
1.驱动工程师所关心的东西首先作为驱动工程师移植I2C驱动的时候,除了I2C驱动框架之外,最关心的是什么?使用的是哪个管脚,如果更改怎么办? I2C的时钟哪里来?I2C的速率是多大?怎样修改?时序怎样? I2C主从模式怎样设置的? 在控制台命令行,怎样验证I2C驱动的移植是正确的,有哪些方法? 怎样验证通过I2C去读写一个设备的寄存器? 一条总线上挂载多个设备,怎样移植? 如...原创 2018-08-19 16:05:14 · 551 阅读 · 0 评论 -
linux驱动开发2之简单驱动代码
1.驱动开发的准备工作1)正常运linux系统的开发板,要求开发板中的linux的zImage必须是自己编译的,不能是别人编译的。2)内核源码树,其实就是一个经过了配置编译之后的内核源码。3)nfd挂载的rootfs,主机ubuntu中必须搭建一个nfs服务器。2.驱动开发的步骤1)进行驱动源代码编写、Makefile编写、编译。2)insmod装载模块、测试、rmmod卸...原创 2018-07-17 21:15:29 · 627 阅读 · 0 评论 -
linux驱动开发3之简单驱动代码分析
1.模块卸载1)module_exit和rmmod的对应关系2)lsmod查看rmmod前后系统的模块记录变化2.模块中常用宏1)MODULE_LICENSE,模块的许可证。一般声明为GPL许可证,而且最好不要少,否则可能会出现莫名其妙的错误(譬如一些明显存在的函数提升找不到)。// MODULE_xxx这种宏作用是用来添加模块描述信息MODULE_LICENSE("GPL...原创 2018-07-17 21:16:03 · 410 阅读 · 0 评论 -
linux驱动开发4之字符设备驱动原理及led编程
1.系统整体工作原理1)应用层->API->设备驱动->硬件2)API:open、read、write、close等3)驱动源码中提供真正的open、read、write、close等函数实体2.file_operations结构体(#include <linux/fs.h>)1)元素主要是函数指针,用来挂接实体函数地址2)每个设备驱动都需...原创 2018-07-17 21:16:44 · 691 阅读 · 0 评论 -
linux驱动开发5之字符设备驱动新接口
1.新接口与老接口1)老接口:register_chrdevstatic inline int register_chrdev(unsigned int major, const char *name, const struct file_operations *fops){ return __register_chrdev(major, 0, 256, name, fops...原创 2018-07-17 21:17:25 · 721 阅读 · 0 评论 -
linux驱动开发6驱动框架之led
1.何谓驱动框架1.1驱动是谁写的1)驱动开发工程师2)内核维护者1.2驱动编程协作要求1)接口标准化2)尽量降低驱动开发者难度1.3到底什么是驱动框架1)内核中驱动部分维护者针对每个种类的驱动设计一套成熟的、标准的、典型的驱动实现,然后把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开发工程师来实现,这就叫驱动框架。2)内...原创 2018-07-17 21:17:58 · 564 阅读 · 0 评论 -
linux驱动开发7驱动框架之gpiolib
1.gpiolib学习重点1)gpiolib的建立过程2)gpiolib的使用方法:申请、使用、释放3)gpiolib的架构:涉及哪些目录的哪些文件2.gpiolib的学习方法1)以一条主线进去,坚持主线2)中途遇到杂碎知识,彻底搞定之,然后继续主线3)随时做笔记以加深理解和记忆4)学习途中注意架构思想,提升自己大脑的空间复杂度3.主线1:gpiolib的建立...转载 2018-07-17 21:18:37 · 443 阅读 · 0 评论 -
linux驱动开发8设备驱动模型
linux驱动开发8设备驱动模型 1.什么是设备驱动模型1)类class、总线bus、设备device、驱动driver。驱动模型中四个概念,也是四个结构体。不管是什么设备,都可以用struct device来表示。用这些结构体来代码设备的实例。2)kobject和对象生命周期,Kobject是非常抽象的一个结构体,是所有的东西形成一个对象,抽象成一个共同的东西。声明周期的...原创 2018-07-17 21:19:07 · 390 阅读 · 0 评论 -
linux驱动开发9之I2C驱动模型
1.linux设备驱动到底复杂在什么地方?假设soc芯片有两个i2c adapter:i2c_adapter1,i2c_adapter1;然后外部有三个i2c接口的设备i2c_device1,i2c_device2,i2c_device3。现在要求在裸机下写出他们的驱动函数。那么肯定要写出6个不同的驱动函数:i2c_adapter1_ReadWrite_i2c_device1();...原创 2018-08-12 19:00:19 · 4701 阅读 · 3 评论 -
linux驱动开发10之misc及蜂鸣器驱动
1.板载蜂鸣器驱动测试1.1驱动部分1)九鼎移植内核已经提供了蜂鸣器驱动源码2)make menuconfig3)bug排查。修改Makefile中的宏名,最终可以在系统中看到 /dev/buzzer由于makefile文件与Kconfig文件中的宏定义不一致,修改makefile宏为:然后编译,下载,结果看到:我们看到在fileoperations结构体中...原创 2018-08-12 19:01:19 · 493 阅读 · 0 评论 -
Linux驱动开发24之设备树的解析
1.dts文件结构通过查看fdtdump输出信息以及dtb二进制文件信息,得到struct fdt_header和文件结构之间的关系信息如所示。通过以上分析,可以得到Device Tree文件结构如上所示。dtb的头部首先存放的是fdt_header的结构体信息,接着是填充区域,填充大小为off_dt_struct – sizeof(struct fdt_header),填充的值为...原创 2018-10-03 21:33:58 · 2504 阅读 · 0 评论