![](https://img-blog.csdnimg.cn/20200509135339132.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Cortex-A8
ARM裸机、uboot移植、kernel移植、文件系统移植、驱动开发
Stone_lu。
这个作者很懒,什么都没留下…
展开
-
ARM和X86功耗差别的深层原因探讨
ARM和X86功耗的差别一直是个很热的话题.ARM可以做的很低,甚至1瓦都不到.而X86服务器的芯片可以达到100-200瓦,就算是嵌入式处理器Atom系列也需要几瓦.很多人说这是指令集的关系.ARM采用精简指令集,X86采用复杂指令集,前者每条功能简单,单挑指令耗电低.而后者每条指令复杂,单个指令耗电高.但是这种解释很模糊.如果大家都做同样的事情,完成一个大功能,精简指令集需要指...转载 2018-07-02 13:40:58 · 5214 阅读 · 2 评论 -
独立编址与统一编址
在不同的系统中,I/O端口的地址编排有两种形式:存储器统一编址和I/O独立编址。 存储器统一编址(存储器映像编址):在这种编址方式中,I/O端口和内存单元统一编址,即把I/O端口当作内存单元对待,从整个内存空间中划出一个子空间给I/O端口,每一个I/O端口分配一个地址码,用访问存储器的指令对I/O端口进行操作。 存储器统一编址的优点是:I/O端口的数目几乎不受限制;访问内存指令...原创 2018-07-17 19:05:19 · 14487 阅读 · 0 评论 -
哈佛结构和冯·诺依曼结构
哈佛结构(英语:Harvard architecture)是一种将程序指令储存和数据储存分开的存储器结构。中央处理器首先到程序指令储存器中读取程序指令内容,解码后得到数据地址,再到相应的数据储存器中读取数据,并进行下一步的操作(通常是执行)。程序指令储存和数据储存分开,数据和指令的储存可以同时进行,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位...原创 2018-07-17 19:08:03 · 416 阅读 · 0 评论 -
S5PV210的内存映射
S5PV210简介S5PV210是基于ARM Crotex-A8架构32位CPU的微处理器。 内部拥有32根地址线和32位数据线,32根地址线决定了CPU的地址空间最大为4G,这4G的内存空间如何分配,就是内存映射S5PV210内存映射S5PV210 datasheet中section 01_02章节 MEMORY MAP有讲。 内存分布图如下 内存分布表如下 专业名词解释...转载 2018-07-17 19:21:17 · 502 阅读 · 0 评论 -
S5PV210启动过程
常用器件特性内存:SRAM 静态内存 特点就是容量小、价格高,优点是不需要软件初始化直接上电就能用DRAM 动态内存 特点就是容量大、价格低,缺点就是上电后不能直接使用,需要软件初始化后才可以使用。单片机中:内存需求量小,而且希望开发尽量简单,适合全部用SRAM嵌入式系统:内存需求量大,而且没有NorFlash等可启动介质PC机: 内存需求量大,而且软件复杂,不在乎DRAM的初始化...原创 2018-07-17 20:46:51 · 1175 阅读 · 0 评论 -
ARM工作模式
一、ARM处理器7种工作模式(特权模式 特权模式异常模式)用户模式(USR):正常程序执行模式,不能直接切换到其他模式 系统模式(SYS):运行操作系统的特权任务,与用户模式类似,但具有可以直接切换到其他模式等特权 快中断模式(FIQ):支持高速数据传输及通道处理,FIQ异常响应时进入此模式 中断模式(IRQ):用于通用中断处理,IRQ异常响应时进入此模式 管理模式(SVC):操作系统...原创 2018-07-17 21:29:42 · 1122 阅读 · 0 评论 -
ARM寄存器介绍
ARM处理器共有37个寄存器。其中包括:31个通用寄存器,包括程序计数器(PC)在内。这些寄存器都是32位寄存器。以及6个32位状态寄存器。但目前只使用了其中12位。ARM处理器共有7种不同的处理器模式,在每一种处理器模式中有一组相应的寄存器组。任意时刻(也就是任意的处理器模式下),可见的寄存器包括15个通用寄存器(R0~R14)、一个或两个状态寄存器及程序计数器(PC)。在所有的寄存器中,有些是...转载 2018-07-17 21:37:26 · 2488 阅读 · 0 评论 -
ARM的异常处理
经典ARM微处理器包括7种异常:1、 复位异常2、 未定义指令异常3、 软件中断异常4、 预取指令异常5、 数据异常6、 IRQ(中断)7、 FIQ(快速中断)异常,单片机为中断,笼统来讲可以把异常类似的看作中断,本质上两者还是有区别的。异常/中断是硬件和软件进行异步工作的一种方式。经典ARM微处理器发生异常时,ARM微处理器会自动调用预先写好的异常处理程序。为...原创 2018-07-17 21:44:50 · 12275 阅读 · 0 评论 -
ARM汇编指令
一. 带点的(一般都是ARM GNU伪汇编指令) 1. ".text"、".data"、".bss"依次表示的是“以下是代码段”,“以下是初始化数据段”,“以下是未初始化数据段”。2.".global"定义一个全局符号,通常是为ld使用。比如经常看到的.global _start3.".ascii"、".byte"、".short&原创 2018-07-17 21:58:47 · 5399 阅读 · 0 评论 -
linux下dnw工具安装和使用
dnw工具下载链接:https://download.csdn.net/download/lushoumin/10547570一、安装 1.解压之后,进入dnw-linux文件夹 2.make 3.sudo make install 二、使用 例:烧录led.bin文件到0xd0020010 1.重启...原创 2018-07-17 22:59:06 · 1488 阅读 · 0 评论 -
linux下SD卡烧录程序
1.文件mkv210_image.c详解 分析启动过程可知:210 启动后先执行内部iROM中的BL0,BL0执行完后会根据OMpin 的配置选择一个外部设备来启动(有很多,我们实际使用的有2个:usb 启动和SD卡 启动)。在 usb 启动时内部 BL0 读取到 BL1 后不做校验,直接从 BL1 的实质内部 0xd0020010 开始执行,因此 usb 启动的景象 led.bin ...原创 2018-08-20 09:54:46 · 3022 阅读 · 0 评论 -
交叉编译工具链的使用
1、交叉编译工具 arm-linux-gcc arm-linux-addr2line arm-linux-objcopy arm-linux-readelf arm-linux-ar arm-linux-ld arm-linux-objdump arm-linux-size arm-linux-nm arm-linu...转载 2018-08-20 10:21:27 · 4960 阅读 · 0 评论 -
makefile之目标与依赖(1)
1.makefile的规则:target:prerequisites commandtarget是一个目标文件,可以是一个.o文件,也可以是可执行文件,还可以是标签(伪目标) prerequisites就是要生成这个target所需要依赖的文件 command就是生成这个目标所要执行的命令(任意的shell命令) 这其实就是一个文件的依赖关系,target需要依赖p...原创 2018-08-20 11:26:42 · 3698 阅读 · 0 评论 -
makefile之自动推倒(2)
make看到一个.o文件,它会自动把对应名字的.c文件加到依赖中,比如如果要编译一个main.o文件,因为main.c文件会自动加到依赖中。 比如:创建makefile,输入test:main.o gcc -o test main.o ...原创 2018-08-20 13:27:21 · 189 阅读 · 0 评论 -
makefile之引用(3)
大部分make命令都支持Makefile和makefile这两种文件名,.mk文件表示makefile子文件。使用include关键字可以把别的makefile包含进来,被包含的文件会原模原样的放在当前文件的包含位置,所以包含include是有前后顺序的。如果当前目录下找不到makefile,make还会在下面几个目录下寻找: a.如果make执行时,有“-I”或“–include-di...原创 2018-08-20 17:04:39 · 742 阅读 · 0 评论 -
makefile之通配符(4)
如果我们想定义一系列比较类似的文件,我们很自然地就想起使用通配符。make支持三个通配符:“*”,“?”和“~”。这是和Unix的B-Shell是相同的。波浪号(“~”)字符在文件名中也有比较特殊的用途。如果是“~/test”,这就表示当前用户的$HOME目录下的test目录。而 “~hchen/test”则表示用户hchen的宿主目录下的test目录。(这些都是Unix下的小知识了,make...原创 2018-08-21 11:01:07 · 1824 阅读 · 0 评论 -
makefile之文件搜索(5)
在一个较大的工程中,一般会将源代码和二进制文件(.o 文件和可执行文件)安排在不同的目录来进行区分管理。这种情况下,我们可以使用 make 提供的目录搜索依赖文件功能(在指定的若干个目录下自动搜索依赖文件)。在Makefile中,使用依赖文件的目录搜索功能。当工程的目录结构发生变化 后,就可以做到不更改 Makefile的规则,只更改依赖文件的搜索目录。 在我们上一节出现的问题当中,我们将...原创 2018-08-21 13:27:41 · 1734 阅读 · 0 评论 -
makefile之伪目标(6)
伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标称为标签。使用伪目标有两点原因:1. 避免在我们的Makefile中定义的只执行命令的的目标(此目标的目的为了执行执行一系列命令,而不需要创建这个目标)和工作目录下的实际文件出现名字冲突。2. 提高执行make时的效率,特别是对于一个大型的工程来说,编译的效率也许你...原创 2018-08-21 20:29:00 · 210 阅读 · 0 评论 -
Makefile之静态模式(7)
静态模式 makefile中,一个规则中可以有多个目标,规则所定义的命令对所有的目标有效。一个具有多目标的规则相当于多个规则。使用多目标可以使makefile文件变得简洁。 静态模式规则是这样一个规则:规则存在多个目标,并且不同的目标可以根据目标文件的名字来自动构造出依赖文件。 静态模式可以更加容易地定义多目标的规则,可以让我们的规则变得更加的有弹性和灵活。我们...转载 2018-08-22 09:15:17 · 448 阅读 · 0 评论 -
Makefile之自动生成依赖(8)
Makefile自动生成头文件依赖是很常用的功能,本文的目的是想尽量详细说明其中的原理和过程。Makefile模板首先给出一个本人在小项目中常用的Makefile模板,支持自动生成头文件依赖。CC = gcc CFLAGS = -Wall -OINCLUDEFLAGS = LDFLAGS = OBJS = seq.oTARGETS = test_seq ...原创 2018-08-22 11:17:17 · 230 阅读 · 0 评论 -
Makefile之嵌套执行(9)
在一些大的工程中,我们会把我们不同模块或是不同功能的源文件放在不同的目录中,我们可以在每个目录中都书写一个该目录的Makefile,这有利于让我们的Makefile变得更加地简洁,而不至于把所有的东西全部写在一个Makefile中,这样会很难维护我们的Makefile,这个技术对于我们模块编译和分段编译有着非常大的好处。 例如,我们有一个子目录叫subdir,这个目录下有个Makefile文件,...转载 2018-08-22 11:27:04 · 274 阅读 · 0 评论 -
Makefile之变量(10)
在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地展开在所使用的地方。其与C/C++所不同的是,你可以在Makefile中改变其值。在Makefile中,变量可以使用在“目标”,“依赖目标”, “命令”或是Makefile的其它部分中。使用变量变量的命名字可以包含字符、数字,下划线(可以是数字开头),但不应该...转载 2018-08-22 14:33:02 · 178 阅读 · 0 评论 -
mkv210_image.c详解
1.背景知识回顾s5pv210启动后先执行内部iROM中的BL0,BL0执行完后会根据OMpin的配置选择一个外部设备来启动(有很多,我们实际使用的有2个:usb启动和SD卡启动)。 在usb启动时,内部BL0读取到BL1后不做校验,直接从BL1的实质内部0xd0020010开始执行,因此usb启动的景象led.bin不需要头信息,因此我们从usb启动时直接将镜像下载到0xd0020010去...原创 2018-08-22 14:59:34 · 611 阅读 · 0 评论 -
S5PV210裸机之GPIO
查看数据手册:我们一共看到GPJ0相关的有6个寄存器,相应寄存器的作用是:GPJ2CON:控制寄存器,配置各引脚的工作模式GPJ2DAT:当引脚为输入/输出模式时,寄存器相应位和引脚高低电平一致GPJ2PUD:控制引脚内部弱上拉,下拉GPJ2DRV:配置引脚的驱动能力GPJ2CONPDN:GPJ2PUDPDN:总结:也就是我们只需要写GPJ2CON寄存器和GPJ...原创 2018-08-27 10:07:00 · 1005 阅读 · 0 评论 -
S5PV210裸机之重定位
1、重定位相关概念位置无关码(PIC,position independent code):汇编源文件被编译成二进制可执行文件时编码方式与位置(内存地址)无关。 位置有关码:汇编源文件被编译成二进制可执行程序后和位置(内存地址)有关。 链接地址:链接时指定的地址(指定方式:Makefile中用-Ttext,或者链接脚本) 运行地址:程序实际运行的地址(指定方式:由实际运行时被加载到内存的...转载 2018-08-27 13:21:30 · 395 阅读 · 0 评论 -
S5PV210裸机之SDRAM
1:SDRAM基础:通过s3c2440的内存原理以及时序来理解s5pv210 SDRAM原理、时序。首先看一下核心板内存如何连接的 可以看一下两个内存芯片接的地址总线均为Xm1_ADDR[13:0],数据总线Xm1_DATA[15:0]、Xm1_DATA[31:16],两个内存芯片是并联的,当地址总线Xm1_ADDR[13:0]寻址时,可以同时在两个内存芯片上各获取1...转载 2018-08-27 13:49:49 · 434 阅读 · 0 评论 -
S5PV210裸机之时钟
1、S5PV210的时钟获得:外部晶振+内部时钟发生器+内部PLL产生高频时钟+内部分频器分频S5PV210外部有4个W晶振接口,可以根据需要来决定在哪里接晶振。接了晶振之后上电相应的模块就能产生振荡,产生原始时钟。原始时钟经过一系列的筛选开关进入相应的PLL电路生成倍频后的高频时钟。高频时钟再经过分频到达芯片内部各模块上。(有些模块,譬如串口内部还有进一步的分频器进行再次分频使用)2、时...转载 2018-08-27 15:08:35 · 238 阅读 · 0 评论 -
S5PV210裸机之串口
1:串口的基础知识串口通信定义 串口是计算机上一种非常通用设备通信的协议。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。串口通信原理 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用...原创 2018-08-27 15:46:49 · 369 阅读 · 0 评论 -
S5PV210裸机之外部中断
S5PV210中断体系介绍一、什么是中断? (1)中断的发明是用来解决宏观上的并行需要的。宏观就是从整体上来看,并行就是多件事情都完成了。 (2)微观上的并行,就是指的真正的并行,就是精确到每一秒甚至每一刻,多个事情都是在同时进行的。宏观上面的并行并不等于围观的并行,有时候宏观上是并行的,微观上是串行的。 (3)例子中一个人在看电影,快递来了暂停电影跑去收快递,收完快递继续回来看电影,这...原创 2018-08-27 16:33:47 · 549 阅读 · 0 评论 -
S5PV210裸机之SD卡
主流的外存设备介绍内存和外存的区别:一般是把这种RAM(random access memory,随机访问存储器,特点是任意字节读写,掉电丢失)叫内存,把ROM(read only memory,只读存储器,类似于Flash SD卡之类的,用来存储东西,掉电不丢失,不能随机地址访问,只能以块为单位来访问)叫外存软盘、硬盘、光盘、CD、磁带(1)存储原理大部分为磁存储,缺点是读写速度...原创 2018-08-27 16:55:05 · 369 阅读 · 0 评论 -
S5PV210裸机之Nandflash
NAND Flash关于NAND FlashS5PV210的NAND Flash控制器有如下特点:1) 支持512byte,2k,4k,8k的页大小2) 通过各种软件模式来进行NAND Flash的读写擦除等3) 8bit的总线4) 支持SLC和MCL的NAND Flash5) 支持1/4/8/12/16bit的ECC6) 支持以字节/半字/字为单位访问数据/ECC寄存器,以字为...原创 2018-08-27 17:03:43 · 384 阅读 · 0 评论 -
S5PV210裸机之LCD
LCD 简介什么是 LCD ?(1) LCD ( Liquid Crystal Display )俗称液晶.(2)液晶是一种材料,液晶这种材料具有一种特点:可以在电信号的驱动下液晶分子进行旋转,旋转时会影响透光性,因此我们可以在整个液晶面板后面用白光照(称为背光),可以通过不同电信号让液晶分子进行选择性的透光,此时在液晶面板前面看到的就是各种各样不同的颜色,这就是 LCD 显示。(...原创 2018-08-27 17:14:02 · 517 阅读 · 0 评论 -
uboot之源码目录分析
(1).gitignore。git工具的文件,git是一个版本管理工具(类似的还有个svn),这个文件和git有关,和uboot本身无关的,不用去管。(2)arm_config.mk。后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。(3)三个Changelog文件,修改记录文件,该文件记录了这个uboot项目的版本变迁以及每个版本较上个版本修改的记录。正式的项...转载 2018-09-17 14:17:28 · 1181 阅读 · 0 评论 -
uboot主Makefile分析
version表示主版本号 patchlevel表示补丁版本号 sublevel表示次版本号 extreversion表示附加版本信息U_BOOT_VERSION=1.3.4表示最终的版本号$(obj)前面没有定义,并不表示obj为空。在makefile中,=表示整个文件中最后赋值的结果,因此obj具体值还要取决于后面的程序。总之,VERSION_FILE表示一个文件...原创 2018-09-25 19:51:14 · 1901 阅读 · 1 评论 -
uboot链接脚本
uboot\board\samsung\x210\u-boot.ldsOUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/OUTPUT_ARCH(arm)ENTRY(_start)原创 2018-09-25 20:32:50 · 1001 阅读 · 0 评论 -
uboot启动第一阶段——start.S
一:引入start.S u-boot整个程序的入口取决于链接脚本u-boot.lds中ENTRY声明的地方。ENTRY(_start)因此 _start符号是整个程序的入口。二:分析start.S 从SD卡和nand启动是需要16字节校验头(mkv210image.c就是为了计算这个校验头),dnw下载方式不需要校验头。这16字节在目前只能起到占位的功能,内容是不对的,...原创 2018-09-26 17:08:09 · 838 阅读 · 0 评论 -
GUN ARM汇编中标号的引用在汇编和C语言中区别(monitor_flash_len = _bss_start - _armboot_start;)
u-boot/cpu/xx/start.S中:_TEXT_BASE: .word TEXT_BASE /*uboot映像在SDRAM中的重定位地址,我设置为0xa170 0000 */ .globl _armboot_start _armboot_start: .word _start /*_start是程序入口,链接完毕它的值应该是0xa170 0000=TEXT_BASE*/ /*...转载 2018-09-27 14:39:54 · 615 阅读 · 0 评论 -
uboot启动第二阶段——start_armboot
首先看一个gd_t这个结构体,global_data顾名思义就是全局数据,主要保存了uboot的配置信息bd:板子相关信息 flags:相关标志位 baudrate:串口波特率 have_console:控制台初始化 reloc_off:重定位偏移量 env_addr:环境变量地址 env_valid:环境变量校验成功 fb_base:帧缓冲基地址...原创 2018-09-27 16:20:12 · 703 阅读 · 0 评论 -
uboot主循环main_loop
main_loop函数里面很多代码都没有配置,我们看一些比较重要的代码这段代码是获取环境变量bootdelay的值,bootdelay就是uboot启动之后倒计时的时间获取bootcmd启动参数uboot启动之后进入倒计时,一旦有按键被按下,倒计时就会结束,并进入命令行。如果倒计时完成都没有按下按键,就会直接解析上面获取的bootcmd命令,开始启动linux ...原创 2018-09-27 20:02:03 · 2400 阅读 · 1 评论 -
uboot命令体系
学习uboot的命令体系,首先看一下结构体name:命令名 maxargs:命令最多的参数个数 repeatable:是否支持可重复,就是什么都不输入按回车会继续执行上一条命令cmd:执行命令的函数指针usage:短说明,说明功能help:长说明,说明用法 接下来,我们看一下命令是怎么定义的将该宏定义展开cmd_tbl_t __u_...原创 2018-09-27 20:39:59 · 338 阅读 · 0 评论