- 博客(45)
- 资源 (22)
- 收藏
- 关注
转载 Linux内核态抢占机制分析
摘要】本文首先介绍非抢占式内核(Non-Preemptive Kernel)和可抢占式内核(Preemptive Kernel)的区别。接着分析Linux下有两种抢占:用户态抢占(User Preemption)、内核态抢占(Kernel Preemption)。然后分析了在内核态下:如何判断能否抢占内核(什么是可抢占的条件);何时触发重新调度(何时设置可抢占条件);抢占发生的时机(何时检
2015-08-06 00:01:35
628
转载 Linux内核抢占实现机制分析
【摘要】本系列博文主要介绍linux内核几个重要概念和技术原理,部分来自于网上总结、部分来自于自己对《linux内核设计与实现》和《深入理解linux内核》的总结。目的是让一些刚接触linux内核的人对linux内核的一些实现技术有一个大概了解。1.1 内核抢占 2.6新的可抢占式内核是指内核抢占,即当进程位于内核空间时,有一个更高优先级的任务出现时,如果当前内核允许抢占,则
2015-08-05 23:10:38
601
转载 linux2.6 O(1)调度系统分析
本文转载自http://www.ibm.com/developerworks/cn/linux/kernel/l-kn26sch/1. 前言Linux 的市场非常广阔,从桌面工作站到低端服务器,它都是任何商用操作系统的有力竞争对手。目前,Linux 正全力进军嵌入式系统和高端服务器系统领域,但它的技术缺陷限制了它的竞争力:缺乏对实时任务的支持,多处理机可扩展性差。在 2.4
2015-08-05 22:51:50
1008
转载 linux 2.4调度系统分析
本文转载自http://www.ibm.com/developerworks/cn/linux/kernel/l-k24sch/一. 前言在开源操作系统中,Linux的发展最为显著,到目前为止,它在低端服务器市场已经占据了相当大的份额。从最新的Linux 2.6系统来看,Linux的发展方向主要有两个:嵌入式系统和高端计算领域。调度系统对于操作系统的整体性能有着非常
2015-08-05 22:49:18
867
转载 linux编程常用的函数
总共分为12部分分别是:进程、线程、消息队列、信号量集、共享内存、PGSQL编程、MYSQL编程、网络编程、文件访问、标准I/O、系统数据文件和信息、信号(一) 进程1. 进程ID为0的进程通常是调度进程,常常被称为交换进程进程ID为1的进程通常是init进程,在自举过程结束时由内核调用进程ID为2的进程页守护进程,负责支持虚拟存储系统的分页操作2. pid_t get
2015-08-03 23:40:56
736
原创 atheros无线网卡数据包接收流程
本文主要分析atheros无线网卡数据包接收的流程,主要分析函数调用框架以atheros的UMAC_SUPPORT_APONLY编译选项的开和关两种模式来分析1. APONLY模式情况下:从中断开始:ath_isrdo_ath_israth_isr_aponlyath_intr_aponlyath_
2015-08-03 23:03:50
3233
原创 atheros无线驱动初始化流程
本文主要是描述pci接口的atheros无线驱动的初始化流程先贴一张网上找来的图片,atheros的驱动是分层的从下到上的每一层为:HAL:Hardware Abstraction LayerLMAC: Lower MACUMAC: Upper MACOSIF: OS Interface Layer。1. atheros的主要数据结构:struc
2015-08-03 22:05:21
3080
原创 linux内核的总结
linux内核是什么:1. 编译后的一大推函数集合,很多很多,相信看过systerm.map的都知道2. uboot启动后要被调用的函数,进行好多的初始化,相信看过start_kernel的都知道3. 它与大部分的程序一样是一个死循环,又内核挑选要运行的进程来运行。4. linux内核有几大部分组成,内存管理、进程调度、中断和异常、同步机制、进程间通信、文件系统、驱动、网络协议栈等
2015-08-02 18:07:23
582
转载 Segmentation Fault in Linux 原因与避免
在网上看到一篇很不错的文章,从内核do_page_fault到应用层的代码示例都很清晰,分享下。本文转载自http://www.cnblogs.com/no7dw/archive/2013/02/20/2918372.html1.什么是“Segmentation fault in Linux”? 我们引用wiki上的一段话来回答这个问题。A segment
2015-08-02 18:07:08
1151
转载 ALSA声卡驱动中的DAPM详解之七:dapm事件机制(dapm event)
本文转载自http://blog.youkuaiyun.com/droidphone前面的六篇文章,我们已经讨论了dapm关于动态电源管理的有关知识,包括widget的创建和初始化,widget之间的连接以及widget的上下电顺序等等。本章我们准备讨论dapm框架中的另一个机制:事件机制。通过dapm事件机制,widget可以对它所关心的dapm事件做出反应,这种机制对于扩充widget的能力非
2015-06-23 14:16:04
542
转载 ALSA声卡驱动中的DAPM详解之六:精髓所在,牵一发而动全身
本文转载自http://blog.youkuaiyun.com/droidphone设计dapm的主要目的之一,就是希望声卡上的各种部件的电源按需分配,需要的就上电,不需要的就下电,使得整个音频系统总是处于最小的耗电状态,最主要的就是,这一切对用户空间的应用程序是透明的,也就是说,用户空间的应用程序无需关心那个部件何时需要电源,它只要按需要设定好音频路径,播放音频数据,暂停或停止,dapm框架会根
2015-06-23 14:14:56
893
转载 ALSA声卡驱动中的DAPM详解之五:建立widget之间的连接关系
本文转载自http://blog.youkuaiyun.com/droidphone前面我们主要着重于codec、platform、machine驱动程序中如何使用和建立dapm所需要的widget,route,这些是音频驱动开发人员必须要了解的内容,经过前几章的介绍,我们应该知道如何在alsa音频驱动的3大部分(codec、platform、machine)中,按照所使用的音频硬件结构,定义出相
2015-06-23 14:13:42
504
转载 ALSA声卡驱动中的DAPM详解之四:在驱动程序中初始化并注册widget和route
本文转载自http://blog.youkuaiyun.com/droidphone前几篇文章我们从dapm的数据结构入手,了解了代表音频控件的widget,代表连接路径的route以及用于连接两个widget的path。之前都是一些概念的讲解以及对数据结构中各个字段的说明,从本章开始,我们要从代码入手,分析dapm的详细工作原理:如何注册widget如何连接两个widget一个w
2015-06-23 14:12:53
536
转载 ALSA声卡驱动中的DAPM详解之三:如何定义各种widget
本文转载自http://blog.youkuaiyun.com/droidphone上一节中,介绍了DAPM框架中几个重要的数据结构:snd_soc_dapm_widget,snd_soc_dapm_path,snd_soc_dapm_route。其中snd_soc_dapm_path无需我们自己定义,它会在注册snd_soc_dapm_route时动态地生成,但是对于系统中的widget和rou
2015-06-23 14:11:41
609
转载 ALSA声卡驱动中的DAPM详解之二:widget-具备路径和电源管理信息的kcontrol
本文转载自http://blog.youkuaiyun.com/droidphone上一篇文章中,我们介绍了音频驱动中对基本控制单元的封装:kcontrol。利用kcontrol,我们可以完成对音频系统中的mixer,mux,音量控制,音效控制,以及各种开关量的控制,通过对各种kcontrol的控制,使得音频硬件能够按照我们预想的结果进行工作。同时我们可以看到,kcontrol还是有以下几点不足:
2015-06-23 14:10:26
510
转载 ALSA声卡驱动中的DAPM详解之一:kcontrol
本文转载自http://blog.youkuaiyun.com/droidphoneDAPM是Dynamic Audio Power Management的缩写,直译过来就是动态音频电源管理的意思,DAPM是为了使基于linux的移动设备上的音频子系统,在任何时候都工作在最小功耗状态下。DAPM对用户空间的应用程序来说是透明的,所有与电源相关的开关都在ASoc core中完成。用户空间的应用程序无
2015-06-23 14:09:12
611
转载 Linux ALSA声卡驱动之八:ASoC架构中的Platform
本文转载自http://blog.youkuaiyun.com/droidphone1. Platform驱动在ASoC中的作用前面几章内容已经说过,ASoC被分为Machine,Platform和Codec三大部件,Platform驱动的主要作用是完成音频数据的管理,最终通过CPU的数字音频接口(DAI)把音频数据传送给Codec进行处理,最终由Codec输出驱动耳机或者是喇叭的音信信
2015-06-23 14:07:38
525
转载 Linux ALSA声卡驱动之七:ASoC架构中的Codec
本文转载自http://blog.youkuaiyun.com/droidphone1. Codec简介在移动设备中,Codec的作用可以归结为4种,分别是:对PCM等信号进行D/A转换,把数字的音频信号转换为模拟信号对Mic、Linein或者其他输入源的模拟信号进行A/D转换,把模拟的声音信号转变CPU能够处理的数字信号对音频通路进行控制,比如播放音乐,收听调频收音
2015-06-23 14:06:58
392
转载 Linux ALSA声卡驱动之六:ASoC架构中的Machine
本文转载自http://blog.youkuaiyun.com/droidphone前面一节的内容我们提到,ASoC被分为Machine、Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machine驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个放大器);单
2015-06-23 14:05:11
429
转载 Linux ALSA声卡驱动之五:移动设备中的ALSA(ASoC)
本文转载自http://blog.youkuaiyun.com/droidphone1. ASoC的由来ASoC--ALSA System on Chip ,是建立在标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系。在ASoc出现之前,内核对于SoC中的音频已经有部分的支持,不过会有一些局限性: Codec驱动与SoC CPU的底
2015-06-23 14:03:50
421
转载 Linux ALSA声卡驱动之四:Control设备的创建
本文转载自http://blog.youkuaiyun.com/droidphoneControl接口Control接口主要让用户空间的应用程序(alsa-lib)可以访问和控制音频codec芯片中的多路开关,滑动控件等。对于Mixer(混音)来说,Control接口显得尤为重要,从ALSA 0.9.x版本开始,所有的mixer工作都是通过control接口的API来实现的。
2015-06-23 14:01:53
357
转载 Linux ALSA声卡驱动之三:PCM设备的创建
本文转载自http://blog.youkuaiyun.com/droidphone1. PCM是什么PCM是英文Pulse-code modulation的缩写,中文译名是脉冲编码调制。我们知道在现实生活中,人耳听到的声音是模拟信号,PCM就是要把声音从模拟转换成数字信号的一种技术,他的原理简单地说就是利用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅值
2015-06-23 14:00:05
391
转载 Linux ALSA声卡驱动之二:声卡的创建
本文转载自http://blog.youkuaiyun.com/droidphone1. struct snd_card 1.1. snd_card是什么snd_card可以说是整个ALSA音频驱动最顶层的一个结构,整个声卡的软件逻辑结构开始于该结构,几乎所有与声音相关的逻辑设备都是在snd_card的管理之下,声卡驱动的第一个动作通常就是创建一个snd_card结构体
2015-06-23 13:56:59
374
转载 Linux ALSA声卡驱动之一:ALSA架构简介
一. 概述 ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/。 在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-
2015-06-23 13:54:00
322
原创 mmc驱动框架分析2
mmc驱动框架分析1中,分析了sd卡的初始化流程,本文主要分析sd卡的读写过程。先贴一张图,网上网友画的,非常清晰,表示感谢。
2015-06-22 22:52:08
1710
原创 SCSI驱动框架分析
1. 先来看下SCSI相关的数据结构,主要有scsi_host_template,scsi_host,scsi_target,scsi_device,如果是scsi disk,则又有一个scsi_disk结构。
2015-06-17 09:49:28
9674
1
原创 block IO层框架分析3
1. 在block IO层框架分析2中,我们看到request请求会被提交到IO调度系统中,elv_merge判断bio是否可以被合并到request。在准备好request后,linux块层调用add_request添加request,该函数直接以ELEVATOR_INSERT_SORT为参数直接调用__elv_add_request。在blk_peek_request函数中,调用__e
2015-06-17 09:39:11
1799
原创 block IO层框架分析2
1. 内核层文件读写的函数调用关系sys _readvfs_readdo_sync_readf_op->aio_readgeneric_file_aio_readdo_generic_file_readmpage_readpag
2015-06-16 22:12:39
2282
原创 block IO层框架分析1
1. 相应的结构体struct gendisk { /* major, first_minor and minors are input parameters only, * don't use directly. Use disk_devt() and disk_max_parts(). */ int major; /* major number of driver */
2015-06-14 18:50:05
1596
原创 pci驱动框架
1. 先来看下数据结构struct pci_bus { //根总线链接到全局根总线链表,非根总线,链接到父总线的总线链表中 struct list_head node; /* node in list of buses */ //pci总线的父总线 struct pci_bus *parent; /* parent bus this bridge is on */ //这条pci
2015-06-14 16:06:55
1069
Linux设备驱动(第三版)
2011-04-09
Visual C++串口通信技术与工程实践
2011-04-09
COM原理与应用(潘爱民)
2011-04-09
Android开发教程笔记
2011-04-09
从汇编语言到Windows内核编程
2011-04-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人