
linux core
文章平均质量分 85
逆水东流
一二三四、二二三四、三二三四、换个姿势!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
自旋锁及其衍生锁
自旋锁自旋锁(spinlock)是用在多个CPU系统中的锁机制,当一个CPU正访问自旋锁保护的临界区时,临界区将被锁上,其他需要访问此临界区的CPU只能忙等待,直到前面的CPU已访问完临界区,将临界区开锁。自旋锁上锁后让等待线程进行忙等待而不是睡眠阻塞,而信号量是让等待线程睡眠阻塞。自旋锁的忙等待浪费了处理器的时间,但时间通常很短,在1毫秒以下。 自旋锁用于多个转载 2015-04-07 11:10:55 · 436 阅读 · 0 评论 -
linux main.c中的初始化
head.s在最后部分调用main.c中的start_kernel()函数,从而把控制权交给了它。所以启动程序从start_kernel()函数继续执行。这个函数是main.c乃至整个操作系统初始化的最重要的函数,一旦它执行完了,整个操作系统的初始化也就完成了。如前所述,计算机在执行start_kernel()前处已经进入了386的保护模式,设立了中断向量表并部分初始化了其中的转载 2015-03-30 16:22:40 · 551 阅读 · 0 评论 -
linux SD卡初始化---mmc_sd_init_card函数
为了学习SD/SDIO协议,看了一下linux中初始化SD卡的流程,结合代码更容易SD初始化是怎么做的。下面图截自:"SD Specifications Part 1 Physical Layer Simplified Specification Version 4.10"SD卡在sd模式下的初始化流程图,sd协议还有spi模式暂不研究。这个流程图对应于linux 代码就在转载 2015-03-27 17:03:55 · 3926 阅读 · 0 评论 -
linux SD卡初始化---mmc_sd_init_card函数
转自:http://www.cnblogs.com/fengeryi/p/3472728.html mmc_sd_init_card剩下的关于UHS-I的分支结构。uhs-I的初始化流程图如图:红线标出的部分是已经做了的事,与上一篇那个流程图是一致的,之后就是if分支中做的事。if分支中的函数mmc_sd_init_uhs_card:转载 2015-03-27 16:49:45 · 1199 阅读 · 0 评论 -
linux 块设备驱动程序
1.4.1 Linux块设备驱动程序原理(1)顾名思义,块设备驱动程序就是支持以块的方式进行读写的设备。块设备和字符设备最大的区别在于读写数据的基本单元不同。块设备读写数据的基本单元为块,例如磁盘通常为一个sector,而字符设备的基本单元为字节。从实现角度来看,字符设备的实现比较简单,内核例程和用户态API一一对应,这种映射关系由字符设备的file_operations维护转载 2015-03-25 20:17:08 · 448 阅读 · 0 评论 -
初学者学 linux 块设备驱动
面对不断升级的linux内核、GNU开发工具、linux环境下的各种图形库,很多linux应用程序开发人员和linux设备驱动开发人员即兴奋,又烦躁。兴奋的是新的软件软件、工具给我提供了更强大的功能,烦躁的是适应新软件的特性、搭建新环境是一项非常繁琐的事情。本文想从以下3个方面探讨一下“面对不断升级的内核,如何学习linux设备驱动”。一、内核发展的现状及其对技术人员的影响L转载 2015-03-19 15:10:38 · 458 阅读 · 0 评论 -
linux中 struct file 和 struct inode简介
转自:http://www.cnblogs.com/QJohnson/archive/2011/06/24/2089414.html1、struct inode──字符设备驱动相关的重要结构介绍内核中用inode结构表示具体的文件,而用file结构表示打开的文件描述符。Linux2.6.27内核中,inode结构体具体定义如下:struct inode {struct hl原创 2015-03-19 13:51:08 · 635 阅读 · 0 评论 -
(linux)BSP板级支持包开发理解
嵌入式系统由硬件环境、嵌入式操作系统和应用程序组成,硬件环境是操作系统和应用程序运行的硬件平台,它随应用的不同而有不同的要求。硬件平台的多样性是嵌入式系统的主要特点,如何使嵌入式操作系统在不同的硬件平台上有效地运行,是嵌入式系统开发中需要解决的关键问题。解决的方法是在硬件平台和操作系统之间提供硬件相关层来屏蔽这些硬件的差异,给操作系统提供统一的运行环境......原创 2016-07-23 22:29:00 · 8280 阅读 · 0 评论 -
(linux)main.c中的初始化
head.s在最后部分调用main.c中的start_kernel() 函数,从而把控制权交给了它。 所以启动程序从start_kernel()函数继续执行。这个函数是main.c乃至整个操作系统初始化的最重要的函数,一旦它执行完了,整个操作系统的初始化也就完成了。 如前所述,计算机在执行start_kernel()前处已经进入了386的保护模式......转载 2016-03-21 10:08:49 · 700 阅读 · 0 评论 -
linux内存操作--ioremap和mmap
最近在做视频输出相关的东西,对于预留给framebuffer的内存使用不是很清楚,现在找到一些资料整理一下,以备使用。if (想看使用方法) goto 使用方法;对于一个系统来讲,会有很多的外设,那么这些外设的管理都是通过CPU完成。那么CPU在这个过程中是如何找到外设的呢?尽管在一个系统中会有诸多的外设,在每个外设的接口电路中会有多个端口。但是如果系统能够每个端口都被赋予一转载 2015-04-03 09:12:00 · 611 阅读 · 0 评论 -
platform_driver_probe与platform_driver_register的区别
[驱动注册]platform_driver_register()与platform_device_register() 设备与驱动的两种绑定方式:在设备注册时进行绑定及在驱动注册时进行绑定。 以一个USB设备为例,有两种情形:(1)先插上USB设备并挂到总线中,然后在安装USB驱动程序过程中从总线上遍历各个设备,看驱动程序是否与其相匹配,如果匹配就将两者邦定。转载 2015-04-07 11:01:19 · 613 阅读 · 0 评论 -
wake_lock机制
Android的休眠唤醒主要基于wake_lock机制,只要系统中存在任一有效的wake_lock,系统就不能进入深度休眠,但可以进行设备的浅度休眠操作。wake_lock一般在关闭lcd、tp但系统仍然需要正常运行的情况下使用,比如听歌、传输很大的文件等。本文主要分析driver层wake_lock的实现。一、wake_lock 定义和接口[cpp] view pla转载 2015-04-03 11:05:37 · 1009 阅读 · 0 评论 -
schedule_delayed_work()
原文地址:schedule_delayed_work()用法作者:Valley 第一篇 工作队列 在Linux内核中,对下半部(或者说推后执行的工作)的处理方式有好几种,包括BH(bottom half),软中断,Tasklets和工作队列等等。在2.6内核中,大名鼎鼎的BH处理被废除,新增了更方便的工作队列。工作队列的方便之处在于它把 工作推后,交由一个转载 2015-04-03 11:04:16 · 1065 阅读 · 0 评论 -
likely和unlikely函数
在Linux内核中likely和unlikely函数有两种(只能两者选一)实现方式,它们的实现原理稍有不同,但作用是相同的,下面将结合linux-2.6.38.8版本的内核代码来进行讲解。 1、对__builtin_expect的封装 它们的源代码如下: [cpp]view plaincopyprint?/* linux-2转载 2015-04-10 16:26:31 · 456 阅读 · 0 评论 -
idr机制(integer ID management)
最近研究进程间通信,遇到了idr相关的函数,为了扫清障碍,先研究了linux的idr机制。 所谓IDR,其实就是和身份证的含义差不多,我们知道,每个人有一个身份证,身份证只是 一串数字,从数字,我们就能知道这个人的信息。同样道理,idr的要完成的任务是给要管理的对象分配一个数字,可以通过这个数字找到要管理的对象。 ID ----------------转载 2015-04-10 16:16:33 · 1466 阅读 · 0 评论 -
INIT_WORK和INIT_DELAYED_WORK详解
朋友,你相信,一只蝴蝶在北京拍拍翅膀,将使得纽约几个月后出现比狂风还厉害的龙卷风吗?看过那部经典的影片蝴蝶效应的朋友们一定会说,这不就是蝴蝶效应吗.没错.蝴蝶效应其实是混沌学理论中的一个概念.它是指对初始条件敏感性的一种依赖现象.蝴蝶效应的原因在于蝴蝶翅膀的运动,导致其身边的空气系统发生变化,并引起微弱气流的产生,而微弱气流的产生又会引起它四周空气或其它系统产生相应的变化,由此引起连锁反应转载 2015-04-10 16:10:59 · 574 阅读 · 0 评论 -
LED子系统
============================================作者:yuanluluhttp://blog.youkuaiyun.com/yuanlulu版权没有,但是转载请保留此段声明============================================ 数据结构/include/linux/leds.henum le转载 2015-04-07 20:26:58 · 423 阅读 · 0 评论 -
container_of()宏
在学习Linux驱动的过程中,遇到一个宏叫做container_of。该宏定义在include/linux/kernel.h中,首先来贴出它的代码:/** * container_of - cast a member of a structure out to the containing structure * @ptr: the point转载 2015-04-07 14:17:28 · 305 阅读 · 0 评论 -
tasklet
taskletTasklet的使用比较简单,只需要定义tasklet及其处理函数并将两者关联例子:Void my_tasklet_func(unsigned long)DECLARE_TASKLET(my_tasklet.my_tasklet_f转载 2015-04-07 11:24:50 · 418 阅读 · 0 评论 -
(linux)LED子系统
数据结构(/include/linux/leds.h)enum led_brightness { LED_OFF = 0, LED_HALF = 127, LED_FULL = 255,};led_classdev代表led的实例:struct led_classdev { const char *name;原创 2016-09-17 23:22:43 · 934 阅读 · 0 评论