自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 copy_process情景分析(working in process,10月18号更新)

/* * This creates a new process as a copy of the old one, * but does not actually start it yet. * * It copies the registers, and all the appropriate * parts of the process environment (as pe

2013-09-24 17:25:23 992

原创 do_fork情景分析

内核的版本是3.10.9. 我自己的分析使用棕色字long do_fork(unsigned long clone_flags,          unsigned long stack_start,          unsigned long stack_size,          int __user *parent_tidptr,          int __u

2013-08-31 12:19:37 1094

原创 Linux Kernel之flush_cache_all在ARM平台下是如何实现的

在驱动程序的设计中,我们可能会用到flush_cache_all将ARM cache的内容刷新到RAM,这是因为ARM Linux中cache一般会被设定为write back的。而通常象DMA是访问不了cache,所以如果我们需要启动DMA将RAM中的内容写到Flash中或LCD framebuffer,那么我们就需要调用flush_cache_all将cache中最新的内容刷新到RAM中。如果

2013-08-22 21:51:27 9752

原创 Linux Kernel之ARM 平台下电源管理常用机制来龙去脉浅析

1                        User Space通常需要操作到PM的一些AP或tools简介1.       /sbin/init,init program。我们可以通过执行init N进入某种run level。N=0:关机(Embedded Device中常不支持),N=6 reboot。2.       /sbin/reboot  reboo

2013-08-22 21:38:39 3146

原创 Linux Kernel 之AP读写Nand Flash上的Yaffs2文件的全过程浅析

1.1                  用top-down的方法分析AP读一个Nand Flash上的file的全过程我先简单看一个例子,看User Application如何打开一个Yaffs2 file并读写之:int main (int argc, char* argv[]){  /* Open the file for reading.  */  in

2013-08-21 21:24:27 2498

原创 通过fork、vfork和clone创建进程

一、Fork应用程序可以通过fork系统调用创建一个和调用fork进程一样的子进程,该子进程继承了父进程(也就是调用fork的那个进程)的所有的资源,除了:1、进程ID2、父进程ID3、文件锁没有继承4、Pending signal没有继承由于linux内核使用了COW(copy-on-write)技术,因此fork的开销不算特别大,主要是复制父进程页表的开销。二、

2013-08-20 12:27:13 898

原创 Linux Kernel之Deferred work(Softirq、tasklet、Work queues)来龙去脉浅析

我们由Linux Kernel中断子系统来龙去脉浅析中可以知道Linux Kernel在处理完一个interrupt后就可能会检查是否有sortirq,如果有,且不在interrupt context中,那么就执行softirq,这也是我们在第5章中断子系统中分析中断的处理全过程的时候未能完成分析的部分,本章将继往开来,将softirq的来龙去脉分析清楚。我们现在再此全面看看asm_do_IR

2013-08-11 22:56:58 1592

原创 ARM926的Cache和Write buffer

本文有些内容是对网上各种资料的翻译和整理ARM926的Cache和Write buffer一、基本概念Cache是位于CPU和主存储器(SDRAM)之间的高速缓冲存储器(一般使用SRAM),可以加速系统的性能。Cache是按照cache line组织的,当访问主存储器的时候,有可能数据或者指令位于cache line中,我们称之cache hit,这种情况下,不需要访问外部慢速的主存储

2013-08-09 19:13:22 1638

原创 Linux Kernel驱动开发中常用的并发和竞争处理机制浅析

Linux是一个multi-task的OS。从User Space来看有个多个processes,从Kernel Space来看有多个kernel control path。何谓kernel control path?举例如下:1.       当一个User Application invoke一个system call,这个system call的执行过程就是一个kernel co

2013-08-06 22:25:23 1429

原创 Linux 驱动开发中常用的内存分配方法浅析

1                        Device Driver中常用的Physcial Memory Allocating的方法在device driver的设计中我们常常需要dynamically allocate memory。这里我们介绍一些最为常用的allocating的方法,并讨论其不同之处,重点明确它们各自不同的应用场合。Linux Kernel设计之初是

2013-08-06 22:00:33 1352

原创 Linux Kernel时间子系统之来龙去脉浅析

1.1                  从AP来看Linux系统提供的时间机制1.1.1             Time的表达方式在Linux中从AP来看,时间有两种表达方式:1.       wall-clock time: 自从1970年1月1日0时0分0秒以来到现在的时间差,理论上精确到nano-second。我们称这个时间点为Linux基准时间(或者linux

2013-08-06 21:53:50 1299

原创 Linux Kernel中断子系统来龙去脉浅析

一般来说,在一个device driver中实现中断,是比较简单的,如上面的RTC的例子。其无非就是:1.       定义一个IRQ No。如何将Hardware中断信息map到我们的IRQ No就是get_irqnr_and_base要做得事情,get_irqnr_and_base是一个macro,后面会详细分析之。这个宏的实现往往也是我们如果要将一个标准的Linux Kernel

2013-08-05 21:02:43 1352

原创 Linux Character Device Driver and RTC驱动来龙去脉浅析

通常LED Device Driver是一个比较简单的例子,但是麻雀虽小、五脏俱全。我们就从一个最简单的LED驱动的例子来认识如何设计一个Character Device Driver(以后我们简写为CDD),并真正搞清楚CDD其所以然。本文基于的Linux 版本为2.6.23LED Device Driver的例子分析限于篇幅,我将一些Hardware本身的处理、出错处理等全部删除了

2013-08-04 17:36:49 1847

原创 Linux system call的来龙去脉浅析

Linux system call的来龙去脉Application通常都是调用一个C library中一个library库函数,该库函数最后又会通ARM的swi assemble instruction。SWI Instruction执行后,ARM进入Supervisor Mode,之后Linux Kernel会进行一系列的处理,最后调用我们在Linux Kernel中看到那些sys_XXX

2013-08-03 19:00:23 1841

原创 Linux Module的来龙去脉浅析

本文的目的在分析清楚Linux下module的来龙去脉,相关的code均来自于Linux Kernel 2.6.23. 这个版本现在来说是比较老的版本了,以后有时间我会重新review一下最新的Kernel版本并更新之。但是我个人认为应该大同小异。 先看一个最简单的Hello World Example,该例子来自于LDD[1]第二章节,为了方便阅读,这里我原文拷贝了这个例子:#inc

2013-08-03 18:21:57 775

原创 傅立叶变换及应用2-傅立叶变换

第五课:傅立叶变换是研究非周期信号的。傅立叶变换可以看成在周期T趋向无穷大的傅立叶级数。我们之前讨论都是周期等于1的信号,得到了分析公式(求解Ck)和合成公式(f(t)表示为exp(2πikt)的和)。OK,现在推广到周期为T的情况,这时候分析使用的building block变成:exp(2πikt/T)这样f(t) = 对于k=-∞~∞上求和(  Ck  exp(2π i(

2013-08-02 20:07:48 1135

原创 线性代数

本文主要是观看MIT的线性代数课程的一些笔记和感想,记录下来,以备后续查阅。第一课:线性方程组如何看待一个n个未知量的n维线性方程组?可以总结为下列的公式:AX = bA是一个nxn的矩阵,x和b是一个列向量,未知量x = { x1, x2, ..... xn}, b = { b1, b2, ..... bn}上面的公式可以从两个方面看:

2013-08-01 19:31:34 978

原创 ARM平台下数据类型char的误区

Char类型自然是Cprogramming中最为常用的数据类型之一,我们都认为再简单不过了,所以使用的时候会如果信手拈来可能会产生不必要的麻烦,甚至是严重的bug,这类错误往往又是比较难debug的。笔者当前使用的LinuxKernel是2.6.27.8,我们先看该版本下JFFS2 file system源代码中的一个例子。这里为了方便理解,列出其源代码:static int jffs2_

2013-08-01 13:02:23 2489

原创 公开课感想

一个偶然的机会,我接触到了网易公开课并沉迷于其中的一些基础性的学科,比如微积分、线性代数、基础物理等。通过聆听这些国际名校讲师的授课内容之后,下面的一些问题触发了我的思考:¨        虽然大学已经学习过这些知识,为何现在再听这些课程的时候,那些知识对于我而言似乎是全新的,大学四年的学习,给我留下的是什么?¨        当年我在大学的数学和物理都是考八九十分,看起来我似乎是掌握了那

2013-08-01 11:10:46 775

原创 傅立叶变换及应用1-傅立叶级数

本文主要是观看斯坦福大学的傅立叶变换及应用课程的一些笔记和感想,记录下来,以备后续查阅。一、傅立叶级数(Fourier Series)傅立叶级数主要是研究周期现象(周期函数)。傅立叶变换主要是研究非周期现象(非周期函数)。傅立叶变换可以看成傅立叶级数在周期T趋向无穷大的极限。理解傅立叶分析首先要理解下面两个概念:1、分析(analysis)。也就是把一个复杂的信

2013-08-01 10:56:15 1580

空空如也

空空如也

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

TA关注的人

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