随笔分类 -  linux设备驱动程序

摘要:linux驱动程序——将驱动程序编译进内核 模块的加载 通常来说,在驱动模块的开发阶段,一般是将模块编译成.ko文件,再使用 sudo insmod module.ko 或者 depmod a modprobe module 将模块加载到内核,相对而言,modprobe要比insmod更加智能,它会 阅读全文
posted @ 2019-03-26 15:09 牧野星辰 阅读(22823) 评论(0) 推荐(5) 编辑
摘要:linux设备驱动程序 设备树多级子节点的转换 在上一章: "设备树处理之——device_node转换成platform_device" 中,有提到在设备树的device_node到platform_device转换中,必须满足以下条件: 一般情况下,只对设备树中根的一级子节点进行转换,也就是多级 阅读全文
posted @ 2019-03-12 20:10 牧野星辰 阅读(4486) 评论(1) 推荐(1) 编辑
摘要:linux设备驱动程序 i2c(2) adapter和设备树的解析 (注: 基于beagle bone green开发板,linux4.14内核版本) 在本系列linux内核i2c框架的前两篇,分别讲了: "linux设备驱动程序 i2c(0) i2c设备驱动源码实现" "linux设备驱动程序 i 阅读全文
posted @ 2019-03-12 15:25 牧野星辰 阅读(7919) 评论(1) 推荐(0) 编辑
摘要:linux 中bus驱动解析 总线(bus)是linux发展过程中抽象出来的一种设备模型,为了统一管理所有的设备,内核中每个设备都会被挂载在总线上,这个bus可以是对应硬件的bus(i2c bus、spi bus)、可以是虚拟bus(platform bus)。 简述bus的工作流程 bus将所有挂 阅读全文
posted @ 2019-03-10 22:23 牧野星辰 阅读(6136) 评论(0) 推荐(1) 编辑
摘要:linux字符设备驱动程序 创建设备节点 基于4.14内核,运行在beagleBone green 在上一讲中,我们写了第一个linux设备驱动程序—— "hello_world" ,在驱动程序中,我们什么也没有做,仅仅是打印了两条日志消息,今天,我们就要丰富这个设备驱动程序,在/dev目录下创建一 阅读全文
posted @ 2019-03-09 17:53 牧野星辰 阅读(5527) 评论(0) 推荐(1) 编辑
摘要:gpio驱动程序 上一章节 "linux设备驱动程序 创建设备节点" 章节主要介绍了linux字符设备驱动程序的框架,从这一章节开始我们讲解各种外设的控制,包括gpio,i2c,dma等等,既然是外设,那就涉及到具体的目标板,博主在这里使用的开发板是开源平台beagle bone green,内核版 阅读全文
posted @ 2019-03-09 16:22 牧野星辰 阅读(20372) 评论(1) 推荐(1) 编辑
摘要:linux sysfs文件系统 本文部分内容参考自 "官方文档" 自2.6版本开始,linux内核开始使用sysfs文件系统,它的作用是将设备和驱动程序的信息导出到用户空间,方便了用户读取设备信息,同时支持修改和调整。 与ext系列和fat等文件系统不同的是,sysfs是一个系统在启动时构建在内存中 阅读全文
posted @ 2019-03-09 15:53 牧野星辰 阅读(12400) 评论(1) 推荐(3) 编辑
摘要:linux字符设备驱动程序 hello_world 基于4.14内核, beagleBone green平台 PC端的设备驱动程序 有过电脑使用经验的人都知道,当我们将外部硬件设备比如鼠标键盘插入到电脑端口(通常是USB口)时,在windows系统右下角会弹出"安装设备驱动程序"的显示框,那么,为什 阅读全文
posted @ 2019-03-09 14:59 牧野星辰 阅读(15833) 评论(0) 推荐(0) 编辑
摘要:(基于4.14内核版本) 为了梳理清楚linux内核中的i2c实现框架,从本文开始,博主将分几个章节分别解析i2c总线在linux内核中的形成过程、匹配过程、以及设备驱动程序源码实现。 在介绍linux内核中i2c框架之前,我们最好是知道怎么使用它,实现一个相应的i2c设备驱动程序demo,然后从使 阅读全文
posted @ 2019-03-07 23:11 牧野星辰 阅读(11029) 评论(1) 推荐(1) 编辑
摘要:linux设备驱动程序 i2c(1):i2c总线的添加与实现 (基于4.14内核版本) 在上一章节 "linux设备驱动程序 i2c(0) i2c设备驱动源码实现" 中,我们演示了i2c设备驱动程序的源码实现,从这一章节开始,我们来剖析i2c设备驱动程序框架的实现原理。 前情回顾 在这之前,建议各位 阅读全文
posted @ 2019-03-07 22:58 牧野星辰 阅读(8468) 评论(0) 推荐(3) 编辑
摘要:linux 串行通信接口驱动框架 在学习linux内核驱动时,不论是看linux相关的书籍,又或者是直接看linux的源码,总是能在linux中看到各种各样的框架,linux内核极其庞杂,linux各种框架理解起来并不容易,如果直接硬着头皮死记硬背,意义也不大。 博主学习东西一直秉持着追本溯源的态度 阅读全文
posted @ 2019-03-07 20:09 牧野星辰 阅读(2867) 评论(0) 推荐(2) 编辑
摘要:linux内核可加载模块的makefile 在开发linux内核驱动时,免不了要接触到makefile的编写和修改,尽管网上的makefile模板一大堆,做一些简单的修改就能用到自己的项目上,但是,对于这些基础的东西,更应该做到知其然并知其所以然。 本篇文章中只讨论linux内核模块编译的makef 阅读全文
posted @ 2019-03-06 23:29 牧野星辰 阅读(34934) 评论(2) 推荐(5) 编辑
摘要:linux内核makefile概览 本博客参照内核 "官方英文文档" linux的内核makefile主要用于编译整个内核源码,按照用户的需求生成各种目标文件,对于用户来说,编译内核时非常简单的,只需要几个指令就可以做到,但是对于一个驱动开发者而言,了解内核源码的编译机制是非常必要的。 make 和 阅读全文
posted @ 2019-03-06 23:20 牧野星辰 阅读(16365) 评论(0) 推荐(5) 编辑
摘要:linux的initcall机制(针对编译进内核的驱动) initcall机制的由来 我们都知道,linux对驱动程序提供静态编译进内核和动态加载两种方式,当我们试图将一个驱动程序编译进内核时,开发者通常提供一个xxx_init()函数接口以启动这个驱动程序同时提供某些服务。 那么,根据常识来说,这 阅读全文
posted @ 2019-03-06 22:40 牧野星辰 阅读(15615) 评论(5) 推荐(13) 编辑
摘要:linux设备驱动程序 设备树(1) dtb转换成device_node 本设备树解析基于arm平台 从start_kernel开始 linux最底层的初始化部分在HEAD.s中,这是汇编代码,我们暂且不作过多讨论,在head.s完成部分初始化之后,就开始调用C语言函数,而被调用的第一个C语言函数就 阅读全文
posted @ 2019-03-06 19:58 牧野星辰 阅读(9311) 评论(0) 推荐(5) 编辑
摘要:linux设备树dtb格式 设备树的一般操作方式是:开发人员根据开发需求编写dts文件,然后使用dtc将dts编译成dtb文件。 dts文件是文本格式的文件,而dtb是二进制文件,在linux启动时被加载到内存中,接下来我们需要来分析设备树dtb文件的格式。 为什么要了解设备树dtb文件的格式 dt 阅读全文
posted @ 2019-03-06 19:47 牧野星辰 阅读(3697) 评论(1) 推荐(0) 编辑
摘要:linux 驱动程序中 container_of宏解析 众所周知,linux内核的主要开发语言是C,但是现在内核的框架使用了非常多的面向对象的思想,这就面临了一个用C语言来实现面向对象编程的问题,今天我们就来讲讲其中一个例子。 利用结构体中元素指针获取结构体指针 Kobject是linux设备驱动模 阅读全文
posted @ 2019-03-06 19:33 牧野星辰 阅读(2955) 评论(1) 推荐(1) 编辑

点击右上角即可分享
微信分享提示