Linux Kernel
ljzcom
这个作者很懒,什么都没留下…
展开
-
LINUX中的MACH定义之MACHINE_START / MACHINE_END
本文讲解LINUX中用MACHINE_START/MACHINE_END定义的MACH,并给出定义的各个成员函数在初始化过程中被调用的时机。 1. 定义一个MACHLINUX中MACHINE定义是用MACHINE_START()/MACHINE_END两个宏来实现的,比如MSM的实现(arch/arm/mach-msm/board-halibut.c):[cpp]转载 2012-05-31 15:46:02 · 878 阅读 · 0 评论 -
linux EHCI DRIVER之中断处理函数ehci_irq()分析(一)
EHCI的interrupt在HCD中被分为了6种类型,如下宏定义:/* these STS_* flags are also intr_enable bits (USBINTR) */#define STS_IAA (1#define STS_FATAL (1#define STS_FLR (1#define STS_PCD (1#define STS_ERR (1#转载 2014-06-16 10:59:24 · 3405 阅读 · 0 评论 -
linux ehci hcd之qh_urb_transaction()分析(二)
接下来从qtd_fill()中返回到qh_urb_transaction()中,再贴一下返回处的代码,如下1. if (usb_pipecontrol (urb->pipe)) {2. /* SETUP pid */3. qtd_fill(ehci, qtd, urb->setup_dma,4. sizeof (struct usb_ctrlrequest),5. to转载 2014-06-16 10:58:05 · 1916 阅读 · 0 评论 -
linux ehci ehci_urb_enqueue之qh_urb_transaction()分析(一)
以下文字会对linux usb hcd driver中的ehci_urb_enqueue函数做一些说明。先把该函数罗列一下。1. /*2. * non-error returns are a promise to giveback() the urb later3. * we drop ownership so next owner (or urb unlink) can ge转载 2014-06-16 10:56:55 · 2873 阅读 · 0 评论 -
i2c驱动架构(史上最全) davinc dm368 i2c驱动分析
预备知识在阅读本文最好先熟悉一种i2c设备的驱动程序,并且浏览一下i2c-core.c以及芯片提供商的提供的i2c总线驱动(i2c-davinci.c)。标题党请见谅!其实i2c接口非常的简单,即使用51单片的gpio来模拟i2c,编写一个e2prom或者其他i2c接口的驱动程序,也不是什么难事,几百行代码就能搞定。但是Linux的i2c驱动体系结构却有相当的复杂度,不管是转载 2013-07-16 14:50:27 · 5802 阅读 · 0 评论 -
Linux USB Gadget--软件结构
USB Gadget是分层的软件结构,本文分析的是2.6.32.2版本的Gadget软件结构,这个软件结构与以前版本的变化很大。USB Gadget软件结构总共分为三层:一. UDC层 这一层是与硬件相关层。相关文件s3c2410_udc.c s3c2410_udc.h。s3c2410设备控制器作为一个linux设备在这一层是作为platform设备而注册到linux设备模型转载 2013-04-26 10:39:31 · 1403 阅读 · 0 评论 -
Linux系统分析之启动流程
第一部分:内核的引导(核内引导)启动设备使用lilo或grub等引导程序开始引导Linux系统,当引导程序成功完成引导任务后,Linux从它们手中接管了CPU的控制权, 然后CPU就开始执行Linux的核心映象代码,开始了Linux启动过程。这里使用了几个汇编程序来引导Linux,这一步涉及到Linux源代码树中的“arch/i386/boot”下的这几个文件:bootsect.S、setup转载 2012-02-16 13:27:32 · 650 阅读 · 0 评论 -
usb设备的probe全过程
本文将详细讲述2.6.22下的一个USB设备插上linux系统的PC后是如何一步一步调到我们的usb设备驱动的probe函数的, 我们知道我们的USB驱动的probe函数中的一个参数是interface结构, 因此一般来说, 一个USB设备中的任何一个接口都应该有对应的一个驱动程序,当然也有例外(如cdc-acm).我们知道USB设备都是通过插入上层HUB的一个Port来连入系统并进而被系统转载 2012-04-01 17:00:12 · 1294 阅读 · 0 评论 -
linux驱动probe函数调用路程
从driver_register函数开始看起:int driver_register(struct device_driver * drv){if ((drv->bus->probe && drv->probe) || (drv->bus->remove && drv->remove) || (drv->bus->shutdown && drv->shutd原创 2012-05-30 08:48:53 · 2199 阅读 · 0 评论 -
如何成为一个Linux内核开发者(经典)
这篇文章将是这个话题的最权威的文档。它将教你如何成为一个Linux内核开发者以及学会如何和Linux内核社区一起工作。它不包含任何有关内核编程的技术细节,但是会帮你在这方面指明方向。如果这篇文档里任何部分已经过时,请把更新信息以补丁的形式发送给本文的维护者,他的联系方式列在本文档的末尾。介绍好了,你想成知道如何成为一个Linux内核开发者么?或者你的老板告诉你,“去为这个设备写一个Li转载 2012-07-11 15:17:20 · 1804 阅读 · 0 评论 -
Linux Kernel代码分段分析尝试 (__attribute__ 和__init等) .
1. gcc的__attribute__编绎属性要了解Linux Kernel代码的分段信息,需要了解一下gcc的__attribute__的编绎属性,__attribute__主要用于改变所声明或定义的函数或数据的特性,它有很多子项,用于改变作用对象的特性。比如对函数,noline将禁止进行内联扩展、noreturn表示没有返回值、pure表明函数除返回值外,不会通过其它(如全局变量、指针)转载 2012-06-28 10:12:20 · 793 阅读 · 0 评论 -
Linux 内核 Makefile 体系简单分析
众所周知,Linux内核是使用make命令来配置并编译的,那必然少不了Makefile。在内核目录树中我们可以看到内核编译系统的顶层Makefile文件。但是如此复杂、庞大的内核源码绝不可能使用一个或几个Makefile文件来完成配置编译,而是需要一套同样复杂、庞大,且为Linux内核定制的Makefile系统。她可以说是内核的一个子系统,是内核中比较特殊的一部分,几乎都是应用层的程序和脚本,但又转载 2012-06-26 15:17:02 · 910 阅读 · 0 评论 -
LINUX内核中的xx_initcall初始化标号
LINUX内核中有很多的初始化指示标志postcore_initcall(), arch_initcall(), subsys_initcall(), device_initcall(), etc. 这些起什么作用呢?查阅源代码(android goldfish-2.6.29)并搜索网上相关文章,对此做一总结。初始化标号先看这些宏的定义(定义在文件include/linux/init.转载 2012-05-31 15:54:54 · 803 阅读 · 0 评论 -
linux中,arch,processor和mach的关系
解读内核时,有很多近似的词需要区分。不能正确理解将会陷入一片混乱状态。这3个词,我们不给出中文。直接描述其含义。arch:内核目录里面有专用的目录,代表了一种架构。arch是硬件里面最大的分类,那些硬件可以归到同一个arch里面呢?这个取决于指令集。 采用相同硬件指令集的处理器属于同一个arch。同时arch的种类决定了gcc的种类,不同的arch目录必须采用不同的gcc编译。编译arm架构,原创 2012-05-31 13:33:45 · 3276 阅读 · 0 评论 -
Linux Device和Driver注册过程,以及Probe的时机
Linux 2.6的设备驱动模型中,所有的device都是通过Bus相连。device_register() / driver_register()执行时通过枚举BUS上的Driver/Device来实现绑定,本文详解这一过程。这是整个LINUX设备驱动的基础,PLATFORM设备,I2C上的设备等诸设备的注册最终也是调用本文讲述的注册函数来实现的。 Linux Device的注册最终都是转载 2012-05-31 17:13:58 · 814 阅读 · 0 评论 -
linux EHCI DRIVER之中断处理函数ehci_irq()分析(二)
先上代码,1. static void scan_async (struct ehci_hcd *ehci)2. {3. struct ehci_qh *qh;4. bool check_unlinks_later = false;5. 6. ehci->qh_scan_next = ehci->async->qh_next.qh;7. while (ehci-转载 2014-06-16 11:00:42 · 3452 阅读 · 0 评论