详细概括Linux内核中ARM硬件原理(图例解析) cpu核心 NEON/SIMD(单指令多数据流) 一个指令取出多个数据给CPU(原来是一个指令取出一个数据交给CPU在用下个指令去取) NEON技术可加速多媒体和信号处理算法(如视频编码/解码,2D/3D图形等多媒体)性能会提升很多倍 cache(缓存机制) 系统外围 RTC实时时钟(real time clock) PLL锁相回路或锁相环。用来统一正合时脉讯号,使内存能正确地存取信号。(一般不去控制它) PWM 脉冲宽度调制,做蜂鸣器或者稳压等 watchdog Timer 看门狗,由于电磁脉冲干扰,程序达不到预期成果,导致程序死锁等。一旦接收不到程序来的信号就会把程序reset,重新执行 DMA(direct memory access ) 直接内存访问。内存和外部设备进行数据迁移的时候不需要去访问CPU keypad 按钮 ADC模数转换器 连接 USB/OTG UART 通用异步收发接口。是一种通用串行数据总线,用于异步通信(并行入,串行出) I2C基层电路总线(串行) SPI 串行外围接口 用在EEPROM FLASH 实时时钟,AD转换器,数字信号处理器和数字信号解码器之间 Modem IF 通讯的调制解调器 GPIO 通用输入输出引脚 Audio IF 音频 storage IF 存储器的interface 多媒体 camera IF /MIPI CSI coder/decoder 2D/3D graphic engine TV out/HDMI JPEG CODEC LCD更多Linux内核源码高阶知识请加开发交流Q群篇【】,进群免费相关资料,免费观看公开课技术分享,入群不亏,快来加入我们吧~前100名进群领取,额外赠送一份价值699的内核资料包(含视频教程、电子书、实战项目及代码)
学习直通车Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken=ke.sigusoft.com/course/?flowToken= 领取免费资料车【腾讯文档】全网最详Linux内核技术解析【附视频教程和源码资料】sigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBMsigusoft.com/doc/DS25VZnBWUXRrbHBM 存储接口 SRAM/SROM 静态RAMROM OneNand 升级的nandflsh SLC/MLC Nand 标准nandflsh DDR 电源管理 clock gating power gating frequency scaling(频率定标) 片内理解就可 主要学习目标:片外硬件,接口型的如GPIO、各种总线协议(I2C,SPI)、存储设备(DDR 网卡) cache 我们现在采用的存储器结构称为多体交叉存储器体系 I/O向主存请求的级别高于CPU访存 贮存速度跟不上CPU的发展 主存一般都是片外,频繁进出速度慢,能耗高 cache一般使用sram 缓存控制器cache controller 控制从内存中取数据到cache 直接映射缓存direct mapped cache 效率不高,直接将主存中的地址,每块按比例来映射 映射时有专门的target记录地址,还记录偏移量 联合应用缓存set associative cache 缓存可以分为多片。指令,数据可能会分开放。这些有缓存控制器来实现/
line是缓存最小单,指向主存的连续字单 index是存储器地址的一部分,用来决定找到缓存的第几行 offset是偏移量 MMU 内存管理模块 1、虚拟存储器 作用:允许多道程序直接有效而安全的共享存储器。清除一个小而受限的主存容量对程序设计造成的影响。 MMU用来:1、保护存储空间和锁定解锁。2、分割.完成内存地址映射(虚拟地址到物理地址的映射)。
内存空间最小存储单位是页 页的存放与查找:页表,页表寄存器(用来存储页表) 页表类似哈希表,前面是虚拟地址,后面有对应的物理地址 如果不缺页直接读物理内存 如果缺页了,通过造作系统去磁盘中找。 集成虚拟存储器:TLB,CACHE TLB:地址转换高速缓存。(页表的缓存) 处理TLB缺失:1页在主存中,只需创建缺失的TLB表项.2、页不再主存中,需要将控制权交给操作系统来解决缺页。 ARM异常中断 ARM体系结构中存在7种异常处理。异常发送时,处理器会把PC指向一个特殊地址。这个地址放在存储器一个特殊的表中,称为向量表
0X00000000是低地址向量吧,一般是裸板开发 0Xffff0000是高地址向量表,一般带有操作系统的要看这一块 异常发生时CPU处理步骤 1、保存当前执行位置。保存到R14 LR 2、保存当前的执行状态。CPSR 3、寻址中断入口。即向量表地址 (PC寄存器去找向量地址) 4、执行中断处理程序 5、中断返回,继续执行 ARM异常优先级 复位异常 highest 数据异常 FIQ IRQ 预处理异常 软中断 未定义指令 lowest 未定义指令异常发生时伪指令
首先把R14置到指向下一个指令的地址 用SPSR进行保存,把当前程序状态保存到SPSR中 然后CPSR改变模式,禁用IRQ等 然后寻找向量表,给PC赋地址 启动原理 CPU中集成的iROM和iRAM,先启动IROM中的code。然后把bootloader第一段程序从SD卡或nand flash’中搬到IRAM中运行,先进行校验。然后在搬第二段运行。运行成功后把操作系统OS搬到DRAM中运行。需要查询手册知道iROM,iRAM和DRAM的地址。 0x00是iRAM的地址 iROM的作用: 初始化系统时钟,设置看门狗,初始化栈和堆 加载BL1 BL1的作用: 初始化RAM,关闭Cache,设置栈 加载BL2 BL2的作用: 初始化其他外设 加载OS内核 GPIO 当去写寄存器的时候是输出,要去读寄存器状态的时候是输入 SFRS特殊功能寄存器,GPIO寄存器放在这里面 GPJ2CON的地址是0xE0 GPJ DAT地址为0xE0 用C来实现 makefile中%。o:%。s 把当前目录下所有点s文件生成。o文件 通过GPIO让蜂鸣器响起来 思路: 1.建立start.S启动代码,运行。c里面的main函数 2.检录main。c 执行代码。GPIO操作。buzzer蜂鸣器。看电路图,找到相应GPIO接口,以及状态设置及值设置 3.makefile编写 makefile 利用按键控制蜂鸣器 了解开发板资源 1、找CPU,用什么样的CPU架构。为了找到系统上电之后,第一条执行的代码,我们应该放到哪里。 ARM:异常向量表(reset)0x0 中断是外界导致的,比如CPU使用时间到了程序停止 异常是主动发出的。例如在程序中调用OPEN等系统调用函数。 2、0x0接的是什么芯片(可读芯片) soc 片上系统,CPU集成了各种核心器件 3.地址都被芯片公司重定义了。去芯片公司的datasheet中寻找memory map这样的章节 主要看 片内资源地址确定sfrs 特殊功能寄存器 片外资源地址确定 DRAM SRAM 分块,程序访问的地址落在哪个分块区间上,CPU中 控制器)就自动的的把该分块的片选信号置为有效 找到对应芯片,找该芯片的类似于CS/ENABLE这样的引脚,看该引脚接到CPU的哪个片选信号上 找异常向量表总reset向量地址对应的是 什么东西 4.boot程序设计 设置时钟 5、接口开发(boot+interface) 如果一个块没有接到总线上,则去片内的控制器找(sfrs) bootloader boot 的最终目的是跳到C语音中, 关闭看门狗,中断,cache 配置系统工作时钟 配置SDRAM的控制器() 让sp指向可读可写的设备区间中。满足递减的规则 代码搬移,只能初始化16K代码,一般搬移到DRAM上。因为执行速度问题,从速度慢的存储器(nand flash)送到更快的内存 有的CPU是只把存储器一部分代码执行出来,把存储在其他位置上的代码搬移到内存,对应存储器的控制器的初始化(如果SD卡启动要写SD卡控制器的驱动,nand启动要写nand的控制器驱动) loader的目的:执行应用逻辑 写boot loader难点是配置SDRAM控制器和代码搬移
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/89219.html