<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[kitestar的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/kitestar</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; kitestar]]></copyright><item><title><![CDATA[（七） POSIX 线程 ——线程池实例]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/38517227</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/38517227</guid><author>kitestar</author><pubDate>Tue, 12 Aug 2014 16:27:24 +0800</pubDate><description><![CDATA[#include #include #include #include #include #include //线程任务等待链表结构typedef struct worker{void *(*process)(void *arg);void *arg;struct worker *next;}CThread_worker;//线程池结构typedef struct threadpool{pthre]]></description><category></category></item><item><title><![CDATA[Linux驱动学习——I2C]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/38498421</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/38498421</guid><author>kitestar</author><pubDate>Mon, 11 Aug 2014 21:23:42 +0800</pubDate><description><![CDATA[I2C相关：
1.串行传输：一个时钟周期传输一个bit位，通过一根数据线完成
2.并行传输：一个时钟周期传输一个1字节，比如通过8根数据线完成
相关概念：
1.主端，主设备，master:一般就是常说的CPU
2.从端，从设备，slave:一般就是说的I2C设备
3.I2C总线：两线式串行总线，CPU跟外设之间的连接通过2根线进行，CPU跟外设之间的数据交互通过1根数据线完成，在这两个]]></description><category></category></item><item><title><![CDATA[Linux驱动学习——混杂设备]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/38455957</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/38455957</guid><author>kitestar</author><pubDate>Sat, 09 Aug 2014 14:02:56 +0800</pubDate><description><![CDATA[linux内核混杂设备：
官方定义：非标准的字符设备属于混杂设备。
代码定义：主设备号内核已经定义的一类字符设备。主设备号为10.通过次设备号来分区各个混杂设备。内核通过链表来管理混杂设备。核心代码在driver/char/misc.c
 
混杂设备对应的数据结构：
struct miscdevice {
       intminor; //次设备号，如果指定MISC_DYNAMIC]]></description><category></category></item><item><title><![CDATA[Linux驱动学习——platform平台总线]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/38455893</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/38455893</guid><author>kitestar</author><pubDate>Sat, 09 Aug 2014 13:52:02 +0800</pubDate><description><![CDATA[linux内核为了让设备驱动具有更好的可移植性，设备驱动采用设备-总线-驱动模型。
设备-总线-驱动模型的实现原理：
1.内核已经帮你定义好了一个虚拟总线“platform_bus_type”,也称为平台总线。
2.在这个总线上维护着两个链表，一个是存放硬件信息的dev链表，一个是存放纯软件信息的drv链表；
3.dev链表中的每一个节点的数据结构是struct platform_devi]]></description><category></category></item><item><title><![CDATA[Linux驱动学习——内核链表]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/38455707</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/38455707</guid><author>kitestar</author><pubDate>Sat, 09 Aug 2014 13:31:44 +0800</pubDate><description><![CDATA[传统链表的特点：
1.传统链表的指针域跟节点的数据类型一样
2.传统链表的指针域指向下一个节点的首地址
3.传统链表中拿第一个节点作为头结点
问题：由于传统链表的指针域跟节点的数据类型保持一致，如果有大量不同类型的链表，那么需要为每一种链表定义一套操作函数。
linux内核链表的特点：
对于指针域内核进行抽象，定义一个数据结构struct list_head作为节点的指针域
1.节点]]></description><category></category></item><item><title><![CDATA[Linux驱动学习——等待队列]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/38454775</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/38454775</guid><author>kitestar</author><pubDate>Sat, 09 Aug 2014 11:08:59 +0800</pubDate><description><![CDATA[等待队列
应用程序在中断发生之前应该有两种等待状态，一种是忙等待，另一种休眠等，也就是如果设备没有准备就绪，最好应该让进程进入休眠。休眠的概念就是将CPU的资源从当前进程上撤下来给别的任务去使用。只有驱动才能访问硬件设备，所以只有驱动才能判断设备到底可用不可用，如果驱动发生设备不可用，那么由设备驱动主动让进程休眠。
如何唤醒休眠的进程：唤醒的前提是设备可用了，通过中断判断设备可用，如果产生中断]]></description><category></category></item><item><title><![CDATA[Linux驱动学习——并发和竞态]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/38454635</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/38454635</guid><author>kitestar</author><pubDate>Sat, 09 Aug 2014 11:03:03 +0800</pubDate><description><![CDATA[linux内核并发和竞态：
并发：多个执行单元同时发生（进程和中断）
竞态：多个执行单元对共享资源的访问。
          条件：
          1.并发
          2.共享资源
          3.同时访问
共享资源：硬件资源和软件上的全局变量。硬件资源大到一个串口设备，小到寄存器的某个bit位
互斥访问：当一个执行单元在访问共享资源时，其他执行单元禁止访]]></description><category></category></item><item><title><![CDATA[Linux驱动学习——中断、定时器]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/38444661</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/38444661</guid><author>kitestar</author><pubDate>Fri, 08 Aug 2014 20:36:00 +0800</pubDate><description><![CDATA[中断
Linux内核有中断功能的原因：
外设的处理速度远远慢于CPU，如果不采取中断机制，CPU获取外设数据只能靠轮询，这样会降低处理器的利用率。
 
中断源----->中断控制器----->CPU
                        （硬件）
ARM处理器的中断控制器集成在CPU内部，外设和CPU之间的中断信号要靠中断控制器来控制，中断控制器可以管理中断，屏蔽、使能中断、]]></description><category></category></item><item><title><![CDATA[Linux驱动学习——简单字符设备]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/38420047</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/38420047</guid><author>kitestar</author><pubDate>Thu, 07 Aug 2014 15:47:43 +0800</pubDate><description><![CDATA[Linux系统划分为用户空间和内核空间。
用户空间有应用程序和应用程序运行时使用的一些库，内核空间包含七大子系统。现代CPU通常实现了不同的工作模式，以ARM为例，有7种工作模式:用户模式、管理模式、快速中断、外部中断、数据访问中止、未定义指令中止、系统模式。其中USR模式和SVC模式，这两种本身硬件上就定义了自己的访问权限，后者的权限最高，能访问所有硬件资源。Linux系统的软件形式空间的划分]]></description><category></category></item><item><title><![CDATA[ARM启动（OK6410）]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/38144893</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/38144893</guid><author>kitestar</author><pubDate>Sat, 26 Jul 2014 15:25:02 +0800</pubDate><description><![CDATA[ARM启动模式（OK6410开发板）
平台：ARM11 三星S3C6410
开发板：飞凌OK6410-A开发板
 
datasheet中这张表列出了s3c6410支持的启动模式


再根据飞凌的底板原理图的boot select 部分可知 ‘OM0’信号为S3C6410芯片时钟源选择信号，当‘OM0’信号为“0”时选择‘XTlpll’:当‘OM0’信号为“1”时选择‘EXTCLK’。]]></description><category></category></item><item><title><![CDATA[ARM学习笔记（二）——ARM数据处理指令、加载\存储指令]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/37936303</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/37936303</guid><author>kitestar</author><pubDate>Fri, 18 Jul 2014 19:25:41 +0800</pubDate><description><![CDATA[数据处理指令的一般格式： 
{cond}{S}  , , 
：数据处理指令的助记符   ADD MOV  SUB  CMP
{cond}:条件标识，EQ，NE所有的数据处理指令都可以条件执行
{S}:本指令的结构会影响CPSR状态寄存器的条件标志位 NZCV
:目标寄存器
：第一源操作数，寄存器
：第二源操作数
LSL：逻辑左移，空出的低位由0填充
LSR：逻辑右移，空出的高位由]]></description><category></category></item><item><title><![CDATA[ARM学习笔记（一）——ARM体系、跳转指令]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/37936177</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/37936177</guid><author>kitestar</author><pubDate>Fri, 18 Jul 2014 19:21:57 +0800</pubDate><description><![CDATA[ARM编程模式：
1.                 工作模式：
管理模式SVC模式：复位，SWI指令
快速中断：发生高优先级的中断
中断：发生低优先级的中断
中止：访问存储器非法情况
未定义：执行的指令，不能识别
系统：权限高
用户：权限受限
2.                 工作模式的分类：
权限：特权模式：其余6种
      非特权模式：用户模式
异常/非异常]]></description><category></category></item><item><title><![CDATA[（六） 进程间通信]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/26056527</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/26056527</guid><author>kitestar</author><pubDate>Sat, 17 May 2014 11:12:38 +0800</pubDate><description><![CDATA[进程间通信（IPC）
进程间通信的原因：数据传输、资源共享、通知事件、进程控制
进程间通信方式：
1.        管道（pipe）和命名管道（FIFO）（最古老的IPC，但目前很少使用）
2.        信号（signal）
3.        消息队列（重点）
4.        共享内存
5.        信号量 
6.        套接字（socket）
 
]]></description><category></category></item><item><title><![CDATA[（五）信号 1]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/26056251</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/26056251</guid><author>kitestar</author><pubDate>Sat, 17 May 2014 11:11:31 +0800</pubDate><description><![CDATA[信号：(signal)
中断分为软件中断和硬件中断，软件中断就是用软件的方式中断代码。信号是Unix/Linux系统下最常见的一种软件中断方式，提供了一种处理异步事件的方法。
信号都有一个宏名称，以SIG开头。本质就是一个非负整数，查看信号的命令：
kill -l
编程时，信号用宏名称，因为有些系统信号数字不同，但宏名称是一样的。
 
信号导致代码中断的条件很多，比如：
中断（Ctr]]></description><category></category></item><item><title><![CDATA[（三） Unix/Linux 进程控制]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/26055703</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/26055703</guid><author>kitestar</author><pubDate>Sat, 17 May 2014 11:06:03 +0800</pubDate><description><![CDATA[进程控制理论基础
进程特点：动态性，并发性，独立性，异步性
进程三态：就绪，执行，阻塞
进程ID:PID         父进程ID：PPID       启动进程的用户ID：UID
进程互斥是指若干进程都要使用某一共享资源时，任何时刻最多允许一个进程使用，其他进程必须等待，知道占用该资源的进程释放资源。
临界资源——一次只允许一个进程访问的资源称为临界资源。
临界区——进程中访问临界]]></description><category></category></item><item><title><![CDATA[（二） Unix/Linux 文件编程]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/26055219</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/26055219</guid><author>kitestar</author><pubDate>Sat, 17 May 2014 11:01:40 +0800</pubDate><description><![CDATA[文件和目录
stat()/fstat()/lstat() 成功返回0，出错返回-1.
获取与文件目录有关的信息结构，fstat参数为已打开的文件描述符，而lstat
可以处理符号链接，当文件是一个符号链接时，返回的是符号链接的信息而不是引用文件的信息（否则在处理目录时可能引起死循环）。
信息结构struct stat 的大部分信息都取自i节点，文件名和i节点存放于目录项。具体信息一般有文件]]></description><category></category></item><item><title><![CDATA[（一） Unix/Linux 编程基础]]></title><link>https://blog.youkuaiyun.com/kitestar/article/details/26054703</link><guid>https://blog.youkuaiyun.com/kitestar/article/details/26054703</guid><author>kitestar</author><pubDate>Sat, 17 May 2014 10:54:59 +0800</pubDate><description><![CDATA[Gcc编译器
Gcc编译时分为四个阶段：
预处理  编译      汇编      链接
.c   .cc   .a .i  .ii  .o (编译后文件)   .s (汇编后文件)
编译选项
-E  只做预处理，不做其他的
-c 只编译，不链接成可执行文件  生成.o的目标文件
-S  汇编，生成 .s文件。
-g 产生调试工具所必要的符号信息，想要程序能进行调试必须加入这个选项]]></description><category></category></item></channel></rss>