arm
文章平均质量分 79
michaelcao1980
这个作者很懒,什么都没留下…
展开
-
arm工作模式
从编程的角度看,arm微处理器的工作状态有两种,并可在两种状态之间切换:(1) arm状态,此时处理器执行32位的字对齐的arm指令(2) thumb状态,此时处理器执行16位的,半字对齐的thumb指令(为了兼容老芯片)在程序运行的过程中,可以在两种状态之间进行相应的转换。处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。 存储器格式(原创 2014-01-15 10:58:26 · 2802 阅读 · 0 评论 -
preempt_enable 和 preempt_disable
允许抢占和禁止抢占。例如:内核态程序 和 中断处理程序的互斥因为中断是异步的(不只要何时发生中断,也即随时可能发生中断),因此如果内核态的程序使用了和中断处理程序中相同的数据结构,那么必须进行互斥访问。load %r0, counteradd %r0,1 //发生中断store %r0,conter如果在第二条指令执行转载 2014-03-14 14:38:36 · 1133 阅读 · 0 评论 -
Linux内核学习和研究及嵌入式(ARM)学习和研究的开放文档
http://lli_njupt.0fees.net/ ----- 2转载 2014-03-17 14:38:36 · 739 阅读 · 0 评论 -
对ARM紧致内存TCM的理解
ARM 的ram包括静态ram,动态ram,TCM---紧耦合内存(TCM: Tightly Coupled Memories)。TCM是一个固定大小的RAM,紧密地耦合至处理器内核,提供与cache相当的性能,相比于cache的优点是,程序代码可以精确地控制什么函数或代码放在哪儿(RAM里)。当然TCM永远不会被踢出主存储器,因此,他会有一个被用户预设的性能,而不是象cache那样是统计转载 2014-04-17 09:47:23 · 1573 阅读 · 0 评论 -
ARM中的RO、RW和ZI DATA说明
一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但 是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将我的一些关于RO,RW和ZI的理解写出来,希望能对大家有所帮助。 要了解RO,RW和ZI需要首先了解以下知识: ARM程序的组成转载 2014-04-17 09:44:34 · 945 阅读 · 0 评论 -
内核同步
内核的各个部分并不是严格按照顺序依次执行的,而是采用交错执行的方式。因此这些请求可能引起竞态条件,而我们必须采用适当的同步机制对这种情况进行控制。一、内核如何为不同的请求提供服务 把内核看作必须满足两种请求的侍者:一种请求来自顾客,另一种请求来自数量有限的几个不同的老板。对不同的请求,侍者采用如下的策略: 1、老板提出请求时,如果侍者正空闲,则侍者开始为老板转载 2014-03-12 11:00:13 · 1530 阅读 · 0 评论 -
ARM寄存器介绍
ARM处理器含有37个寄存器,这些寄存器包括以下两类寄存器。 (1)31个通用寄存器:包括程序计数器PC等,这些寄存器都是32位寄存器。 (2)6个状态寄存器:状态寄存器也是32位的寄存器,但是只使用了其中的12位。转载 2014-04-23 14:38:26 · 1654 阅读 · 0 评论 -
Linux中断研究
众所周知,Linux中断被分为上半部分和下半部分中断上半部分的处理流程如下:1.硬件中断-->2.do_IRQ-->3.handle_IRQ_event-->4.handler步骤1至步骤3之间(未进入步骤3),中断是被关闭的,系统无法响应中断,这段时间会造成中断丢失步骤3至步骤4,其内部处理流程如下:3.1.如果该中断申请时没有设定 IRQF_DISABLED,则打开中断loca转载 2014-03-03 15:56:49 · 2085 阅读 · 0 评论 -
linux arm mmu基础
ARM MMU页表框架先上一张arm mmu的页表结构的通用框图(以下的论述都由该图来逐渐展开):以上是arm的页表框图的典型结构:即是二级页表结构:其中第一级页表(L1)是由虚拟地址的高12bit(bits[31:20])组成,所以第一级页表有4096个item,每个item占4个字节,所以一级页表的大小为16KB,而在第一级页表中的每个entry的最低2bi转载 2015-01-30 16:39:47 · 890 阅读 · 0 评论 -
内核中的互斥
从严格意义上说,semaphore和spinlock_XXX属于不同层次的互斥手段,前者的 实现有赖于后者,这有点象HTTP和TCP的关系,都是协议,但层次是不同的。 先说semaphore,它是进程级的,用于多个进程之间对资源的互斥,虽然也是在 内核中,但是该内核执行路径是以进程的身份,代表进程来争夺资源的。如果 竞争不上,会有context switch,进程可以去sleep,但CP转载 2014-03-12 10:00:29 · 1118 阅读 · 0 评论 -
LINUX内核内存屏障
目录: (*) 内存访问抽象模型. - 操作设备. - 保证. (*) 什么是内存屏障? - 各式各样的内存屏障. - 关于内存屏障,不能假定什么? - 数据依赖屏障. - 控制依赖. - SMP内存屏障的配对使用. - 内存屏障举例. - 读内存屏障与内存预取. (*) 内转载 2014-03-14 16:37:08 · 1630 阅读 · 0 评论 -
Linux2.6.35.7内核启动流程分析
S3C2410 Linux 2.6.35.7启动分析1. 依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息、符号表的最初的内核,大小约23MB; 命令:arm-linux-gnu-ld -o vmlinux -T arch/arm/kernel/vmlinux.lds arch/a转载 2014-02-11 14:45:53 · 3646 阅读 · 0 评论 -
MACHINE_START之分析
MACHINE_START(XXX, "xxx") .phys_io = PA_UART0, .io_pg_offst = (((u32)VA_UART0) >> 18) & 0xfffc, .boot_params = SDRAM_PA + 0x100, .fixup = xxx_fixup, .init_irq = xxx原创 2014-02-13 15:12:13 · 3819 阅读 · 0 评论 -
DMA和cache一致性问题
CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存 读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的 一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用原创 2014-02-14 10:30:21 · 20995 阅读 · 6 评论 -
linux tasklet和workqueue的应用情景
当前的2.6版内核中,有三种可能的选择:softirq、tasklet和work queue。 tasklet基于softirq实现,所以两者很相近。work queue与它们完全不同,它靠内核线程实现。1、softirq 软中断支持SMP,同一个softirq可以在不同的CPU上同时运行,softirq必须是可重入的。软中断是在编译期间静态分配的,它不像tasklet那样能被转载 2014-03-03 14:56:35 · 777 阅读 · 0 评论 -
IRQ和FIQ中断的区别
FIQ和IRQ是两种不同类型的中断,ARM为了支持这两种不同的中断,提供了对应的叫做FIQ和IRQ处理器模式(ARM有7种处理模式)。一般的中断控制器里我们可以配置与控制器相连的某个中断输入是FIQ还是IRQ,所以一个中断是可以指定为FIQ或者IRQ的,为了合理,要求系统更快响应,自身处理所耗时间也很短的中断设置为FIQ,否则就设置了IRQ。如果该中断设置为了IRQ,那么当该中原创 2014-02-20 10:12:02 · 47235 阅读 · 2 评论 -
向量中断和非向量中断
向量中断与非向量中断的区别 推荐向量中断就是不同的中断有不同的入口地址,非向量中断就只有一个入口地址,进去了再判断中断标志来识别具体是哪个中断。向量中断实时性好,非向量中断简单 向量中断控制器VIC具有32个中断请求输入,可将其编程分为3类,FIQ,向量IRQ和非向量IRQ。 FIQ(fast interrpt request)快速中断请求要求具有最高优先级转载 2014-03-04 14:47:24 · 6996 阅读 · 1 评论 -
内核中断,异常,抢占总结
内核中断,异常,抢占总结篇一、基本概念中断分为同步中断和异步中断。同步中断是由CPU控制单元产生的,“同步”是指只有在一条指令执行完毕后,CPU才会发出中断,而不是发生在代码指令执行期间,比如系统调用。而异步中断是由其他硬件设备依照CPU时钟信号产生的,即意味着中断能够在指令之间发生,例如键盘中断。按照Intel的微处理器手册,同步中断和异步中断也分别称为异常(或者软件中断)和中断。中转载 2014-03-12 10:16:26 · 1842 阅读 · 2 评论 -
linux内存屏障
内存屏障出现因为编译器或现在的处理器常会自作聪明地对指令序列进行一些处理,比如数据缓存,读写指令乱序执行等等。如果优化对象是普通内存,那么一般会提升性能而且不会产生逻辑错误。但如果对 I/O操作进行类似优化很可能造成致命错误。所以要使用内存屏障,以强制该语句前后的指令以正确的次序完成。其实在指令序列中放一个wmb的效果是使得指令执行到该处时,把所有缓存的数据写到该写的地方,同时使得wmb前面的写指转载 2014-03-14 15:50:53 · 1896 阅读 · 1 评论 -
字节对齐
一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访问数据的效率问题。假设上面整型变量的地址不是自然对齐,比如为0x00000002,则CPU如果取它的值的话需要访问转载 2016-10-18 08:49:46 · 331 阅读 · 0 评论