- 博客(20)
- 资源 (56)
- 收藏
- 关注
原创 linux里的驱动接口
第一种:fileoparetion里的open close read write ioctl........: 第二种:属性操作中对文件进行读写 这种是重要的,也是常见的:如:static ssize_t isa1200_mode_show(struct device *dev,
2012-04-29 15:52:52 2920 2
转载 linux中字符串转换函数 simple_strtoul
Linux内核中提供的一些字符串转换函数:lib/vsprintf.c 1. unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base) 2. unsigned long simple_strtoul(const char *cp, char **endp, u
2012-04-20 09:30:41 49393
原创 android 关机 流程分析
嵌入式系统一般都有一个关机按键,长按这个按键系统会弹出关机对话框,提示关机确认,关机动作从按键触发中断,linux kernel层给android framework层返回按键事件进入 framework层,再从 framework层到kernel层执行kernel层关机任务。长按键对应的handler代码:frameworks/policies/base/phone/com/andr
2012-04-12 15:34:49 3879
原创 c++中的const与指针
在c/c++中,指针本身就是一个难点,再加与const的结合,常会产生许多让人费解的地方,在这里做个小结。 1.定义const对象const int buffsize=512;因为常量定义后就不能修改,所以定义时必须初始化.const i,j=0; //error,i没有初始化2.const对象默认为文件的局部变量//file1.ccextern const int
2012-04-07 21:58:17 1135
原创 浅析Linux Input 子系统
在android中,定时alarm功能是很常用的,现在来分析下怎么实现的,这里将采用自下而上的方式讲解。输入子系统又叫input子系统。其构建非常灵活,只需要调用一些简单的函数,就可以将一个输入设备的功能呈现给应用程序。Input子系统 主要有下面几个结构:struct input_dev; //表示一个输入设备,包含输入设备的一些相关信息(如支持的按键码,s设备的名称
2012-04-07 21:50:07 1742
原创 真正理解一维数组的数组名的真正含义
这一段代码的运行结果如下:从运行结果我们知道,&a和a的值是一样的,但是a + 1 和 &a +1的结果就完全不一样,这是为什么呢?哎,为什么总是这么多,今天早上看到百度新闻上面竟然报道有些地方在抢购矿泉水,为什么呢?又和抢盐运动一样?哦哦,我们知道a是数组名,代表数组的首地址,a+1,就是数组的下一个元素的地址。a = 0xbfea014c a + 1 = 0xbfea0150
2012-04-07 21:48:44 2016
原创 基于ARM-LINUX的温度传感器驱动(DS18B20)
DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测
2012-04-07 21:33:43 10242
原创 request_irq中断注册
在linux内核中用于申请中断的函数是request_irq(),函数原型在Kernel/irq/manage.c中定义:int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev
2012-04-05 12:09:24 2043
原创 task_struct和mm_struct和vm_area_struct和vm_operation_struct
1. MM_STRUCT结构 mm_strcut 用来描述一个进程的虚拟地址空间,在/include/linux/sched.h 中描述如下:struct mm_struct { struct vm_area_struct * mmap; /*指向虚拟区间(VMA)链表 */ rb_root_t mm_rb; /
2012-04-04 21:39:25 10911
原创 Linux内核抢占与中断返回
1、上下文一般来说,CPU在任何时刻都处于以下三种情况之一:(1)运行于用户空间,执行用户进程;(2)运行于内核空间,处于进程上下文;(3)运行于内核空间,处于中断上下文。应用程序通过系统调用陷入内核,此时处于进程上下文。现代几乎所有的CPU体系结构都支持中断。当外部设备产生中断,向CPU发送一个异步信号,CPU调用相应的中断处理程序来处理该中断,此时CPU处于中断上下文。
2012-04-04 15:43:21 5365 2
原创 理解Linux中断 (3)
4、下半部在中断处理过程中,不能睡眠。另外,它运行的时候,会把当前中断线在所有处理器上都屏蔽(在ack中完成屏蔽);更糟糕的情况是,如果一个处理程序是SA_INTERRUPT类型,它执行的时候会禁上所有本地中断(通过cli指令完成),所以,中断处理应该尽可能快的完成。所以Linux把中断处理分为上半部和下半部。上半部由中断处理程序完成,它通常完成一些和硬件相关的操作,比如对中断的到达的确认
2012-04-04 15:42:08 1679
原创 理解Linux中断 (2)
3、内核的中断处理3.1、中断处理入口由上节可知,中断向量的对应的处理程序位于interrupt数组中,下面来看看interrupt:341 .data #数据段342 ENTRY(interrupt)343 .text344345 vector=0346 ENTRY(irq_entries_start) 347 .rept NR_IRQS #348-354
2012-04-04 15:38:09 3450
原创 理解Linux中断 (1)
一直认为,理解中断是理解内核的开始。中断已经远远超过仅仅为外围设备服务的范畴,它是现代体系结构的重要组成部分。1、基本输入输出方式现代体系结构的基本输入输出方式有三种:(1)程序查询:CPU周期性询问外部设备是否准备就绪。该方式的明显的缺点就是浪费CPU资源,效率低下。但是,不要轻易的就认为该方式是一种不好的方式(漂亮的女人不一定好,不漂亮的女人通常很可爱),通常效率低下是由于
2012-04-04 15:29:39 2233
原创 内核随记(三)--同步(2)
2.2、睡眠与唤醒在操作系统中,睡眠和唤醒原语实际上是操作系统的基本原语,也是实现同步的一种方式,而且它还是实现信号量的基础。当进程请求的资源(如内存、文件等)不能得到满足时,就会主动放弃CPU,进入等待状态(可中断等待或者不可中断等待)。当资源满足时,就会由别的进程唤醒,从而投入运行。2.2.1、等待队列等待队列表示一组睡眠的进程,这些进程正在等待特定的事件发生(或者说条件为真),比
2012-04-04 15:24:10 1539
原创 内核随记(三)--同步(1)
1、概述同步问题是操作系统中的经典问题,它伴随着并发处理而自诞生。现代体系结构中常见的并发处理情况可以分为如下三种情况:(1)多个线程在单处理器上执行——多线程编程(2)多个线程在多处理器上执行——并行计算(3)多个线程在分布的多个处理上执行——分布式计算相应的编程也分成三种情况:共享变量编程、分布式(基于消息)编程和并行编程。1.1、并发程序设计的本质并发程序通常
2012-04-04 15:20:08 1231
原创 Linux内核进程上下文和中断上下文
内核空间和用户空间是操作系统理论的基础之一,即内核功能模块运行在内核空间,而应用程序运行在用户空间。现代的CPU都具有不同的操作模式,代表不同的级别,不同的级别具有不同的功能,在较低的级别中将禁止某些操作。Linux系统设计时利用了这种硬件特性,使用了两个级别,最高级别和最低级别,内核运行在最高级别(内核态),这个级别可以进行所有操作,而应用程序运行在较低级别(用户态),在这个级别,处理器控制着对
2012-04-04 15:09:36 1304
原创 Linux字符设备驱动
/*Linux字符设备驱动源代码scdd.c*/#include /*模块头文件*/#include #include /*dev_t头文件*/#include /*MAJOR和MINOR宏头文件*/#include /*register_chrdev_region等函数
2012-04-04 11:52:25 1276
转载 模块参数module_param
/*Linux驱动源码hellop.c*/#include#include#include static char *whom="bufan";static int howmany=1;static int paramA[] = {1,2,3,4,5,6,7,8};static int paramA_no = 1;module
2012-04-04 11:50:43 1482
原创 kzalloc
在内核中许多分配内存空间采用的是kzalloc函数,当时不理解为什么用这个函数呢,而不用kmalloc这个函数呢kzalloc和kmalloc差异kzalloc在include/linux/slab.h中定义static inline void *kzalloc(size_t size, gfp_t flags){return kmalloc(size, flags | _
2012-04-04 11:45:23 5204
原创 Linux内核链表
Linux内核链表定义在include/linux/list.h文件中链表结构定义struct list_head { struct list_head *next, *prev;};Linux内核链表它是一个双向循环链表,里面只包含两个struct list_head结构指针。1. 链表初始化链表初始化有两种方式:(1)
2012-04-04 11:42:29 2426 1
Android核心分析
2011-12-25
佛山网通EPON的FTTH工程方案设计
2011-12-25
ARM---Cortex-A8处理器
2022-09-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人