- 博客(25)
- 资源 (5)
- 收藏
- 关注
转载 标准linu休眠和唤醒机制分析(一)
说明:1. Based on linux2.6.32,  only for mem(SDR)2. 有兴趣请先参考阅读: 电源管理方案APM和ACPI比较.docLinux系统的休眠与唤醒简介.doc3. 本文先研究标准linux的休眠与唤醒,android对这部分的增改在另一篇文章中讨论4...
2018-10-28 17:56:48 300
原创 Linux网卡
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/huangweiqing80/article/details/83185955在嵌入式SOC上,通常集成有ARM核和MAC控制器,以及增加数据传输带宽的MAC专用DMA,对这种形式的SOC通常使用外接物理PHY设备的方法,外接的PHY芯片如RTL8201F、88E1111、88E6096等,集成型以...
2018-10-25 16:50:00 1270
原创 PCI设备驱动程序
PCI总线是现在非常流行的计算机总线,学会它的驱动设计方法很重要。相信曾经想学习PCI总线驱动的人有这么一个经历,就是去看那些讲解PCI总线驱动的书籍和资料的时候,会被里面繁杂的内容所击败,又是什么配置空间又是什么枚举的,还没开始真正的去写PCI的驱动,到这里就已经开始打退堂鼓了。其实,只要你认真下去,虽然有些东西看不明白,但是对于你写PCI的驱动来说,似乎“不那么重要”。因为,Linux内核对P...
2018-10-24 18:05:40 18917
原创 PCI设备驱动之设备
https://www.cnblogs.com/image-eye/archive/2012/02/15/2352699.html四、PCI设备的枚举探测过程在内核启动过程中,PCI设备的探测过程是完全自动的,内核已经集成好了方法,我们无需更改,在这里还是分析一边代码作为了解。分析之前,先看一下全部的函数调用关系,大致了解一下pci_arch_init /* 判断host/pci桥的类型 ...
2018-10-24 16:22:07 1811
原创 linux内核之工作队列
在我的文章Linux内核:软中断、tasklet中,我们已经了解了中断底半部的两种实现方式,即软中断和tasklet微线程。但是这两种方式归根结底都是采用软中断机制的,其根本上还是在中断的上下文中执行,所以这也就要求了采用这两种方式编写中断底半部,不能出现一些可能导致程序休眠或者是延迟的函数(虽然当发生中断嵌套时会生成Ksoftirq线程,但这个是不确定的,所以我们在编写程序时,还是不能采用具有休...
2018-10-23 15:45:45 1505
原创 Linux内核之tasklet
中断下半部使用tasklet:手把手教你写Linux设备驱动—中断(二)–tasklet实现(基于友善之臂4412开发板)其实,tasklet的实现就是基于软中断的。软中断初始化函数softirq_init()中注册了两个tasklet软中断。void __init softirq_init(void){ ...... //此处注册两个软中断 open_softi...
2018-10-22 17:53:31 215
原创 Linux 之软中断softirq
softirq驱动开发人员一般都不会用到,到内核代码中会用到softirq机制,如在timer定时器中有用到softirq机制。。。下面我们来简单了解一下Linux中的软中断的使用。注册软中断处理函数open_softirqvoid open_softirq(int nr, void (*action) (struct softirq_action *));/** * @nr: 软中...
2018-10-22 16:50:13 2102
原创 linux内核中断
统一入口entry-armv.S .align 5__irq_svc: svc_entry#ifdef CONFIG_TRACE_IRQFLAGS bl trace_hardirqs_off#endif#ifdef CONFIG_PREEMPT get_thread_info tsk ldr r8, [tsk, #TI_PREEMPT] @ get preempt coun...
2018-10-22 15:35:37 305
转载 Linux内核中进程上下文、中断上下文、原子上下文、用户上下文的理解
进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运...
2018-10-22 15:07:54 378
原创 pci总线
https://blog.csdn.net/notbaron/article/details/79643799https://blog.csdn.net/notbaron/article/details/80346988https://blog.csdn.net/zyboy2000/article/details/51971453http://blog.chinaunix.net/uid/2...
2018-10-19 17:45:08 6041
原创 完成量
在驱动程序开发中,一种常见的情况是:一个线程需要等待另一个线程执行完某个操作后,才能继续执行。这个工作其实信号量也可以完成,但其效率比Linux中专门针对这种情况的完成量机制要差些一、完成量概述Linux中提供了一种机制,实现一个线程发送一个信号通知另一个线程开始完成某个任务,这种机制就是完成量。完成量的目的是告诉一个线程某个事件已经发生,可以在此事件基础上做你想做的另一个事件了。二、定义...
2018-10-17 11:39:53 2124
原创 linux内核线程
内核经常需要在后台执行一些操作,这种任务就可以通过内核线程(kernle thread)完成,内核线程是独立运行在内核空间的标准进程。内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,mm指针被设置为NULL;它只在内核空间运行,从来不切换到用户空间去;并且和普通进程一样,可以被调度,也可以被抢占。实际上,内核线程只能由其他内核线程创建,linux驱动模块中可以用kernel_threa...
2018-10-16 18:22:49 19665 1
转载 linux内核等待队列
等待队列在linux内核中有着举足轻重的作用,很多linux驱动都或多或少涉及到了等待队列。因此,对于linux内核及驱动开发者来说,掌握等待队列是必须课之一。 Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。它有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t)。等待队列头和等待...
2018-10-15 17:43:23 310
转载 linux 内核 current全局变量
在内核的API里经常能够见到一个指针current,它表示的是当前的进程(如果说是一个全局变量虽然不合理,但更容易理解)linux 内核 current全局变量
2018-10-15 17:03:37 512
原创 Mutex 互斥锁
1、理解互斥锁?互斥锁的使用也是保持内核临界区的同步的,互斥锁可以说源于信号量,信号量设置计数器可以容许n个进程并发的访问临界区,而互斥锁不行,只能容许每次一个进程访问,也就是计数器值为1的信号量,可以这么理解。互斥锁和自旋锁有不同(显然的),互斥锁在中断处理程序中和可延迟函数中都不能使用,因为它是可以睡眠的,只能在进程上下文或者软中断上下文才能使用。struct mutex {/* 1: ...
2018-10-15 15:59:07 3071 1
原创 linux内核链表
链表有一个“头指针”变量,图中以head表示,它存放了一个地址,该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包含两个部分:用户需要用的数据、下一个结点的地址。这样,head结点指向第一元素,第一个元素指向第二个元素…直到最后一个元素...
2018-10-15 11:11:49 174
原创 信号量
Linux中的常用信号量是锁的另一种实现机制,Linux中提供了两种信号量,一种用于内核程序中,一种用于应用程序中。这里讲解的是内核中的信号量一、信号量概述和自旋锁一样,信号量也是保护临界资源的一种有用方法。信号量只有当得到信号量时,进程或者线程才能够进入临界区,执行临界代码(down等函数后面的代码块)。信号量与自旋锁的最大不同点在于,当一个进程试图去获取一个已经锁定的信号量时,该进程不会...
2018-10-13 17:08:06 23701 3
原创 自旋锁
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/huangweiqing80/article/details/830142921.定义和初始化自旋锁一个自旋锁必须初始化才能被使用,对自旋锁的初始化可以在编译阶段通过宏来实现,初始化自旋锁可以使用宏SPIN_LOCK_UNLOCKED,这个宏表示一个没有锁定的自旋锁。在Linux中,申明定义一个自...
2018-10-12 18:38:00 285
原创 设备驱动中的并发控制
现代操作系统有三大特性:中断处理、多任务处理和多核处理器(SMP)。这些特性导致当多个进程、线程或者CPU同时访问一个资源时,可能会发生错误,这些错误是操作系统运行所不允许的,这就是并发。并发是指在操作系统中,一个时间段中有几个程序正在运行,且这几个程序都是在同一个处理机上运行,但任一时刻点上只有一个程序在处理机上运行。并发容易导致竞争问题。竞争就是两个或者两个以上的新城同时访问同一个资源,从...
2018-10-12 18:04:28 280
原创 USB设备驱动之驱动
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/huangweiqing80/article/details/82999949上一篇文章USB设备驱动之设备讲到USB设备的EEPROM中,固化了设备的一些描述信息和一些程序。当USB设备插入USB插槽时,会引起一个电信号的变化,主机控制器捕获这个电信号,并命令USB核心处理对设备的加载工作。US...
2018-10-11 18:14:25 3175 1
原创 USB设备驱动之设备
USB设备固件固件(Firmware)就是写入EROM或EEPROM中的程序。通俗的理解就是“固化的软件”。更简单的说,固件即使BIOS(基本输入输出软件)的软件,但又与平台软件完全不同,它是固化在集成电路内部的程序代码,负责控制和协调集成电路的功能。USB固件中包含了USB设备的出厂消息,标识该设备的厂商ID、产品ID、主版本号和次版本号等。这就是为什么当我们把U盘插入USB口的时候主机就能知...
2018-10-11 14:32:31 1699
原创 USB系列之Host控制器
USB拓扑对于每个嵌入式的CPU芯片中一般都会集成一个或多个Host 控制器,每个Host控制器其实就是一个PCI设备,挂载在PCI总线上,在Linux系统中,驱动开发人员应该给Host 控制器提供驱动程序,Host 控制器用usb_hcd结构来表示。该结构体在/include/linux/usb/hcd.h中定义。每个USB Host控制器都会自带一个USB Hub,被称为跟(Root)Hu...
2018-10-10 16:14:14 3919
原创 LCD
s3c2410fb_map_video_memory 帧缓冲起始地址s3c2410fb_init_registers 设置引脚类型s3c2410fb_set_par 设置LCD控制器寄存器struct fb_info {atomic_t count;int node;int flags;stru...
2018-10-10 11:51:47 190
原创 Linux输入子系统
一、什么是input输入子系统?1、Linux系统支持的输入设备繁多,例如键盘、鼠标、触摸屏、手柄或者是一些输入设备像体感输入等等,Linux系统是如何管理如此之多的不同类型、不同原理、不同的输入信息的输入设备的呢?其实就是通过input输入子系统这套软件体系来完成的。从整体上来说,input输入子系统分为3层:上层(输入事件驱动层)、中层(输入核心层)、下层(输入设备驱动层),如下图所示:...
2018-10-08 16:48:09 636
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人