【Linux内核与驱动】
文章平均质量分 80
XiaoBaWu
这个作者很懒,什么都没留下…
展开
-
基于led框架的驱动分析
本文的led驱动使用了内核提供的led框架接口,这种驱动实现与普通字符设备驱动有着本质的区别。此外还融合了platform和gpiolib,需要结合这两者来分析本驱动。原创 2016-09-02 08:09:59 · 2209 阅读 · 2 评论 -
内核的进程管理与调度
不同操作系统下,进程管理与调度的实现和机制有很大不同。对于上层应用(特别是跨平台)的开发,进程管理与调度显得不那么重要;但是,对于贴近操作系统的底层开发,就非常有必要了解Linux中进程的管理与调度原创 2016-12-21 12:06:29 · 1092 阅读 · 0 评论 -
内核的中断机制
内核本身是一个裸机程序,所以在驱动中使用中断与裸机中没有大的区别。但是在2.6.35之后的内核中,为了避免竞态,默认取消了中断的嵌套,这点值得我们注意原创 2016-10-28 18:31:58 · 1362 阅读 · 0 评论 -
内核的竞态控制
何谓竞态?用一句话描述就是:并行执行的多个程序,同时访问共享资源,或执行同一段代码,若这些行为是有害的则称此为竞态1.解决机制现代soc大多是对称多处理器机制(SMP),每个核可以有自己的中断,自己的进程(宏观和微观都是并行)。如下 可以认为,SMP是竞态最复杂的情况了,单核竞态的复杂度真包含于SMP。由于驱动程序需要保证稳定性与普适性,所以最好一律按照SMP的情况来进行竞态原创 2016-11-08 21:13:50 · 763 阅读 · 0 评论 -
内核中的定时器与延时
在驱动中,定时触发/周期性的工作是比较少的,因为驱动主要提供机制而非策略,除非要驱动的硬件本身有这方面的需求,否则定时触发/周期性的工作应交由应用层完成原创 2016-11-14 17:43:56 · 839 阅读 · 0 评论 -
内核配置与编译宏观分析
kernel配置阶段宏观分析通过配置,我们可以控制各功能是否被使用,以及配置一些参数给内核原创 2016-07-31 16:20:56 · 791 阅读 · 0 评论 -
内核与文件系统
1.存储介质和文件系统的关系2.文件系统是什么3.文件系统和根文件系统的区别4.kernel和根文件系统的关系原创 2016-08-05 09:26:58 · 2502 阅读 · 0 评论 -
设备驱动模型与sysfs
Linux设备驱动模型与sysfsLinux在2.6版本引入了设备驱动模型,设备驱动模型负责统一实现和维护一些特性,诸如:热插拔、对象生命周期、用户空间和驱动空间的交互等基础设施原创 2016-08-31 09:38:59 · 2020 阅读 · 0 评论 -
原厂内核移植流程
kernel原厂版本移植流程今天开始移植三星原厂的kernel,做一下笔记,以备日后所需原创 2016-08-03 10:09:22 · 1757 阅读 · 0 评论 -
内核启动阶段kernel_init(init)进程分析
在kernel进入c语言阶段后,会开始执行start_kernel函数,它负责进行kernel正式运行前各个功能的初始化:打印了一些信息、内核工作需要的模块的初始化被依次调用(譬如内存管理、调度系统、异常处理···),最后末尾调用了一个rest_init函数启动了三个进程(idle、kernel_init、kthreadd)原创 2016-08-02 14:17:07 · 12871 阅读 · 0 评论 -
内核启动汇编阶段分析
汇编阶段的主线代码主要分布在head.S中原创 2016-08-01 13:01:01 · 1763 阅读 · 0 评论 -
内核Kconfig详尽分析
Kconfig位于kernel源码内大部分的文件夹中,是一种特殊格式的文件,负责提供kernel各个功能的配置选项。 比如进行驱动移植等工作时,有时需要自己添加Kconfig中的一个配置项,从而将某个设备驱动添加到内核的配置项目中。 需要注意的是,Kconfig仅仅负责提供配置选项本身,而不提供各选项的值原创 2016-07-31 09:28:22 · 4918 阅读 · 0 评论 -
内核对轮询IO(阻塞/非阻塞)的实现
应用层对设备文件的读写,常常会用到轮询操作。所谓轮询,就是指的是在读写时,若暂时无法读写,则卡在那里,直到可以读写。原创 2016-11-12 20:27:45 · 3067 阅读 · 0 评论 -
基于input子系统的驱动分析
input子系统本质多个模块构成的一个体系,用来实现:对鼠标、键盘、按键这类输入设备驱动的管理。这里所谓的输入设备,是狭义上的,仅仅指人机交互用的输入设备。传感器这种输入设备不属于该范围原创 2016-09-06 14:24:37 · 1087 阅读 · 1 评论 -
内核驱动的本质——模块
内核驱动的本质——模块在Linux中,驱动的本质就是一个模块。模块可以被选择“静态编译”或“模块化编译” 1. 静态编译:链接入内核镜像,默认永远被加载 2. 模块化编译:需要在内核运行时动态加载 这两种处理步骤详见驱动模块的编译与安装 当模块被加载时,可以认为模块即是内核的一部分原创 2016-08-22 20:52:50 · 1246 阅读 · 0 评论 -
基于misc框架的驱动分析
基于misc框架的驱动分析所谓的misc设备,就是很难于分类的杂散类设备,比如蜂鸣器、adc等。 一般来说,misc设备都是字符设备,所以led也能划分入misc设备,led驱动也能用misc设备驱动实现,这也印证了驱动的实现是自由的。 其本质是:通过读写/dev内的设备文件,来间接访问file_operations结构体内的函数,从而实现操作硬件原创 2016-09-02 14:57:12 · 956 阅读 · 0 评论 -
基于platform总线的驱动分析
在设备驱动模型中,总线负责将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。原创 2016-08-31 15:23:03 · 5007 阅读 · 2 评论 -
基于i2c子系统的驱动分析
和i2c有关的代码都在源码drivers/i2c目录下。内核提供了两种i2c的实现方法:第一种叫i2c_dev,对应drivers/i2c/i2c-dev.c,这种方法仅仅封装了soc的i2c控制器操作,并向应用层提供操作接口。其本质是为应用层提供了一个库,驱动功能由应用层实现,不是主流的做法第二种是驱动层实现所有驱动功能,是比较主流的做法原创 2016-09-08 09:11:41 · 4302 阅读 · 2 评论 -
设备树详解
在Linux3.x版本后,arch/arm/plat-xxx和arch/arm/mach-xxx中,描述板级细节的代码(比如platform_device、i2c_board_info等)被大量取消,取而代之的是设备树原创 2016-11-24 16:53:11 · 36274 阅读 · 12 评论 -
基于网络设备框架的驱动分析
所谓网络设备,其实是一个概念而非实体,网卡仅仅是网络设备中的一部分。原创 2016-10-28 17:34:06 · 1448 阅读 · 0 评论 -
基于块设备框架的驱动分析
传统的机械式块设备(如硬盘、DVD)虽然可以随机访问,但是连续访问效率更高,因此块设备驱动中有排序逻辑,将用户的随机访问重新调整成尽量连续访问以提升效率。所以块设备本身驱动层是支持缓冲区的,而字符设备驱动层没有缓冲原创 2016-10-18 21:53:52 · 885 阅读 · 0 评论 -
基于framebuffer的驱动分析
framebuffer帧缓冲(简称fb)是linux内核中虚拟出的一个设备,是一个platform类型设备,设备文件位于/dev/fb*原创 2016-10-03 10:47:18 · 6233 阅读 · 0 评论 -
gpiolib及gpio操作
在驱动工作时,有可能好几个驱动同时去操作一个gpio,这会造成混乱。所以内核提供了一些方法来管理gpio资源,这就是gpiolib。 在涉及到gpio的驱动程序的编写中,gpiolib并不是强制使用的,而是一种约束和规范,如果要让驱动程序规范、可靠,那么gpiolib是必须要使用的原创 2016-08-29 21:40:29 · 7092 阅读 · 0 评论 -
普通字符设备驱动的两种注册方式(新&旧)
普通字符设备驱动的两种注册方式(新&旧)在内核中,对于一个普通的字符设备驱动,不难发现有两种注册方式:register_chrdev族函数:这种方法是2.4版本流行的旧方法register_chrdev_region族+cdev族+创建设备类、文件的函数:这种方法是2.6版本推荐的新方法原创 2016-08-28 08:32:22 · 3833 阅读 · 0 评论 -
内核中操作寄存器的方法
由于Linux开启了MMU,所以我们在访问寄存器时,必须要使用寄存器物理地址对应的虚拟地址来访问原创 2016-08-27 19:53:55 · 8546 阅读 · 0 评论 -
普通字符设备驱动宏观分析
在内核中,一个字符型设备驱动有许多种实现方式,这里介绍的是最为“质朴”的实现方式 其本质是:通过读写/dev内的设备文件,来间接访问file_operations结构体内的函数,从而实现操作硬件原创 2016-08-27 17:35:58 · 990 阅读 · 0 评论 -
驱动模块的编译与安装
驱动模块的编译与安装模块可以被选择“模块化编译”或“静态编译” 1. 分离式模块化编译:需要在内核运行时动态加载(也能实现开机加载 );非常适合驱动的开发与调试 2. 静态编译:链接入内核镜像,默认被加载;适合开发完成后在产品中使用 3. 统一式模块化编译:和内核一起编译,并统一输出到文件系统,在内核启动时统一开机加载 ;有利于实现开机加速原创 2016-08-23 09:03:04 · 5995 阅读 · 0 评论 -
驱动对异步IO的实现
一旦设备就绪(比如发生了某个硬件中断,或者得到了某个资源),则驱动层向应用程序发送信号,触发应用程序的信号服务函数原创 2016-11-16 20:49:15 · 737 阅读 · 0 评论