<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[执迷不悔]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/dageda1111</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; dageda1111]]></copyright><item><title><![CDATA[proc文件系统API]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/48436941</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/48436941</guid><author>dageda1111</author><pubDate>Mon, 14 Sep 2015 11:23:51 +0800</pubDate><description><![CDATA[内核为创建proc文件提供了一套API，相关API如下：


struct proc_dir_entry *proc_mkdir(constchar *name, struct proc_dir_entry *parent);
该函数用于在proc文件系统中创建一个目录项，大多数时候，当我们期望实现自己的proc文件时，都要先创建一个自己的目录，然后在该目录里创建自己的文件，当然我]]></description><category></category></item><item><title><![CDATA[Linux块设备驱动]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/47273679</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/47273679</guid><author>dageda1111</author><pubDate>Tue, 04 Aug 2015 10:55:09 +0800</pubDate><description><![CDATA[块设备是与字符设备并列的概念，这两类设备在Linux中驱动的结构有较大差异，总体而言，块设备驱动比字符设备驱动要复杂得多，在I/O操作上表现出极大的不同，缓冲、I/O调度、请求队列等都是与块设备驱动相关的概念。本文将详细讲解Linux块设备驱动的编程方法。

1.块设备的I/O操作特点

字符设备与块设备I/O操作的不同如下：

（1）块设备只能以块为单位接受输入]]></description><category></category></item><item><title><![CDATA[理解驱动程序]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/45721303</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/45721303</guid><author>dageda1111</author><pubDate>Thu, 14 May 2015 15:10:20 +0800</pubDate><description><![CDATA[驱动程序就是驱使硬件工作的程序，那么程序是如何驱使硬件工作呢？当然是操作CPU芯片内部提供的各模块控制器的控制寄存器，状态寄存器及数据寄存器，针对这些寄存器进行的读写操作就能够完全的控制硬件工作。
对于只需要进行单任务循环的应用场合，就不需要使用操作系统。在没有操作系统的情况下，设备驱动的接口被直接提交给了应用软件工程师，应用软件没有跨越任何层次就直接访问了设备驱动的接口。驱动包含的接口函数也与]]></description><category></category></item><item><title><![CDATA[Linux驱动程序之poll机制]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/45620799</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/45620799</guid><author>dageda1111</author><pubDate>Sun, 10 May 2015 14:38:27 +0800</pubDate><description><![CDATA[使用非阻塞I/O的应用程序通常会使用select()和poll()系统调用查询是否可对设备进行无阻塞的访问，这两个系统调用最终又会引发设备驱动中的poll()函数被执行，所以我们的问题就集中到了如何编写设备驱动中的poll()函数就可以了。先来看看设备驱动中的poll()函数原型：

unsigned int (*poll)(struct file *filp, struct poll_tab]]></description><category></category></item><item><title><![CDATA[net_device详解]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/45584931</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/45584931</guid><author>dageda1111</author><pubDate>Fri, 08 May 2015 20:59:36 +0800</pubDate><description><![CDATA[网络设备接口层的主要功能是为千变万化的网络设备定义了统一，抽象的数据结构net_device结构体，以不变应万变，实现多种硬件在软件层次上的统一。每一个网络设备都由structnet_device来描述，该结构可使用如下内核函数进行动态分配
struct net_device*alloc_netdev(int sizeof_priv, const char *mask, void(*setup)]]></description><category></category></item><item><title><![CDATA[Linux应用程序之信号量]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/45566455</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/45566455</guid><author>dageda1111</author><pubDate>Thu, 07 May 2015 20:58:24 +0800</pubDate><description><![CDATA[一、什么是信号量

为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题，我们需要一种方法，它可以通过生成并使用令牌来授权，在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访问机制，让一个临界区同一时间只有一个线程在访问它，也就是说信号量是用来调协进程对共享资源的访问的。




信号量是一个特殊的变]]></description><category></category></item><item><title><![CDATA[Linux应用程序之文件]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/40455313</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/40455313</guid><author>dageda1111</author><pubDate>Sat, 25 Oct 2014 19:07:21 +0800</pubDate><description><![CDATA[Linux中的七种文件和七种宏
普通目录S_ISREG()
目录文件S_ISDIR() 
块设备文件S_ISBLK()
字符设备文件S_LSCHR()
FIFO（命名管道） S_LSFIFO（）
套接字 S_LSSOCK()

符号链接 S_LSLNK()]]></description><category></category></item><item><title><![CDATA[struct sk_buff详解]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/39826439</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/39826439</guid><author>dageda1111</author><pubDate>Mon, 06 Oct 2014 10:18:22 +0800</pubDate><description><![CDATA[sk_buff是Linux网络代码中最重要的结构体之一。它是Linux在其协议栈里传送的结构体，也就是所谓的“包”，在他里面包含了各层协议的头部，比如ethernet,
 ip ,tcp ,udp等等。也有相关的操作等。熟悉他是进一步了解Linux网络协议栈的基础。

      此结构定义在头文件中，结构体布局大致可分为以下四部分：

l       布局（layout）

l  ]]></description><category></category></item><item><title><![CDATA[LINUX中断机制与信号]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/39435343</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/39435343</guid><author>dageda1111</author><pubDate>Sat, 20 Sep 2014 21:26:29 +0800</pubDate><description><![CDATA[LINUX中断机制与信号
中断和异常

 

l  中 断（也称硬件中断）

定义 ：中断是由其他硬件设备依照CPU 时钟周期信号随机产生的。

分类 ： 可屏蔽中断

非可屏蔽中断

来源： 间隔定时器和I/O

 

l  异 常（也称软件中断）

定义 ：当指令执行时由 CPU控制单元 产生的，异常也称为“异步中断”是因为只有在
 一条指令终止执行后C]]></description><category></category></item><item><title><![CDATA[Linux中断机制]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/39403011</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/39403011</guid><author>dageda1111</author><pubDate>Fri, 19 Sep 2014 21:12:46 +0800</pubDate><description><![CDATA[一、中断上半部与底半部
       所谓中断是指CPU在执行程序的过程中，出现了某些突发事件急待处理，CPU必须暂停执行当前的程序，转去处理突发事件，处理完毕后CPU又返回原程序被中断的位置并继续执行。中断注册函数和中断注销函数：
注册中断：
int request_irq(unsigned int irq, irqreturn_t (* handler) (int, void* ,str]]></description><category></category></item><item><title><![CDATA[Linux内核与驱动面试要点]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/39347031</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/39347031</guid><author>dageda1111</author><pubDate>Wed, 17 Sep 2014 19:48:49 +0800</pubDate><description><![CDATA[1. 实际经验：所开发驱动程序或内核模块的来龙去脉(需求、设计思想、实现方法、要点难点，特别是硬件调试过程中所遇到的特殊情况)，所修复BUG的现象、调试手段、原因分析和解决方案。


2. 驱动调试：内核的调试手段、应用程序的调试手段(内核Panic所dump的信息以及Panic的分析、应用程序core dump的分析)。


3. 驱动基础：mknod与udev，module相关AP]]></description><category></category></item><item><title><![CDATA[Linux内核空间和用户空间传递数据]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/39251017</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/39251017</guid><author>dageda1111</author><pubDate>Sat, 13 Sep 2014 12:55:47 +0800</pubDate><description><![CDATA[通常情况下，应用程序通过内核接口访问驱动程序，因此，驱动程序需要和应用程序交换数据。Linux将存储器分为“内核空间”和“用户空间”。操作系统和驱动程序在内核空间运行，应用程序在用户空间运行，两者不能简单地使用指针传递数据。因为Linux系统使用了虚拟内存机制，用户空间的内存可能被换出，当内核空间使用用户空间指针时，对应的数据可能不在内存中。Linux内核提供了多个函数和宏用于内核空间和用户空间传]]></description><category></category></item><item><title><![CDATA[数字滤波算法]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/39232963</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/39232963</guid><author>dageda1111</author><pubDate>Fri, 12 Sep 2014 17:45:53 +0800</pubDate><description><![CDATA[为消除或减弱外界干扰，提高系统的测量精度和可靠性，通过软件滤波的方法即数字滤波算法对测量数据进行处理。 数字滤波方法有很多种，每种方法有其不同的特点和使用范围。从大的范围可分为3类。  
1、克服大脉冲干扰的数字滤波法
（1）限幅滤波法 
（2）中值滤波法
2、抑制小幅度高频噪声的平均滤波法
（1）算数平均
（2）滑动平均
（3）加权滑动平均
（4）一阶滞后滤波法
 3、复合滤波]]></description><category></category></item><item><title><![CDATA[字符串匹配KMP算法]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/39160175</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/39160175</guid><author>dageda1111</author><pubDate>Tue, 09 Sep 2014 20:04:56 +0800</pubDate><description><![CDATA[字符串匹配是计算机的基本任务之一。

　　许多算法可以完成这个任务，Knuth-Morris-Pratt算法（简称KMP）是最常用的之一。它以三个发明者命名，起头的那个K就是著名科学家Donald
 Knuth。

      这种算法不太容易理解，网上有很多解释，但读起来都很费劲。直到读到Jake
 Boxer的文章，我才真正理解这种算法。下面，我用自己的语言，试图写一篇比较好懂的K]]></description><category></category></item><item><title><![CDATA[哈希表]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/39136713</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/39136713</guid><author>dageda1111</author><pubDate>Mon, 08 Sep 2014 15:23:52 +0800</pubDate><description><![CDATA[hash表，有时候也被称为散列表。个人认为，hash表是介于链表和二叉树之间的一种中间结构。链表使用十分方便，但是数据查找十分麻烦；二叉树中的数据严格有序，但是这是以多一个指针作为代价的结果。hash表既满足了数据的查找方便，同时不占用太多的内容空间，使用也十分方便。

       打个比方来说，所有的数据就好像许许多多的书本。如果这些书本是一本一本堆起来的，就好像链表或者线性表一样，整个数]]></description><category></category></item><item><title><![CDATA[深刻理解Linux进程间通信（IPC）]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/39122747</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/39122747</guid><author>dageda1111</author><pubDate>Sun, 07 Sep 2014 21:35:46 +0800</pubDate><description><![CDATA[0. 序

1. 管道

1.1. 管道概述及相关API应用

1.2. 有名管道概述及相关API应用

1.3. 小结

1.4. 参考资料

2. 信号（上）

2.1. 信号及信号来源

2.2. 信号的种类

2.3. 进程对信号的响应

2.4. 信号的发送

2.5. 信号的安装（设置信号关联动作）

2.6. 信号集及信号集操作函数
]]></description><category></category></item><item><title><![CDATA[Linux设备驱动模型]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/39086287</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/39086287</guid><author>dageda1111</author><pubDate>Fri, 05 Sep 2014 22:22:09 +0800</pubDate><description><![CDATA[在Linux的设备驱动模型中，关心总线、设备和驱动这 3 个实体，总线将设备和驱动绑定。在系统每注册一个设备的时候，会寻找与之匹配的驱动；相反的在系统每注册一个驱动的时候，会寻找与之匹配的设备，而匹配由总线完成。
        一个现实的 Linux 设备和驱动通常都需要挂接在一种总线上，对于本身依附于PCI、USB、I2C、SPI等的设备而言，这自然不是问题，但是在嵌入式系统里面，SoC系统]]></description><category></category></item><item><title><![CDATA[Linux设备访问机制]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/39083287</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/39083287</guid><author>dageda1111</author><pubDate>Fri, 05 Sep 2014 17:24:01 +0800</pubDate><description><![CDATA[一.阻塞
    阻塞操作是指在执行设备操作时，若不能获得资源，则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入休眠状态，被从调度器的运行队列移走，直到等待的条件被满足。通过读写函数中内嵌阻塞代码（信号量，等待队列）来实现不满足条件时的睡眠，等到满足条件了应用程序从睡眠中唤醒，继续下面的操作。
         阻塞从字面上听起来似乎意味着低效率，实则不然，如果设备驱动不阻塞，则用]]></description><category></category></item><item><title><![CDATA[linux 内存与I/O访问机制]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/39081443</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/39081443</guid><author>dageda1111</author><pubDate>Fri, 05 Sep 2014 15:24:50 +0800</pubDate><description><![CDATA[内存与IO访问
       几乎每一种外设都是通过读写设备上的寄存器来进行的，通常包括控制寄存器、状态寄存器和数据寄存器三大类，外设的寄存器通常被连续地编址。根据CPU体系结构的不同，CPU对IO端口的编址方式有两种：
（1）I/O映射方式（I/O-mapped）
　　典型地，如X86处理器为外设专门实现了一个单独的地址空间，称为"I/O地址空间"或者"I/O端口空间"，CPU通过专门的I]]></description><category></category></item><item><title><![CDATA[linux设备驱动中的并发控制]]></title><link>https://blog.youkuaiyun.com/dageda1111/article/details/39057181</link><guid>https://blog.youkuaiyun.com/dageda1111/article/details/39057181</guid><author>dageda1111</author><pubDate>Thu, 04 Sep 2014 20:03:37 +0800</pubDate><description><![CDATA[linux设备驱动中的并发控制


并发控制的概念
----并发指的是多个执行单元并行执行，而并发的执行单元对共享资源（硬件资源和
----软件上的全局变量、静态变量等）的访问则很容易导致竞态。
竞态发生的情况
----对称多处理器（SMP）的多个CPU
----单CPU内进程与抢占它的进程
----中断（硬中断、软中断、Tasklet、底半部）与进程之间
解决竞态问题的途径]]></description><category></category></item></channel></rss>