<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Newborn baby]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/daisy_chenting</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; daisy_chenting]]></copyright><item><title><![CDATA[pthread_rwlock读写锁的使用细节]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/8798387</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/8798387</guid><author>daisy_chenting</author><pubDate>Sat, 13 Apr 2013 22:45:55 +0800</pubDate><description><![CDATA[在使用的过程中，往往会有一些细节上的疑问，心中会有模棱两可的地方，然后自己做了试验，并记录下来。
首先，我们先来看一下 pthread_rwlock_t 结构体的定义：
  struct
  {
    int __lock;
    unsigned int __nr_readers;   
    unsigned int __readers_wakeup;
    unsign]]></description><category></category></item><item><title><![CDATA[RCU机制（转）]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/8253647</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/8253647</guid><author>daisy_chenting</author><pubDate>Mon, 03 Dec 2012 22:16:32 +0800</pubDate><description><![CDATA[本文转自：http://blog.youkuaiyun.com/junguo/article/details/8244530

感谢作者。

      

简介

        RCU（Read-Copy Update）是数据同步的一种方式，在当前的Linux内核中发挥着重要的作用。RCU主要针对的数据对象是链表，目的是提高遍历读取数据的效率，为了达到目的使用RCU机制读取数据的时候不对链]]></description><category></category></item><item><title><![CDATA[linux名称解析函数简介——gethostbyname与getaddrinfo]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/7602793</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/7602793</guid><author>daisy_chenting</author><pubDate>Fri, 25 May 2012 18:08:10 +0800</pubDate><description><![CDATA[使用这个东西，首先要包含2个头文件：
#include 
#include 
struct hostent *gethostbyname(const char *name);
这个函数的传入值是域名或者主机名，例如"www.google.com","wpc"等等。
传出值，是一个hostent的结构（如下）。如果函数调用失败，将返回NULL。
struct hostent {]]></description><category></category></item><item><title><![CDATA[使用 GDB 调试多进程程序]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/7601545</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/7601545</guid><author>daisy_chenting</author><pubDate>Fri, 25 May 2012 13:08:00 +0800</pubDate><description><![CDATA[GDB 是 linux 系统上常用的 c/c++ 调试工具，功能十分强大。对于较为复杂的系统，比如多进程系统，如何使用 GDB 调试呢？考虑下面这个三进程系统：

进程
 

Proc2 是 Proc1 的子进程，Proc3 又是 Proc2 的子进程。如何使用 GDB 调试 proc2 或者 proc3 呢？

实际上，GDB 没有对多进程程序调试提供直接支持。例如，使用GDB调试]]></description><category></category></item><item><title><![CDATA[getopt的使用]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/7599916</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/7599916</guid><author>daisy_chenting</author><pubDate>Thu, 24 May 2012 21:03:02 +0800</pubDate><description><![CDATA[getopt被用来解析命令行选项参数。就不用自己写东东处理argv了。

#include 
       extern char *optarg;  //选项的参数指针
       extern int optind,   //下一次调用getopt的时，从optind存储的位置处重新开始检查选项。 
       extern int opterr,  //当opterr=0时，g]]></description><category></category></item><item><title><![CDATA[关于网络接口的ioctl使用]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/7538016</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/7538016</guid><author>daisy_chenting</author><pubDate>Sat, 05 May 2012 18:31:15 +0800</pubDate><description><![CDATA[本文转自：http://hi.baidu.com/kevert/blog/item/4c95b052b86bb10e0cf3e3c8.html
ioctl函数（1）

2007-02-09 16:45





ioctl函数
 
本函数影响由fd参数引用的一个打开的文件。
 
#include
int ioctl( int fd, int request, .../*]]></description><category></category></item><item><title><![CDATA[Linux工作队列解析（二）]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/7197477</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/7197477</guid><author>daisy_chenting</author><pubDate>Thu, 12 Jan 2012 22:44:39 +0800</pubDate><description><![CDATA[工作、工作队列和工作者线程

如前所述，我们把推后执行的任务叫做工作（work），描述它的数据结构为work_struct，这些工作以队列结构组织成工作队列（workqueue），其数据结构为workqueue_struct，而工作线程就是负责执行工作队列中的工作。系统默认的工作者线程为events,自己也可以创建自己的工作者线程。


表示工作的数据结构

工作用中定义的work_]]></description><category></category></item><item><title><![CDATA[linux工作队列解析（一）]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/7197473</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/7197473</guid><author>daisy_chenting</author><pubDate>Thu, 12 Jan 2012 22:43:19 +0800</pubDate><description><![CDATA[INIT_DELAYED_WORK()是一个宏,我们给它传递了两个参数.&hub->leds和led_work.对设备驱动熟悉的人不会觉得INIT_DELAYED_WORK()很陌生,其实鸦片战争那会儿就有这个宏了,只不过从2.6.20的内核开始这个宏做了改变,原来这个宏是三个参数,后来改成了两个参数,所以经常在网上看见一些同志抱怨说最近某个模块编译失败了,说什么make的时候遇见这么一个错误:]]></description><category></category></item><item><title><![CDATA[转发一篇写得不错的关于iptables的文章]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/7058145</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/7058145</guid><author>daisy_chenting</author><pubDate>Fri, 09 Dec 2011 18:55:29 +0800</pubDate><description><![CDATA[本文作者：张天成 zhangtiancheng#gmail.com 转发请注明出处。

iptables是一个Linux下优秀的nat+防火墙工具，我使用该工具以较低配置的传统pc配置了一个灵活强劲的防火墙+nat系统,小有心得，看了网上也有很多这方面的文章，但是似乎要么说的比较少，要么就是比较偏，内容不全，容易误导，我研究了一段时间的iptables同时也用了很久，有点滴经验，写来供大家参考]]></description><category></category></item><item><title><![CDATA[input子系统——linux驱动学习笔记（三）]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/6955732</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/6955732</guid><author>daisy_chenting</author><pubDate>Thu, 10 Nov 2011 13:01:16 +0800</pubDate><description><![CDATA[整个Input子系统的结构：
         
前面一片文章我们介绍的属于输入子系统核心层，该层主要负责对驱动层提供接口，比如之前介绍input_allocate_device()、
input_register_device(button_dev)、input_report_key(button_dev, BTN_0, 1)、input_sync(button_dev)等。
同时向上提]]></description><category></category></item><item><title><![CDATA[input子系统——linux驱动学习笔记（二）]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/6955722</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/6955722</guid><author>daisy_chenting</author><pubDate>Thu, 10 Nov 2011 12:58:35 +0800</pubDate><description><![CDATA[为了更深入的了解input子系统，光把一个按键驱动写好是不够的，我们下面来看input子系统跟我们写的程序是怎么联系起来的。

我们首先来看在前面的按键输入驱动中的 struct input_dev * button_dev = input_allocate_device();

struct input_dev *input_allocate_device(void)
{
struc]]></description><category></category></item><item><title><![CDATA[input子系统——linux驱动学习笔记（一）]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/6947387</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/6947387</guid><author>daisy_chenting</author><pubDate>Thu, 10 Nov 2011 12:53:32 +0800</pubDate><description><![CDATA[我们下面通过自己编译个最简单的按键输入程序，来学习和理解input子系统。
程序的功能就是一个单独的按键，按下后产生中断并执行相应的程序，代码如下：


#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include]]></description><category></category></item><item><title><![CDATA[内核定时器 struct timer_list]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/6949964</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/6949964</guid><author>daisy_chenting</author><pubDate>Tue, 08 Nov 2011 20:53:23 +0800</pubDate><description><![CDATA[本文来自：http://hi.baidu.com/zhlg_hzh/blog/item/d298b49b57a1cab2c8eaf42b.html
 
定时器，有时也称为动态定时器或内核定时器，是管理内核时间的基础。内核经常要推后执行某些代码，比如下半部机制就是为了将工作推后执行。我们需要一种工具，使工作能够在指定时间点上执行，正好在希望的时间点上，内核定时器正是这样一种工具。
定时器使用简]]></description><category></category></item><item><title><![CDATA[request_irq（）——注册中断服务]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/6948159</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/6948159</guid><author>daisy_chenting</author><pubDate>Tue, 08 Nov 2011 14:59:16 +0800</pubDate><description><![CDATA[在 2.4 内核和 2.6内核中都使用 request_irq() 函数来注册中断服务函数。在 2.4 内核中，需要包含的头文件是 #include  ，2.6 内核中需要包含的头文件则是
#include  。函数原型如下：



2.4 内核
int request_irq (unsigned int irq, void (*handler)(int, void *, struct]]></description><category></category></item><item><title><![CDATA[s3c2440的ADC触摸屏驱动——学习笔记]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/6945781</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/6945781</guid><author>daisy_chenting</author><pubDate>Tue, 08 Nov 2011 09:56:33 +0800</pubDate><description><![CDATA[我们首先来分析drivers/input/touchsreen/s3c2410_ts.c这个文件：

static struct device_driver s3c2410ts_driver = {
       .name           = "s3c2410-ts",    //在注册这个driver的时候，系统就是以这个结构的.name来查找相同name的设备的。]]></description><category></category></item><item><title><![CDATA[RTC驱动程序——学习笔记]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/6940469</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/6940469</guid><author>daisy_chenting</author><pubDate>Sun, 06 Nov 2011 18:39:49 +0800</pubDate><description><![CDATA[﻿﻿﻿﻿一、RTC简介：
RTC（Real Time Clock）是为了给操作系统提供一个可靠的时间，且在断电情况下使用备用电池供电（即在断电情况下，也能确保时间的正确性）。
RTC是通过依靠一个频率为32.768KHZ的外部晶振，产生周期的脉冲信号，每一个脉冲信号到来，计数器（TICNT）减一，来完成计时功能的。
从下图可以看出来，XTIrtc和XTOrtc产生脉冲信号，传给2^15分频器]]></description><category></category></item><item><title><![CDATA[驱动学习之——内核等待队列的使用]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/6940749</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/6940749</guid><author>daisy_chenting</author><pubDate>Sun, 06 Nov 2011 17:50:29 +0800</pubDate><description><![CDATA[在中，结构体定义如下：

struct __wait_queue_head {
spinlock_t lock;

struct list_head task_list;
};
typedef struct __wait_queue_head wait_queue_head_t;

且
struct list_head {
struct list_head *next, *p]]></description><category></category></item><item><title><![CDATA[LCD驱动学习笔记]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/6937765</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/6937765</guid><author>daisy_chenting</author><pubDate>Sat, 05 Nov 2011 09:08:05 +0800</pubDate><description><![CDATA[2.  Linux 驱动
2.1  FrameBuffer
Linux是工作在保护模式下，所以用户态进程是无法像DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏，Linux仿显卡的功能，将显抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。Framebuffer机制模卡硬件结构抽象掉，可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer]]></description><category></category></item><item><title><![CDATA[STL使用总结]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/6898184</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/6898184</guid><author>daisy_chenting</author><pubDate>Sun, 23 Oct 2011 15:07:28 +0800</pubDate><description><![CDATA[1.    概述
泛型编程思想最早缘于A.Stepanov提出的部分算法可独立于数据结构的论断。20世纪90年代初A.Stepanov和Meng Lee根据泛型编程的理论用C++共同编写了STL。但直至1998年，STL才成为C++的正式标准。在后来的几年中，各大主流编译器也都相继加入了对STL的支持，至此STL才开始得到广泛的应用。
STL体现的是泛型编程的核心思想：独立数据结构和算法(这是]]></description><category></category></item><item><title><![CDATA[ubuntu软件包管理命令的详细用法]]></title><link>https://blog.youkuaiyun.com/daisy_chenting/article/details/6894647</link><guid>https://blog.youkuaiyun.com/daisy_chenting/article/details/6894647</guid><author>daisy_chenting</author><pubDate>Fri, 21 Oct 2011 17:20:00 +0800</pubDate><description><![CDATA[说明：由于图形化界面方法（如Add/Remove... 和Synaptic Package Manageer）比较简单，所以这里主要总结在终端通过命令行方式进行的软件包安装、卸载和删除的方法。

一、Ubuntu中软件安装方法

1、APT方式

（1）普通安装：apt-get install softname1 softname2 …;

（2）修复安装：apt-get -f i]]></description><category></category></item></channel></rss>