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