linux内核修炼之道
文章平均质量分 86
ricks_wu
学而时习之,不亦说乎;有朋自远方来,不亦乐乎;人不知而不搵,不亦君子乎
展开
-
《Linux内核修炼之道》精华分享与讨论(14)——内核中的链表
早上上班坐地铁要排队,到了公司楼下等电梯要排队,中午吃饭要排队,下班了追求一个女孩子也要排队,甚至在网上下载个什么门的短片也要排队,每次看见人群排成一条长龙时,才真正意识到自己是龙的传人。那么下面咱们就说说队列(链表)。 使用链表的目的很明确,因为有很多事情要做,于是就把它放进链表里,一件事一件事的处理。比如在USB子系统里,U盘不停的提交urb请求,USB键盘也提交,USB鼠标也转载 2014-01-12 00:25:41 · 789 阅读 · 0 评论 -
mtk LCD 驱动过程详解
MTK 平台LCD 驱动的整个过程的讲解MTK_LCD_Driver代码的路是在/mediatek/source/kernel/driver/vedio/mtkfb.cmodule_init(mtkfb_init);模块初始化函数int__init mtkfb_init(void){int r = 0;MSG_转载 2014-06-10 15:55:03 · 4137 阅读 · 0 评论 -
Mtk Ft6306 touch 驱动
Linux Tt6306 Touch 驱动1、 MTk Touch 驱动程序1.1、 MTK Touch 驱动的组成Mtk Touch driver 驱动包括:Mtk platform 虚拟平台设备驱动、Module touch IC 驱动、Input subsystem。Mtk platform 设备驱动是mtk为了兼容多个touch IC 驱动而设计出来的虚转载 2014-06-10 15:57:45 · 841 阅读 · 0 评论 -
MTK camera image sensor driver
camera_sensor_driverimage_sensr首先要进行板极设备的初始化的工作:代码路径是在:/mediatek/platform/mt6577/kernel/core/mt6577_devs.c里面#if1 ///defined(CONFIG_VIDEO_CAPTURE_DRIVERS)retval =platform_device_register(&s转载 2014-06-10 15:58:39 · 1105 阅读 · 0 评论 -
等待队列(一)
在Linux内核中等待队列有很多用途,可用于中断处理、进程同步及定时。我们在这里只说,进程经常必须等待某些事件的发生。等待队列实现了在事件上的条件等待: 希望等待特定事件的进程把自己放进合适的等待队列,并放弃控制全。因此,等待队列表示一组睡眠的进程,当某一条件为真时,由内核唤醒它们。等待队列由循环链表实现,其元素包括指向进程描述符的指针。每个等待队列都有一个等待队列头(wait queue h转载 2014-06-11 11:41:57 · 748 阅读 · 0 评论 -
等待队列(二)
通过 前一篇文章 的介绍我们队等待队列有了一个比较具体的认识,本文将来分析一下等待队列是如何睡眠一个进程和如何唤醒一个进程的。使用等待队列前通常先定义一个等待队列头:static wait_queue_head_t wq ,然后调用wait_event_*函数将等待某条件condition的当前进程插入到等待队列wq中并睡眠,一直等到condition条件满足后,内核再将睡眠在等待队列wq上的转载 2014-06-11 11:44:26 · 595 阅读 · 0 评论 -
linux内核input子系统解析
作者:刘老师,华清远见嵌入式学院讲师。Android、X windows、qt等众多应用对于linux系统中键盘、鼠标、触摸屏等输入设备的支持都通过、或越来越倾向于标准的input输入子系统。因为input子系统已经完成了字符驱动的文件操作接口,所以编写驱动的核心工作是完成input系统留出的接口,工作量不大。但如果你想更灵活的应用它,就需要好好的分析下input子系统了。转载 2014-06-16 11:26:22 · 600 阅读 · 0 评论 -
Linux系統管理講義:VI編輯器
Linux系統管理講義:VI編輯器 一、vi簡介: 1. vi是各種UNIX-Like系統都會支援的全螢幕文字編輯器,任何一位UNIX/Linux系統管理者都應該學會vi。 2. vi的操作環境是針對熟悉UNIX系統的使用者而設計,內建大量的快速鍵指令,初學者必須多加練習。 二、vi的操作環境: vi 共分為三種模式,分別是命令模式(Command mode)、編輯模式(Insert转载 2017-06-06 09:08:24 · 173 阅读 · 0 评论 -
非root用户安装软件
首先需要解释一下程序是怎样运行的。在Linux下,用户在终端下输入一个命令,比如ls,这个命令是怎样被执行的呢?大致流程为:在当前用户的path路径文件夹下查找名为ls的可执行文件名,如果找到,则执行ls文件;如果找不到,则提示未安装或者找不到。这里很重要的就是path路径的内容,如果没有指定路径,则会在path路径里寻找。可以echo $PATH看看里面的内容。在以冒号分割的文件夹下,你会发现你原创 2017-06-06 10:04:21 · 1282 阅读 · 0 评论 -
(DT系列一)DTS结构及其编译方法
DTS结构及其编译方法一:主要问题1,需要了解dtsi与dts的关系2,dts的结构模型3,dts是如何被编译的,以及编译后会生成一个什么文件.二:参考文字1,DTS(device tree source).dts文件是一种ASCII文本格式的DeviceTree描述。基本上,在ARMLinux内,一个.dts文件对应转载 2017-06-06 10:32:53 · 310 阅读 · 0 评论 -
(DT系列二)device tree的书写规范
devicetree的书写规范下面从节点,属性,reg,ranges,中断控制器等几个方面叙述devicetree的书写规范。1,dts的基本元素:节点.dts(或者其include的.dtsi)基本元素为结点和属性。举例说明节点的概念:/ { node1 { a-string-property = "A string"; a转载 2017-06-06 10:34:45 · 154 阅读 · 0 评论 -
(DT系列三)系统启动时, dts 是怎么被加载的
一,主要问题:系统在启动的时候,是怎么加载 dts的;Lk,kernel中都应调查。二:参考文字dts加载流程如下图所示:启动过程中,bootloader(默认是bootable/bootloader/lk)会根据机器硬件信息选择合适的devicetree装入内存,把地址等相关信息传给kernel。kernel中,会根据传入的信息创建设备。1,先从l转载 2017-06-06 10:39:00 · 253 阅读 · 0 评论 -
(DT系列四)驱动加载中, 如何取得device tree中的属性
本文以At91rm9200平台为例,从源码实现的角度来分析驱动加载时,Device tree的属性是如何取得的。一:系统级初始化DT_MACHINE_START 主要是定义"struct machine_desc"的类型,放在 section(".arch.info.init"),是初始化数据,Kernel 起来之后将被丢弃。#define DT_MACHINE_START(_name转载 2017-06-06 10:42:33 · 147 阅读 · 0 评论 -
(DT系列五)Linux kernel 是怎么将 devicetree中的内容生成plateform_device
Linux kernel 是怎么将 devicetree中的内容生成plateform_device1,实现场景(以Versatile Express V2M为例说明其过程)以arch/arm/mach-vexpress/v2m.c 为例,在该文件中的v2m_dt_init函数的作用就是利用 dt(device tree)结构初始化 platform device。static转载 2017-06-06 10:45:06 · 233 阅读 · 0 评论 -
(DT系列六)devicetree中数据和 struct device有什么关系
devicetree中数据和structdevice有什么关系总体来说,devicetree与structdevice的关系应该还是在其生成platformdevice的时候,一直传递的structdevice *parent参数。下面先把其源码中传递过程描述如下(仍以At91rm9200为例):1,DT_MACHINE_START(at91sam_dt,"转载 2017-06-06 10:46:33 · 381 阅读 · 0 评论 -
proc_create的使用方法
proc_create的使用方法proc文件系统是个有用的东东。创建一个proc虚拟文件,应用层通过读写该文件,即可实现与内核的交互。proc虚拟文件是如何创建的呢?先看看比较简单的,创建proc文件夹。调用以下函数,即可实现proc文件夹的创建:struct proc_dir_entry *proc_mkdir(const char *name, struct p转载 2014-03-26 21:26:10 · 5673 阅读 · 1 评论 -
使用 /proc 文件系统来访问 Linux 内核的内容
使用 /proc 文件系统来访问 Linux 内核的内容简介: /proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux 内核空间和用户空间之间进行通信。在 /proc 文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段,但是与普通文件不同的是,这些虚拟文件的内容都是动态创建的。本文对 /proc 虚拟文件系统进行了介绍,并展示了它的用法。转载 2014-03-26 21:29:12 · 1001 阅读 · 0 评论 -
Linux 中基本设备驱动、驱动子系统和设备模型的关系
其实三者的关系很好区分,因为我自己在学的时候,学完基本的设备驱动后,接着学了设备模型,又学驱动子系统,结果就把他们搞混了,一直稀里糊涂的,后来某一天者恍然大悟,于是乎把自己的认识写下来。Linux 的设备分为三大类,字符设备,块设备和网络设备。这里以字符设备为例。在不借助设备模型和驱动子系统的情况下,写一个最基本的字符设备的驱动,主要是实现 cdev 结构体,这个结构体里最重要的是 file_转载 2014-01-21 23:02:30 · 911 阅读 · 0 评论 -
Linux内核栈信息获取与理解
Linux内核栈信息获取与理解1 内核栈获取C语言的函数调用,是通过栈来实现的。如下图所示: 函数调用栈内核异常或死机时,经常在内核日志中看到打印的栈信息和寄存器值。从函数栈信息,我们可以知道函数间的调用关系,从栈和寄存器数据,还可以得到各个变量、参数的值。对Linux内核理解和故障定位非常有帮助。若希望打印出栈信息的转载 2014-02-25 09:00:13 · 3060 阅读 · 0 评论 -
Linux内核链表的研究与应用
Linux内核链表的研究与应用(“2012年度CSDN博客之星”评选,欢迎为我投上一票,多谢)Author:tiger-johnTime:2012-12-20Mail:jibo.tiger@gmail.comBlog:http://blog.csdn.net/tigerjb/article/details/8299599转载请注明出处。前转载 2014-02-28 09:23:51 · 479 阅读 · 0 评论 -
offset宏的讲解
1.offset宏讲解#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE*)0)->MEMBER)对这个宏的讲解我们大致可以分为以下4步进行讲解:1>( (TYPE *)0 ) 0地址强制 "转换" 为 TYPE结构类型的指针;2>((TYPE *)0)->MEMBER 访问TYPE结构中的MEMBER数据成员;转载 2014-02-28 09:22:36 · 680 阅读 · 0 评论 -
container_of分析
1.container_of宏1> Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。2>接口:container_of(ptr, type, member) ptr:表示结构体中member的地址 type:表示结构体类型 membe转载 2014-02-28 09:23:12 · 556 阅读 · 0 评论 -
Android RTC 自下往上浅析
1.首先搞清楚RTC在kernel内的作用: linux系统有两个时钟:一个是由主板电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟,硬件时钟。当操作系统关机的时候,用这个来记录时间,但是对于运行的系统是不用这个时间的。另一个时间是 “System clock”也叫内核时钟或者软件时钟,是由软件根据时间中断来进行计数的,内核时钟在系统关机的情况下是不存在的,所以,转载 2014-03-29 15:06:52 · 1527 阅读 · 0 评论 -
Android wakelock 自上而下浅析
Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得. 这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁. 如果没有锁了或者超时了, 内核就会启动休眠的那套机制来进入休眠.PowerManager.WakeLock 有加锁和解锁两种状态,加锁的方式有两种,一种是永久的锁住,这样的锁除非显式的放开,是不会解锁的,所以这种锁用转载 2014-03-29 15:10:40 · 757 阅读 · 0 评论 -
Android Alarm自上而下 调试浅析
1.为了创建一个新的Alarm,使用set方法并指定一个Alarm类型、触发时间和在Alarm触发时要调用的Intent。如果你设定的Alarm发生在过去,那么,它将立即触发。这里有4种Alarm类型。你的选择将决定你在set方法中传递的时间值代表什么,是特定的时间或者是时间流逝:❑ RTC_WAKEUP在指定的时刻(设置Alarm的时候),唤醒设备来触发Intent。转载 2014-03-29 15:08:34 · 4859 阅读 · 0 评论 -
C语言结构体里的成员数组和指针---from coolshell
单看这文章的标题,你可能会觉得好像没什么意思。你先别下这个结论,相信这篇文章会对你理解C语言有帮助。这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接。微博截图如下。我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章。为了方便你把代码copy过去编译和调试,我把代码列在下面:123456转载 2014-04-01 09:34:57 · 4723 阅读 · 0 评论 -
谁说C语言很简单?---from coolshell
前两天,Neo写了一篇《语言的歧义》其使用C语言讨论了一些语言的歧义。大家应该也顺便了解了一下C语言中的很多不可思异的东西,可能也是你从未注意到的东西。是的,C语言并不简单,让我们来看看下面这些示例:为什么下面的代码会返回0?(这题应该很简单吧) int x; return x == (1 && x);本题主要是关于C/C++中变量初始化的问题。转载 2014-04-01 11:40:08 · 611 阅读 · 0 评论 -
C语言的谜题---from coolshell
这几天,本站推出了几篇关于C语言的很多文章如下所示:语言的歧义 [酷壳链接] [CSDN链接]谁说C语言很简单? [酷壳链接] [CSDN链接]6个变态的C语言Hello World程序 [酷壳链接] [CSDN链接]如何加密/弄乱C源代码 [酷壳链接] [CSDN链接]C语言的谜题 [酷壳链接] [CSDN链接]我们可以看到很多C语言相关的一些东西。比如《语言的歧义》主要告诉转载 2014-04-01 14:35:27 · 527 阅读 · 0 评论 -
深入理解C语言---from coolshell
Dennis Ritchie 过世了,他发明了C语言,一个影响深远并彻底改变世界的计算机语言。一门经历40多年的到今天还长盛不衰的语言,今天很多语言都受到C的影响,C++,Java,C#,Perl, PHP, Javascript, 等等。但是,你对C了解吗?相信你看过本站的《C语言的谜题》还有《谁说C语言很简单?》,这里,我再写一篇关于深入理解C语言的文章,一方面是缅怀Dennis,另一方面是转载 2014-04-01 11:53:35 · 540 阅读 · 0 评论 -
bugfix:reboot模式下不能开机
system:android4.2platform:rk3026pum: axp192系统在插充电器的时候关机进入充电模式,当显示电池图标的时候不能开机,黑屏的时候能开机。henglong@henglong-desktop:~/projects/ricks/rk3026/kernel$ git show 58af187f647e66cfcc5a86508bf2ee0ed69a1原创 2014-03-26 20:42:37 · 1340 阅读 · 1 评论 -
sprintf函数的用法
sprintf() 格式化输出函数(图形)功能: 函数sprintf()用来作格式化的输出。用法: 此函数调用方式为int sprintf(char *string,char *format,arg_list);说明: 函数sprintf()的用法和printf()函数一样,只是sprintf()函数给出第一个参数string(一般为字符数组),然后再调用outtextxy()函数将串转载 2014-03-26 18:34:51 · 722 阅读 · 0 评论 -
INIT_WORK和INIT_DELAYED_WORK详解
朋友,你相信,一只蝴蝶在北京拍拍翅膀,将使得纽约几个月后出现比狂风还厉害的龙卷风吗?看过那部经典的影片蝴蝶效应的朋友们一定会说,这不就是蝴蝶效应吗.没错.蝴蝶效应其实是混沌学理论中的一个概念.它是指对初始条件敏感性的一种依赖现象.蝴蝶效应的原因在于蝴蝶翅膀的运动,导致其身边的空气系统发生变化,并引起微弱气流的产生,而微弱气流的产生又会引起它四周空气或其它系统产生相应的变化,由此引起连锁反应,最终导转载 2017-06-06 17:18:11 · 923 阅读 · 0 评论