自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(194)
  • 收藏
  • 关注

转载 从 Linux 内核访问用户空间内存

Linux 内存和用户空间 API 简介M. Tim Jones, 自由作者2010 年 9 月 13 日因为内核和用户空间存在于不同的虚拟地址空间中,在它们之间移动数据需要特别注意。研究虚拟地址空间和内核 API 理念,用于将数据移入或移出用户空间,并学习其他的一些用于映射内存的映射技术。Linux 内存在 Li

2016-03-28 14:55:33 570

转载 Linux下利用backtrace追踪函数调用堆栈以及定位段错误

一.用途:主要用于程序异常退出时寻找错误原因二.功能:回溯堆栈,简单的说就是可以列出当前函数调用关系三.原理:1. 通过对当前堆栈的分析,找到其上层函数在栈中的帧地址,再分析上层函数的堆栈,再找再上层的帧地址……一直找到最顶层为止,帧地址指的是一块:在栈上存放局部变量,上层返回地址,及寄存器值的空间。2. 由于不同处理器堆栈方式不同,此功能的具体实现是编译器

2016-03-28 14:53:55 645

转载 Pthread创建线程后必须使用join或detach释放线程资源

Pthread 资料中,有这么一段话:(man pthread_detach):Either pthread_join(3) or pthread_detach() should be called for each thread that an application creates, so that system resources for the thread

2016-03-28 14:52:27 647

转载 彻底释放Linux线程的资源

Linux系统中程序的线程资源是有限的,表现为对于一个程序其能同时运行的线程数是有限的。而默认的条件下,一个线程结束后,其对应的资源不会被释放,于是,如果在一个程序中,反复建立线程,而线程又默认的退出,则最终线程资源耗尽,进程将不再能建立新的线程。解决这个问题,有2种方式,系统自动释放线程资源,或者由另一个线程释放该线程资源。注意,在这里,我认为进程运行后,本身,也是一个线程,主线

2016-03-28 14:51:20 418

转载 gettid 和pthread_self的区别

Linux中,每个进程有一个pid,类型pid_t,由getpid()取得。Linux下的POSIX线程也有一个id,类型 pthread_t,由pthread_self()取得,该id由线程库维护,其id空间是各个进程独立的(即不同进程中的线程可能有相同的id)。Linux中的POSIX线程库实现的线程其实也是一个进程(LWP),只是该进程与主进程(启动线程的进程)共享一些资源而已,比如代码段,

2016-03-28 14:49:59 554

转载 Linux kernel多线程的几种实现

驱动开发中常常会启动几个内核线程,在整个驱动生命周期期间执行某些操作,比如USB驱动的控制线程,一直等待SCSI命令,没有命令的话睡眠,有命令的话就唤醒线程,解析执行相关的命令。还有USB驱动中的扫描线程,如果有新的设备连接到USB总线,则会启动扫描过程,平时时候让出CPU资源休眠。常用的内核线程创建方法有3个,kernel_thread, kthread_create和kthread_r

2016-03-28 14:48:24 730

转载 kthread_stop引起的OOP

1 使用kthread_create创建线程:    struct task_struct *kthread_create(int (*threadfn)(void *data),                                                                  void *data,                         

2016-03-28 14:47:23 406

转载 运行不息的内核线程kthread

要创建一个内核线程有许多种方法,我们这里要学的是最简单的一种。打开include/linux/kthread.h,你就看到了它全部的API,一共三个函数。 struct task_struct kthread_run(int (*threadfn)(void *data),      void *data, const char namefmt[],...)

2016-03-28 14:46:00 431

转载 linux进程管理与调度

目录(?)[-]进程的管理与调度进程管理 进程描述符及任务结构Linux内存管理之高端内存 httpwwwlinuxidccomLinux2013-0685693htmLinux内存管理之分段机制 httpwwwlinuxidccomLinux2012-1174480htmLinux内存管理伙伴算法 httpwwwlinuxidccomLinux2012-0970711htm

2016-03-28 14:44:44 332

转载 Linux用户空间与内核空间

Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。于是像linux这样的系统就做了一个约定,不允许没有用户空间上下文的内核线程访问用户空间。不允许内核访问用户空间使内核免去了很多的负担,使内核设计更加简化

2016-03-28 14:42:10 978

转载 bss,data,text,rodata,堆,栈,常量段

bss段:BSS段(bsssegment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。它有什么特点呢,让我们来看看一个小程序的表现。int bss_array[1024 * 1024] = {0};int main(int argc, char* argv[]){

2016-03-28 14:35:18 942

原创 Linux设备模型Kobject

Linux设备模型的核心是使用Bus、Class、Device、Driver四个核心数据结构,将大量的、不同功能的硬件设备(以及驱动该硬件设备的方法),以树状结构的形式,进行归纳、抽象,从而方便Kernel的统一管理。而硬件设备的数量、种类是非常多的,这就决定了Kernel中将会有大量的有关设备模型的数据结构。这些数据结构一定有一些共同的功能,需要抽象出来统一实现,否则就会不可避免的产生冗余代

2016-03-28 14:24:09 484

原创 android 自带 浏览器的默认标签

分别在一下资源文件中添加自定义的标签packages\apps\Browser\res\values\strings.xml        Google        http://www.google.com/        Picasa        http://picasaweb.google.com/        Yahoo!        http:/

2016-03-28 14:16:43 687

原创 linux 常用命令

Linux使用中常用命令,列出方便记忆与使用1:sudo chown xinwu:xinwu crane-chip 授权命令2:tar -czxf fileName 解压3:cp "xinwu/linux" "android/" -r 复制4:tar -czvf xxxx.tar.gz system 压缩        .tar  解包:tar xzvf FileN

2016-03-28 13:51:48 571

原创 ioctl函数用的命令

linux/ioctl.h   //定义ioctl函数用的命令号,由四个位段构成@type:魔数,8位(定义于宏__IOC_TYPEBITS)宽,整个驱动中唯一@number:顺序号,8位(定义于宏__IOC_NRBITS)宽@direction:数据传送方向,如果此命令涉及数据传送,__IOC_READ,__IOC_WRITE,           // __IOC_NONE,是

2016-03-28 13:47:39 516

原创 linux kernel read write file 读写文件

最后强调一点: 如果能在linux native/app 层读写文件,尽量不要在Kernel 中去做这样的工作。通常我们只会在linux native/app 层 读写文件,但可能有一些非常特别的情况下,我们需要直接。因为这个可能带来安全性的问题,以及可能因为新增代码而影响Kernel稳定性。注意的是您在使用read_file & write_file 之前需要。在read_file & write_file 完成之后,需要。一定要成对的出现,不然将直接导致Kernel Crash.

2016-03-28 13:41:37 6818

原创 MTK 平台Camera 驱动架构

android  将系统大致分为应用层、库文件和硬 件抽象层、Linux  内核三层。在底层的内核空间,Camera 的driver 将其驱动起来以后,将硬 件驱动的接口交给硬件抽象层,android 上层的Camera 应用程序在android 实时系统中的虚 拟机中,加载android 留给Camera 公用的一些库文件,调用硬件抽象层的接口来控制Camera 硬件来实现功能。当然,如果是Ra

2016-03-28 11:11:59 4284

原创 Linux内核时间管理相关的接口

在内核经常会碰到一些要定时调度的任务,可以用timer处理,下面来看看都有哪些接口,/*******************************************************************/linux/param.hHZ;//宏,每秒定时器中断的次数,也即是系统每秒节拍或称滴答数linux/sched.h;包含了linux/jiffies.h

2016-03-28 10:59:50 478

原创 Linux设备模型 device resource

1:    2: static int __init mx1_camera_probe(struct platform_device *pdev)   3: {   4:     ...   5:     6:     res = platform_get_resource(pdev, IORESOURCE_MEM, 0);   7:     irq = platform_

2016-03-25 17:44:04 1423

原创 十种软件滤波方法

十种软件滤波方法1、限幅滤波法        A、方法:        根据经验判断,确定两次采样允许的最大偏差值(设为A)        每次检测到新值时判断:        如果本次值与上次值之差        如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值答题本次值        B、优点        能有效克服因偶然因素引起的忙冲干扰 

2016-03-25 17:38:39 711

原创 kernel thread与进程描述符

/***********kernel thread的创建*****************/#include       //wake_up_process()#include     //kthread_creat,kthread_run()#include      //IS_ERR(),PTR_ERR()struct task_struct *kthread_create(i

2016-03-25 17:35:59 539

原创 linux notification内核通知链

/******linux notification内核通知链***********/linux/notifier.h //内核中的一处来告知内核另一处某事件的发生,并执行注册的struct notifier_block { //notifier_call方法。      int (*notifier_call)(struct notifier_block *self,unsigned

2016-03-25 17:34:22 677

原创 mount/umount函数

用法:  #include int mount(const char *source, const char *target,   const char *filesystemtype, unsigned long mountflags, const void *data);int umount(const char *target);int umount2(con

2016-03-25 17:30:09 1407

转载 linux tasklet和workqueue的应用情景

当前的2.6版内核中,有三种可能的选择:softirq、tasklet和work queue。 tasklet基于softirq实现,所以两者很相近。work queue与它们完全不同,它靠内核线程实现。1、softirq       软中断支持SMP,同一个softirq可以在不同的CPU上同时运行,softirq必须是可重入的。软中断是在编译期间静态分配的,它不像tasklet那样能被

2016-03-25 16:49:57 496

转载 Linux中断研究

ARM里的中断通常是指IRQ和FIQ,以IRQ来讲,ARM对IRQ的处理过程大概是这样:  外部设备遇到某一事件发出一个IRQ中断给中断控制器,中断控制器对这个IRQ进行硬件上的处理,把一些信息记在中断控制器的寄存器上,然后中断控制器通过IRQ中断线给ARM发一个信号。ARM收到信号,开始进行以下处理:  (1)将当前状态的cpsr拷贝到IRQ状态的spsr中。  (2)将pc拷贝到I

2016-03-25 16:48:49 511

转载 内核中断,异常,抢占总结

内核中断,异常,抢占总结篇一、基本概念中断分为同步中断和异步中断。同步中断是由CPU控制单元产生的,“同步”是指只有在一条指令执行完毕后,CPU才会发出中断,而不是发生在代码指令执行期间,比如系统调用。而异步中断是由其他硬件设备依照CPU时钟信号产生的,即意味着中断能够在指令之间发生,例如键盘中断。按照Intel的微处理器手册,同步中断和异步中断也分别称为异常(或者软件中断

2016-03-25 16:46:33 501

转载 linux高端内存映射

1 内核空间和用户空间 用户空间:在Linux中,每个用户进程都可以访问4GB的线性虚拟内存空间。其中从0到3GB的虚存地址是用户空间,通过每个进程自己的页目录、页表,用户进程可以直接访问。内核空间:从3GB到4GB的虚存地址为内核态空间,存放供内核访问的代码和数据,用户态进程不能访问,只有内核态进程才能寻址。所有进程从3GB到4GB的虚拟空间都是一样的,linux以此方式让内核态

2016-03-25 16:31:55 756

转载 preempt_enable 和 preempt_disable

允许抢占和禁止抢占。例如:内核态程序 和 中断处理程序的互斥因为中断是异步的(不只要何时发生中断,也即随时可能发生中断),因此如果内核态的程序使用了和中断处理程序中相同的数据结构,那么必须进行互斥访问。load %r0, counteradd %r0,1 //发生中断store %r0,conter如果在第二条指令执行

2016-03-25 16:27:52 663

转载 LINUX时间管理

实时时钟系统定时器纳秒微妙毫 秒延迟必须是短延迟时间过长会报错长延迟时间管理在内核中占有非常重要的地位。相对于事件驱动,内核中有大量的函数都是基于时间驱动的。内核必须管理系统的运行时间以及当前的日期和时间。首先搞清楚RTC在kernel内的作用:linux系统有两个时钟:实时时钟和系统定时器实时时钟    一个是由纽扣电池供电的“Real Time Cl

2016-03-25 15:43:06 490

转载 Linux设备驱动之I2C架构分析

一:前言I2c是philips提出的外设总线.I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL.正因为这样,它方便了工程人员的布线.另外,I2C是一种多主机控制总线.它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须由主机发起才可以.而I2C 是基于multi master机制.一同总线上可允许多个master.关于I2C协议的知识,这里不再赘述.可自

2016-03-25 15:04:06 551

转载 linux驱动开发 主设备号与次设备号

一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。例如一个嵌入式系统,有两个LED指示灯,LED灯需要独立的打开或者关闭。那么,可以写一个LED灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号分别为1和2。这里,次设备号就分别表示两个LED灯。1.主设备号和

2016-03-25 14:58:36 978

转载 Linux芯片级移植与底层驱动(基于3.7.4内核)

1.   SoC Linux底层驱动的组成和现状为了让Linux在一个全新的ARM SoC上运行,需要提供大量的底层支撑,如定时器节拍、中断控制器、SMP启动、CPU hotplug以及底层的GPIO、clock、pinctrl和DMA硬件的封装等。定时器节拍、中断控制器、SMP启动和CPU hotplug这几部分相对来说没有像早期GPIO、clock、pinctrl和DMA的实现那么杂乱

2016-03-25 14:56:48 893

转载 imx6设备树pinctrl解析

最近在移植linux,用到kernel版本为3.14.28,在高版本的内核源码中用到了设备树(device-tree),设备树中用到pinctrl的配置,记录一下。1、普通设置在配置串口时,pinctrl的配置信息如下所示:[cpp] view plain copy&uart2 {      pinctrl-nam

2016-03-25 14:52:57 804

转载 Android GPS架构分析

看Android的GPS模块有两个月了吧,终于可以写点东西出来。首先来看看GPS模块的代码结构:Framework:1.frameworks/base/location/java/android/location这里主要是用来被App调用的,API包是android.location。2.frameworks/base/location/java/com/andro

2016-03-25 14:47:50 1745

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除