<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[DroidPhone的专栏]]></title><description><![CDATA[欢迎各位大虾交流，本人联系方式：droid.phx@gmail.com]]></description><link>https://blog.youkuaiyun.com/DroidPhone</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; DroidPhone]]></copyright><item><title><![CDATA[已知二叉树的前序遍历和中序遍历，如何得到它的后序遍历？]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/38063897</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/38063897</guid><author>DroidPhone</author><pubDate>Wed, 23 Jul 2014 17:28:26 +0800</pubDate><description><![CDATA[对一颗二叉树进行遍历，我们可以采取3中顺序进行遍历，分别是前序遍历、中序遍历合后序遍历。这三种方式是以访问父节点的顺序来进行命名的。假设父节点是N，左节点是L，右节点是R，那么对应的访问遍历顺序如下：]]></description><category></category></item><item><title><![CDATA[Linux SPI总线和设备驱动架构之四：SPI数据传输的队列化]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/24663659</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/24663659</guid><author>DroidPhone</author><pubDate>Mon, 28 Apr 2014 21:00:55 +0800</pubDate><description><![CDATA[我们知道，SPI数据传输可以有两种方式：同步方式和异步方式。所谓同步方式是指数据传输的发起者必须等待本次传输的结束，期间不能做其它事情，用代码来解释就是，调用传输的函数后，直到数据传输完成，函数才会返回。而异步方式则正好相反，数据传输的发起者无需等待传输的结束，数据传输期间还可以做其它事情，用代码来解释就是，调用传输的函数后，函数会立刻返回而不用等待数据传输完成，我们只需设置一个回调函数，传输完成]]></description><category></category></item><item><title><![CDATA[Linux SPI总线和设备驱动架构之三：SPI控制器驱动]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/24353293</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/24353293</guid><author>DroidPhone</author><pubDate>Wed, 23 Apr 2014 23:03:48 +0800</pubDate><description><![CDATA[通过第一篇文章，我们已经知道，整个SPI驱动架构可以分为协议驱动、通用接口层和控制器驱动三大部分。其中，控制器驱动负责最底层的数据收发工作，为了完成数据的收发工作，控制器驱动需要完成以下这些功能：
1.    申请必要的硬件资源，例如中断，DMA通道，DMA内存缓冲区等等；
2.    配置SPI控制器的工作模式和参数，使之可以和相应的设备进行正确的数据交换工作；
3.    利用通用接口层]]></description><category></category></item><item><title><![CDATA[Linux SPI总线和设备驱动架构之二：SPI通用接口层]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/23932447</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/23932447</guid><author>DroidPhone</author><pubDate>Fri, 18 Apr 2014 17:02:38 +0800</pubDate><description><![CDATA[通过上一篇文章的介绍，我们知道，SPI通用jie k]]></description><category></category></item><item><title><![CDATA[Linux SPI总线和设备驱动架构之一：系统概述]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/23367051</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/23367051</guid><author>DroidPhone</author><pubDate>Sat, 12 Apr 2014 08:36:45 +0800</pubDate><description><![CDATA[/*****************************************************************************************************/
声明：本博内容均由http://blog.youkuaiyun.com/droidphone原创，转载请注明出处，谢谢！
/**************************************]]></description><category></category></item><item><title><![CDATA[ALSA声卡驱动中的DAPM详解之七：dapm事件机制（dapm event）]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/14548631</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/14548631</guid><author>DroidPhone</author><pubDate>Sat, 09 Nov 2013 01:05:58 +0800</pubDate><description><![CDATA[前面的六篇文章，我们已经讨论了dapm关于动态电源管理的有关知识，包括widget的创建和初始化，widget之间的连接以及widget的上下电顺序等等。本章我们准备讨论dapm框架中的另一个机制：事件机制。通过dapm事件机制，widget可以对它所关心的dapm事件做出反应，这种机制对于扩充widget的能力非常有用，例如，对于那些位于codec之外的widget，好像喇叭功放、外部的前置放大]]></description><category></category></item><item><title><![CDATA[ALSA声卡驱动中的DAPM详解之六：精髓所在，牵一发而动全身]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/14146319</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/14146319</guid><author>DroidPhone</author><pubDate>Mon, 04 Nov 2013 23:20:41 +0800</pubDate><description><![CDATA[设计dapm的主要目的之一，就是希望声卡上的各种部件的电源按需分配，需要的就上电，不需要的就下电，使得整个音频系统总是处于最小的耗电状态，最主要的就是，这一切对用户空间的应用程序是透明的，也就是说，用户空间的应用程序无需关心那个部件何时需要电源，它只要按需要设定好音频路径，播放音频数据，暂停或停止，dapm框架会根据音频路径，完美地对各种部件的电源进行控制，而且精确地按某种顺序进行，防止上下电过程]]></description><category></category></item><item><title><![CDATA[ALSA声卡驱动中的DAPM详解之五：建立widget之间的连接关系]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/14052861</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/14052861</guid><author>DroidPhone</author><pubDate>Mon, 04 Nov 2013 21:25:32 +0800</pubDate><description><![CDATA[前面我们主要着重于codec、platform、machine驱动程序中如何使用和建立dapm所需要的widget，route，这些是音频驱动开发人员必须要了解的内容，经过前几章的介绍，我们应该知道如何在alsa音频驱动的3大部分（codec、platform、machine）中，按照所使用的音频硬件结构，定义出相应的widget，kcontrol，以及必要的音频路径，而在本章中，我们将会深入da]]></description><category></category></item><item><title><![CDATA[ALSA声卡驱动中的DAPM详解之四：在驱动程序中初始化并注册widget和route]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/13756651</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/13756651</guid><author>DroidPhone</author><pubDate>Fri, 01 Nov 2013 22:41:41 +0800</pubDate><description><![CDATA[前几篇文章我们从dapm的数据结构入手，了解了代表音频控件的widget，代表连接路径的route以及用于连接两个widget的path。之前都是一些概念的讲解以及对数据结构中各个字段的说明，从本章开始，我们要从代码入手，分析dapm的详细工作原理：


如何注册widget如何连接两个widget一个widget的状态裱画如何传递到整个音频路径中
/*******************]]></description><category></category></item><item><title><![CDATA[ALSA声卡驱动中的DAPM详解之三：如何定义各种widget]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/12978287</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/12978287</guid><author>DroidPhone</author><pubDate>Thu, 24 Oct 2013 21:01:12 +0800</pubDate><description><![CDATA[/*****************************************************************************************************/
声明：本博内容均由http://blog.youkuaiyun.com/droidphone原创，转载请注明出处，谢谢！
/**************************************]]></description><category></category></item><item><title><![CDATA[ALSA声卡驱动中的DAPM详解之二：widget-具备路径和电源管理信息的kcontrol]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/12906139</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/12906139</guid><author>DroidPhone</author><pubDate>Wed, 23 Oct 2013 20:31:07 +0800</pubDate><description><![CDATA[上一篇文章中，我们介绍了音频驱动中对基本控制单元的封装：kcontrol。利用kcontrol，我们可以完成对音频系统中的mixer，mux，音量控制，音效控制，以及各种开关量的控制，通过对各种kcontrol的控制，使得音频硬件能够按照我们预想的结果进行工作。同时我们可以看到，kcontrol还是有以下几点不足：
只能描述自身，无法描述各个kcontrol之间的连接关系；
没有相应的电源管理]]></description><category></category></item><item><title><![CDATA[ALSA声卡驱动中的DAPM详解之一：kcontrol]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/12793293</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/12793293</guid><author>DroidPhone</author><pubDate>Fri, 18 Oct 2013 15:19:50 +0800</pubDate><description><![CDATA[DAPM是Dynamic Audio Power Management的缩写，直译过来就是动态音频电源管理的意思，DAPM是为了使基于linux的移动设备上的音频子系统，在任何时候都工作在最小功耗状态下。DAPM对用户空间的应用程序来说是透明的，所有与电源相关的开关都在ASoc core中完成。用户空间的应用程序无需对代码做出修改，也无需重新编译，DAPM根据当前激活的音频流（playback/c]]></description><category></category></item><item><title><![CDATA[Linux动态频率调节系统CPUFreq之三：governor]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/9532999</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/9532999</guid><author>DroidPhone</author><pubDate>Tue, 30 Jul 2013 12:48:02 +0800</pubDate><description><![CDATA[在上一篇文章中，介绍了cpufreq的core层，core提供了cpufreq系统的初始化，公共数据结构的建立以及对cpufreq中其它子部件提供注册功能。core的最核心功能是对policy的管理，一个policy通过cpufreq_policy结构中的governor字段，和某个governor像关联，本章的内容正是要对governor进行讨论。
/*********************]]></description><category></category></item><item><title><![CDATA[Linux动态频率调节系统CPUFreq之二：核心（core）架构与API]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/9385745</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/9385745</guid><author>DroidPhone</author><pubDate>Sat, 20 Jul 2013 19:00:59 +0800</pubDate><description><![CDATA[上一节中，我们大致地讲解了一下CPUFreq在用户空间的sysfs接口和它的几个重要的数据结构，同时也提到，CPUFreq子系统把一些公共的代码逻辑组织在一起，构成了CPUFreq的核心部分，这些公共逻辑向CPUFreq和其它内核模块提供了必要的API，像cpufreq_governor、cpufreq_driver等模块通过这些API来完成一个完整的CPUFreq体系。这一节我们就来讨论一下核心]]></description><category></category></item><item><title><![CDATA[Linux动态频率调节系统CPUFreq之一：概述]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/9346981</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/9346981</guid><author>DroidPhone</author><pubDate>Wed, 17 Jul 2013 21:43:50 +0800</pubDate><description><![CDATA[随着技术的发展，我们对CPU的处理能力提出了越来越高的需求，芯片厂家也对制造工艺不断地提升。现在的主流PC处理器的主频已经在3GHz左右，就算是智能手机的处理器也已经可以工作在1.5GHz以上，可是我们并不是时时刻刻都需要让CPU工作在最高的主频上，尤其是移动设备和笔记本电脑，大部分时间里，CPU其实工作在轻负载状态下，我们知道：主频越高，功耗也越高。为了节省CPU的功耗和减少发热，我们有必要根据]]></description><category></category></item><item><title><![CDATA[Linux输入子系统：多点触控协议 -- multi-touch-protocol.txt]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/8434768</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/8434768</guid><author>DroidPhone</author><pubDate>Tue, 25 Dec 2012 19:30:04 +0800</pubDate><description><![CDATA[Multi-touch (MT) Protocol
-------------------------
         Copyright(C) 2009-2010 Henrik Rydberg
 简介
------------
    为了发挥新近的多点触摸和多用户设备的强大功能，为多点触摸定义一种上报详细数据的方法（比如有多个物体直接接触到设备的表面），是非常有必要的。这篇文档描述]]></description><category></category></item><item><title><![CDATA[Linux输入子系统：输入设备编程指南 -- input-programming.txt]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/8432151</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/8432151</guid><author>DroidPhone</author><pubDate>Tue, 25 Dec 2012 10:14:13 +0800</pubDate><description><![CDATA[输入设备编程指南（Programming input drivers）
~~~~~~~~~~~~~~~~~~~~~~~~~

1. 新建一个输入设备驱动程序
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1.0 一个最简单的例子
~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~]]></description><category></category></item><item><title><![CDATA[Linux输入子系统：事件的编码 -- event-codes.txt]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/8432055</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/8432055</guid><author>DroidPhone</author><pubDate>Tue, 25 Dec 2012 09:57:39 +0800</pubDate><description><![CDATA[输入系统协议用类型types和编码codecs来表示输入设备的值并用此来通知用户空间的应用程序。这篇文档对这些类型和编码进行了说明并且指出什么时候和如何使用这些类型和编码。
 一个单一的硬件事件可以产生多个输入事件，每个输入事件包含一个单一数据项的新的数据值。EV_SYN是一个特别的事件类型，它用来把同一时刻产生的多个输入数据分割为多个数据包。在下面的描述中，术语事件（event）是指一个涵盖类]]></description><category></category></item><item><title><![CDATA[Linux输入子系统：input.txt]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/8432013</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/8432013</guid><author>DroidPhone</author><pubDate>Tue, 25 Dec 2012 09:37:12 +0800</pubDate><description><![CDATA[Linux Input drivers v1.0
                (c) 1999-2001 Vojtech Pavlik
                                 Sponsored by SuSE
----------------------------------------------------------------------------]]></description><category></category></item><item><title><![CDATA[Linux时间子系统之八：动态时钟框架（CONFIG_NO_HZ、tickless）]]></title><link>https://blog.youkuaiyun.com/DroidPhone/article/details/8112948</link><guid>https://blog.youkuaiyun.com/DroidPhone/article/details/8112948</guid><author>DroidPhone</author><pubDate>Sat, 27 Oct 2012 16:01:44 +0800</pubDate><description><![CDATA[在前面章节的讨论中，我们一直基于一个假设：Linux中的时钟事件都是由一个周期时钟提供，不管系统中的clock_event_device是工作于周期触发模式，还是工作于单触发模式，也不管定时器系统是工作于低分辨率模式，还是高精度模式，内核都竭尽所能，用不同的方式提供周期时钟，以产生定期的tick事件，tick事件或者用于全局的时间管理（jiffies和时间的更新），或者用于本地cpu的进程统计、时]]></description><category></category></item></channel></rss>