linux相关
文章平均质量分 65
mrwangwang
这个作者很懒,什么都没留下…
展开
-
Linux driver model ----- platform
作者 : YiLi Xie yili.xie@gmail.com日期 : 2010-1-25欢迎转载,请注明出处 Platform Device and Drivers从我们可以了解Platform bus上面的驱动模型接口:platform_device,platform_driver。和PCI和USB这些大结构的总线不同,虚拟总线Platfo转载 2012-11-02 21:18:03 · 316 阅读 · 0 评论 -
内核定时器的使用
内核定时器的使用LINUX内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于 和 kernel/timer.c 文件中。被调度的函数肯定是异步执行的,它类似于一种“软件中断”,而且是处于非进程的上下文中,所以调度函数必须遵守以下规则:1) 没有 current 指针、不允许访问用户空间。因为没有进程上下文,相关代码和被中断的进程没有任转载 2012-11-10 12:41:27 · 412 阅读 · 0 评论 -
ARM Linux S3C2440 之中断分析
硬件篇:S3C2440 是arm920T架构,先温习一下s3c2440中的中断控制器原理和相关硬件构架。中断控制器(InterruptControler):S3c2440A的中断控制器有60个中断源,如DMA中断,UART中断,IIC中断等,60个中断源在寄存器中用相应的位来表示。当有多个中断要求到来时,经过仲裁过程后,中断控制器向CPU请求FIQ或者IRQ中断。仲裁过程根据硬件中的优转载 2012-11-26 13:58:26 · 1108 阅读 · 0 评论 -
Kernel硬件中断的初始化流程
Kernel硬件中断的初始化流程Porting kernel到一个全新的开发板时,通常hardware irq的初始化函数是要我们自己实现的。 那我们实现了自己硬件的中断初始化函数之后,内核是如何调用到它的呢?内核有自己的一套支持多平台的架构。下面我们分析内核中断初始化的过程以及如何调用到一个新平台的irq初始化函数。 这里我们以s3c2410平台为例,他的中断初始化函数定义在:转载 2012-11-26 14:16:32 · 858 阅读 · 0 评论 -
ARM中断原理, 中断嵌套的误区,中断号的怎么来的 .
几天前一个学生问我ARM中断嵌套的问题,我才发现原在我心中理所当然的事对学生来说理解实属不易。 ARM有七种模式,我们这里只讨论SVC、IRQ和FIQ模式。 我们可以假设ARM核心有两根中断引脚(实际上是看不见的),一根叫 irq pin, 一根叫fiq pin. 在ARM的cpsr中,有一个I位和一个F位,分别用来禁止IRQ和FIQ的。 先不说中断转载 2012-11-26 16:09:50 · 1041 阅读 · 0 评论 -
从spin_lock到spin_lock_irqsave
Spinlock的目的是用来同步SMP中会被多个CPU同时存取的变量。在Linux中,普通的spinlock由于不带额外的语义,是用起来反而要非常小心。 在Linux kernel中执行的代码大体分normal和interrupt context两种。tasklet/softirq可以归为normal因为他们可以进入等待Spinlock的目的是用来同步SMP中会被多个CPU同时存取的变量。转载 2012-11-27 17:20:14 · 543 阅读 · 0 评论 -
arm平台下spin lock的使用
spin lock在单核模式下没有被实现,所以有个疑惑,既然没有被实现,为什么arm平台下的驱动大量使用spin lock做同步?于是发了下面的帖子:http://linux.chinaunix.net/bbs/viewthread.php?tid=1166946&extra=有个网友的回复很好,snail_314的回复:“spin lock未实现并不意味着spin_lock_ir转载 2012-11-27 21:20:07 · 989 阅读 · 0 评论 -
一个buf.一个read_buf
数据最终会通过tty-> receive_buf()将数据放入read_buf.在这段代码中,有几个很有意思的处理。在进入工作队列的时候,首先会置TTY_FLUSHING标志.如果有进程在读read_buf的时候,如果此标志被置位,就会设置TTY_FLUSHPENDING标志,并进行睡眠。在数据处理完成之后,判断是否有TTY_FLUSHPENDING标志。如果有,则将读进程唤醒.并清除TTY_转载 2012-11-13 16:30:09 · 1501 阅读 · 0 评论 -
Linux内核中ioremap映射的透彻理解 .
几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I/O映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的转载 2012-11-15 16:47:18 · 461 阅读 · 0 评论 -
linux内核中断 ----- tasklet 分析 .
Tasklet机制是一种较为特殊的软中断。Tasklet一词的原意是“小片任务”的意思,这里是指一小段可执行的代码,且通常以函数的形式出现。软中断向量HI_SOFTIRQ和TASKLET_SOFTIRQ均是用tasklet机制来实现的。从某种程度上讲,tasklet机制是Linux内核对BH机制的一种扩展。在2.4内核引入了softirq机制后,原有的BH机制正是通过tasklet机制这个桥梁转载 2012-11-17 15:39:53 · 428 阅读 · 0 评论 -
Linux设备驱动编程之中断处理
与Linux设备驱动中中断处理相关的首先是申请与释放IRQ的API request_irq()和free_irq(),request_irq()的原型为:int request_irq(unsigned int irq,void (*handler)(int irq, void *dev_id, struct pt_regs *regs),unsigned long i转载 2012-11-17 14:34:34 · 376 阅读 · 0 评论 -
带参数的中断程序实例
中断服务程序一般都是在中断请求关闭的条件下执行的,以避免嵌套而使中断控制复杂化。但是,中断是一个随机事件,它随时会到来,如果关中断的时间太长,CPU就不能及时响应其他的中断请求,从而造成中断的丢失。因此,内核的目标就是尽可能快的处理完中断请求,尽其所能把更多的处理向后推迟。例如,假设一个数据块已经达到了网线,当中断控制器接受到这个中断请求信号时,Linux内核只是简单地标志数据到来了,然后让处理器转载 2012-11-17 15:07:03 · 1631 阅读 · 0 评论 -
Linux内核-工作队列的使用
Linux 2.6内核使用了不少工作队列来处理任务,他在使用上和 tasklet最大的不同是工作队列的函数可以使用休眠,而tasklet的函数是不允许使用休眠的。 工作队列的使用又分两种情况,一种是利用系统共享的工作队列来添加自己的工作,这种情况处理函数不能消耗太多时间,这样会影响共享队列中其他任务的处理;另外一种是创建自己的工作队列并添加工作。 (一)利用系统共享的工作队列添转载 2012-11-17 17:09:18 · 523 阅读 · 0 评论 -
Linux中的工作队列
工作队列(work queue)是Linux kernel中将工作推后执行的一种机制。这种机制和BH或Tasklets不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在于它允许重新调度甚至睡眠。工作队列是2.6内核开始引入的机制,在2.6.20之后,工作队列的数据结构发生了一些变化,因此本文分成两个部分对2.6.20之前和之后的版本分别做介绍。I、转载 2012-11-17 18:03:04 · 374 阅读 · 0 评论 -
linux 内核分析之list_head
本文详细分析了 2.6.x 内核中链表结构的实现,并通过实例对每个链表操作接口进行了详尽的讲解。一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序转载 2012-11-20 20:39:34 · 378 阅读 · 0 评论 -
u-boot分析(2)
前面已经准备好了sp指针,而且pc也指向了start_armboot,下面就该运行这个c函数了。start_armboot()在lib_arm/board.c中,我想一行一行的分析,练习基本功。void start_armboot (void)首先分析参数和返回值(由于不是计算机专业毕业的,只能做些基础的分析),这个函数的返回值和参数都是空,它对系统的影响只能体现在对全局量转载 2012-12-10 21:57:54 · 1181 阅读 · 0 评论 -
U-boot分析(4)
274 void main_loop (void) 275 { 276 #ifndef CONFIG_SYS_HUSH_PARSER 277 static char lastcommand[CONFIG_SYS_CBSIZE] = { 0, }; 278 int len; 279 int rc = 1转载 2012-12-10 22:01:36 · 648 阅读 · 0 评论 -
U-boot分析(5)
接下来就进入命令行了,u-boot有好多命令,它们的运行又牵扯到一堆东西。挑几个觉得会用到的命令看看1. bootm 987 U_BOOT_CMD( 988 bootm, CONFIG_SYS_MAXARGS, 1, do_bootm, 989 "boot application image from mem转载 2012-12-10 22:02:27 · 1051 阅读 · 0 评论 -
Linux-网桥原理分析 .
Linux-网桥原理分析 http://biancheng.dnbcw.info/linux/244269.html 目 录1..... 前言... 62 网桥的原理... 72.1 桥接的概念... 72.2 linux的桥接实现... 82.3 网桥的功能... 93转载 2012-12-23 18:37:37 · 18641 阅读 · 1 评论 -
Linux内核--网络栈实现分析(一)--网络栈初始化
本文分析基于内核Linux Kernel 1.2.13原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7488828更多请看专栏,地址http://blog.csdn.net/column/details/linux-kernel-net.html作者:闫明以后的系列博文将深入分析Linux内核的网络栈实现原转载 2012-12-24 17:20:27 · 668 阅读 · 0 评论 -
U-boot分析(3)
上面算是把初始化的第一个阶段完成,下面还需要接着初始化void start_armboot (void) 298 299 mem_malloc_init (_armboot_start - CONFIG_SYS_MALLOC_LEN,300 CONFIG_SYS_MALLOC_LEN);CONF转载 2012-12-10 21:59:11 · 953 阅读 · 0 评论 -
U-boot分析(1)
1. u-boot是一款功能十分强大的bootloader,分析其代码,获悉bootloader的基本写法。 2. 以sbc2410这块开发板为例分析,u-boot版本为2010.03。 3. cpu相关部分3.1 cpu在硬件上就是一个门阵列,是一个完全的逻辑器件,它提供了指令集,对cpu的控制就是靠对cpu发送相关指令实现的。这些指令是一连串的二进制码,转载 2012-12-10 21:56:39 · 666 阅读 · 0 评论 -
Linux bridge
特别值得一提的是Linux bridge有很多值得学习的地方,这里我们主要介绍Linux bridge,包括介绍Linux bridge等方面。Linux bridge 下流量控制等 (Netemulator,tc)netem provides Network Emulation functionality for testing protocols by emulating the pr转载 2012-12-10 21:48:56 · 6805 阅读 · 0 评论 -
Linux内核--网络栈实现分析(二)--数据包的传递过程(上)
本文分析基于Linux Kernel 1.2.13原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7492423更多请看专栏,地址http://blog.csdn.net/column/details/linux-kernel-net.html作者:闫明注:标题中的”(上)“,”(下)“表示分析过程基于数据包的传转载 2012-12-24 21:20:21 · 818 阅读 · 0 评论 -
bfd库
什么是 BFD? Binary format descriptor, 即二进制文件格式描述符,它是连接工具(ld)和二进制文件操作工具(bin-util)实现对于目标文件操作的标准接口,ld和bin-util通过调用实现BFD接口的库libbfd 来实现它们的目标文件操作功能。 BFD的结构 BFD整体上简单地可分为前端和后端(就象gcc一样),这样做的目的主要出于可移植性的考转载 2012-12-11 19:52:32 · 1600 阅读 · 1 评论 -
嵌入式Linux系统中的.lds链接脚本基础
连接脚本的格式====================连接脚本是文本文件.你写了一系列的命令作为一个连接脚本. 每一个命令是一个带有参数的关键字,或者是一个对符号的赋值. 你可以用分号分隔命令. 空格一般被忽略.文件名或格式名之类的字符串一般可以被直接键入. 如果文件名含有特殊字符,比如一般作为分隔文件名用的逗号, 你可以把文件名放到双引号中. 文件名中间无法使用双引号转载 2012-12-11 21:56:19 · 887 阅读 · 0 评论 -
find 的-regex怎么用,用它怎么一直没有反映
1. 与-name, -iname最大的区别就在于 -regex是把find输出的整个结果(有别于绝对路径名)作为要匹配的对象, 而不仅仅是结果的最后一部分, 举例/tmp目录下有且仅有 aaa, aa, 1, 2 这些文件find -name "a*"可以找到aaa和aa而find /tmp -regex "a*"就不行, 它一个都找不到, 因为找到的每个结果是这样的转载 2013-04-11 20:26:35 · 1177 阅读 · 0 评论 -
Linux中find常见用法示例
·find path -option [ -print ] [ -exec -ok command ] {} \;find命令的参数;pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。-print: find命令将匹配的文件输出到标准输出。-exec: find命令对匹配的文件执行该参数所给出的shell转载 2013-04-11 20:36:39 · 524 阅读 · 0 评论 -
semaphore与Mutex
C# Semaphore Classhttp://msdn.microsoft.com/en-us/library/system.threading.semaphore.aspxwikiSemaphore (programming)http://en.wikipedia.org/wiki/Semaphore_%28programming%29理解Semaphore和转载 2013-07-19 11:28:45 · 735 阅读 · 0 评论 -
补丁制作与应用—diff和patch命令的使用
谈及linux补丁(patch)及其patch操作,自然而然地觉其复杂,故一直存敬畏之心,所以也就一直远离它。但像做嵌入式linux开发,有时候patch是无法绕过的。对于补丁制作与应用,实际上就是掌握linux diff和patch命令的使用,而这两个命令与linux其它命令一样,也是比较容易掌握的。如果你也有与我之前一样的敬畏心理,建议你不如早早放下这个心理包袱,赶紧掌握这个知识点。关转载 2013-07-22 15:53:01 · 1980 阅读 · 0 评论 -
Linux内存管理(上)
摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存地使用方法。力求从外自内、水到渠成地引导网友分析Linux地内存管理与使用。在本章最后我们给出一个内存映射地实例,帮助网友们理解内核内存管理与用户内存管理之间地关系,希望大家最终能驾驭Linux内存管理。 前言内存管理一向是所有操作系统书籍不惜笔墨重点讨论的内容,无转载 2013-08-07 15:12:36 · 581 阅读 · 0 评论 -
Linux内存管理(下)
物理内存管理(页管理)Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数4k(在i386体系结构中)大小页,从而分配和回收内存的基本单位便是内存页了。利用分页管理有助于灵活分配内存地址,因为分配时不必要求必须有大块的连续内存[1],系统可以东一页、西一页的凑出所需要的内存供进程使用。虽然如此,但是实际上系统使用内存还是倾向于分配连续的内存块,因为分配连续内存时,页表不需要更转载 2013-08-07 15:13:55 · 517 阅读 · 0 评论 -
linux内存文件系统之指南
内存文件系统使用及示例:ramdisk, ramfs, tmpfs 第一部分在Linux中可以将一部分内存mount为分区来使用,通常称之为RamDisk。 RamDisk有三种实现方式: 第一种就是传统意义上的,可以格式化,然后加载。 这在Linux内核2.0/2.2就已经支持,其不足之处是大小固定,之后不能改变。 为了能够使用Ramdisk,我们在编译内核时须将bloc转载 2013-11-01 16:59:35 · 569 阅读 · 0 评论 -
linux驱动子系统之输入子系统(1)
linux驱动子系统之输入子系统(1)1.输入子系统框架1.1 概述内核提供的输入子系统是对分散的、多种不同类别的输入设备(键盘、鼠标、触摸屏、加速计、跟踪球、操纵杆等)进行统一处理的驱动程序。 输入子系统带来的好处:l 抽象底层形态各异的硬件输入设备,为上层提供了统一的操作接口l 提高了代码重用率和效率,减少了bug转载 2014-01-01 11:02:36 · 681 阅读 · 0 评论 -
linux驱动子系统之输入子系统(3)
linux驱动子系统之输入子系统(3)3.设备驱动层3.1 概述负责与底层输入设备通信,实现具体硬件设备驱动,获取硬件产生的事件信息报给上层。本层是要我们实现的,内核也提供了很多设备驱动。 3.2 数据结构和函数l input_dev,子系统中用此结构体来描述一个输入设备struct input_dev{ /转载 2014-01-01 11:24:42 · 535 阅读 · 0 评论 -
linux驱动子系统之输入子系统(5)
linux驱动子系统之输入子系统(5)5. 总结5.1 事件信息的上报过程分析l 上报的大致过程:设备驱动层->核心层->事件处理层->应用层l 具体调用的函数(以evdev为例):input_event()->input_handle_event() ->input_pass_event() ->handle->handler->event(handl转载 2014-01-01 11:38:42 · 564 阅读 · 0 评论 -
linux驱动子系统之输入子系统(2)
linux驱动子系统之输入子系统(2)2. 输入核心层2.1 概述核心层对下提供了设备驱动层的编程接口,对上有提供了事件处理层的编程接口。input.c是核心层实现的文件。 2.2 驱动代码分析l 初始化模块static int __init input_init(void){ err= class_转载 2014-01-01 11:09:34 · 605 阅读 · 0 评论 -
linux驱动子系统之输入子系统(4)
4.事件处理层4.1 概述事件处理层负责和应用层接口,创建设备节点和相关的文件系统文件,把事件信息上报给应用层。每种事件处理层驱动程序都是实现了一个file_operations,当应用调用open,write,read等系统调用访问输入设备文件时,就会调用到file_operations中的方法。4.2 数据结构和函数l Input_handler,用来描述一个转载 2014-01-01 11:33:35 · 630 阅读 · 0 评论 -
Linux驱动子系统之输入子系统(6)-gpio-keys
6.Gpio-keys6.1 概述l Gpio-keys是基于input子系统实现的一个通用的GPIO按键驱动。工程中我们常常会利用它来写按键驱动。 l gpio-keys驱动是基于platform来实现,platform driver(通用的部分)位于drivers/input/keyboard/gpio_keys.c,platform device通常和硬件转载 2014-01-01 11:56:56 · 2939 阅读 · 0 评论 -
linux网络设备—PHY
一.结构体1.PHY设备[cpp]view plaincopystructphy_device{ structphy_driver*drv;//PHY设备驱动 structmii_bus*bus;//对应的MII总线 structdevicedev;//设备文件 u32phy_id;//PHY...转载 2013-12-18 14:45:03 · 13538 阅读 · 2 评论