ARM的启动代码(1):介绍(转)】的更多相关文章

源:ARM的启动代码(1):介绍 很多朋友搞嵌入式,写起代码来一点问题没有,到最后上板子调试的时候,挂了.究其原因,还是对芯片的启动地址.启动方式.bootloader和操作系统的衔接出了问题.今天就闲聊一下这个问题. 对于一个新处理器,我们最关心的是什么呢?并不是它支持不支持C编译器,有没有良好的开发环境.从程序员的角度说,要把一个新处理器吃透,必须明白两样东西:a)新处理器的内存模型:b)新处理器的中断方式.中断源等等.以ARM的AT91SAM9260为例. 一个ARM芯片可能有N种不同的启…
前言 在学习.分析之前首先要弄明白一个问题:为什么要分析启动代码? 因为启动代码绝大部分都是用汇编语言写的,对于没学过或者不熟悉汇编语言的同学确实有一定难度,但是如果你想真正深入地学习Linux,那么读.分析某一个体系结构(比如ARM)的启动代码或者其他底层代码是必不可少的.当分析之后会发现这是有很多好处的:分析启动代码可以加深对汇编语言的理解:可以学习汇编语言的使用技巧:可以学习如何编写位置无关的代码,可以知道从启动到start_kernel()函数之前内核到底干了什么事情,从而为后续其他内核…
一.nand启动和nor启动:[1] CPU从0x00000000位置开始运行程序. 1.nand启动: 如果将S3C2440配置成从NANDFLASH启动(将开发板的启动开关拔到nand端,此时OM0管脚拉低)S3C2440的Nand控制器会自动把Nandflash中的前4K代码数据搬到内部SRAM中(地址为0x40000000),同时还把这块SRAM地址映射到了0x00000000地址.CPU从0x00000000位置开始运行程序. 2.如果将S3C2440配置成从Norflash启动(将开…
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qianlong4526888/article/details/27698707 注意:由于文档是去年写的,内有多个图片.上传图片非常麻烦(须要截图另存插入等等).我把文章的PDF版本号上传到了CSDN下载资源中.为了给自己赚点积分.所以标价2分,没有积分的同学能够直接留言跟我要,记得留下邮箱. 下面是文章内容,由于我懒得编辑图片了,所以文章看来会非常不爽,强烈推荐点击以上红色链接下载pdf版. 文…
1.1  问题描述     __main函数的作用是什么呀?1.2  问题剖析     __main函数是C/C++运行时库的一个函数,嵌入式系统在进入应用主程序之前必须有一个初始化的过程,使用__main标号引导系统时必须将应用程序的入口定义为main().    在初始化的过程中,__main函数的作用主要有两点:    (1)  完成对映像文件的初始化操作     在介绍映像文件的初始化操作之前,先介绍以下几个概念:     1.  映像文件     链接器把多个目标文件链接成一个映像文件…
杂谈 工作了一天,脑袋比较乱.一直想把底层的知识写成一个系列,希望可以坚持下去.为什么要写底层的东西呢?首先,工作用到了这部分内容,最近和内部Flash打交道比较多,自然而然会接触到一些底层的东西:第二,近些年来Cortex-M阵营各厂商(ST.Nordic.ATMEL……)对新产品的迭代速度越来越快,以及微控制器应用普及程度的加深,越来越多的开发者把更多精力投注在应用层开发上,花在对底层技术上的时间越来越少,更深层次的原因是走嵌入式底层没有做互联网上层赚钱.希望自己可以把嵌入式ARM Cort…
STM32 启动代码 Author By YuCloud 边看启动文件边学汇编 汇编 see ARM: Assembler User Guide see: https://blog.csdn.net/zlmm741/article/details/105189487 指令 作用 EQU 取符号名(类似C #define),同义词 * AREA 指示编译器汇编一个新段(代码段或数据段) SPACE 分配内存空间并填零.[标号] SPACE [表达式], 同义词 % PRESERVE8 按8字节对齐…
可以选择nand启动和nor启动,这两者之间的关系通过一个按键来选择 这个OM0有何玄机,在数据手册中有这么一段 位宽RAM启动了(当然,还得设置一些东西,下面就说), Nanaflash启动经历的过程相当于首先,2440自动从nand里面读取4K的代码,这4K代码将nand里面的数据拷贝到ram中,然后跳转到ram中执行代码,为什么是4K,因为 2440.s的启动代码需要包含几个文件 2440addr.inc 内部寄存器地址 Memcfg.inc 各个bank的内存配置数据 Option.in…
本文开始第一篇,启动代码的编写,注意,仅仅是启动代码,并不是bootloader,因为只有boot,没有loader. 第一要明确:CPU上电之后,会从某个固定地址执行指令.ARM结构的CPU从地址0x00000000开始执行指令,MIPS结构的CPU将会从0XBFC00000取第一条指令并执行.(注意,这个地址是CPU的统一编址,需要把存储器件ROM或者flash映射到这个地址上        第二要知道启动代码需要做那些事情: 1.异常向量表 2.禁看门狗,禁中断 3.设置系统时钟 4.初始…
最近需要学习iap的功能,因此离不开stm32的启动代码的分析,以前看了很多遍,都看不懂,读书百遍,其义自见,因此我有看了一遍,下面的文章,挺好的,因此转载: 在上电复位后,我们都知道会先运行启动代码,但是启动代码到底使干什么用的呢?下面小弟给大家一一列出来. 1.初始化堆栈指针 2.初始化 PC 指针 3.初始化中断向量表 4.配置系统时钟 5.调用 C 库函数_main 初始化用户堆栈 我们根据这以上的几个步骤一一进行详细的解析: 1.栈的内存分配 这段代码的意思是,开辟了一个栈,这个栈的大…
stm32启动代码分析 (2012-06-12 09:43:31) 转载▼     最近开始使用ST的stm32w108芯片(也是一款zigbee芯片).开始看他的启动代码看的晕晕呼呼呼的. 还好在csdn上看到一片文章写的不错,分享下: 文章转载至:http://blog.chinaunix.net/uid-2595338-id-2139588.html,感谢原作者!   使用的芯片是 STM32F103VET,编译器使用 IAR ARM V5.5   设置头文件查找路径,例如: $PROJ_…
作者:刘老师,华清远见嵌入式学院讲师. 启动代码的一般作用 1.堆和栈的初始化: 2.向量表定义: 3.地址重映射及中断向量表的转移: 4.初始化有特殊要求的断口: 5.处理器模式: 6.进入C应用程序. ARM复位后程序从0x00地址开始执行代码,所以一般都会有将Flash地址映射到0x00的过程.但对于这一款Cortex M0的启动代码比较简单,从存储分布图中我们可以看到LPC11C14拥有32K的片内Flash,地址范围是0x0000 0000 ~ 0x0000 8000,当我们将程序(小…
Android系统启动过程分析 Android系统的框架架构图如下(来自网上):   Linux内核启动之后----->就到Android的Init进程 ----->进而启动Android相关的服务和应用. 整个的启动过程如下图所示: 以下针对Android 4.2内核代码的启动部分进行分析. Init进程,是一个由内核启动的用户级进程.内核自行启动(已被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动用户级程序init的方式,完成引导进程. Init进程始终是第…
Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c  start_kernel()    --2>setup_arch(&command_line);//该函数位于arch/arm/kernel/setup.c           //在这个函数中定义了一个描述开发板的属性的结构体struct machine_desc *mdesc           struc…
转自:http://www.cnblogs.com/mddblog/p/4920063.html 阅读目录 概述 1.堆栈空间定义 2.存放中断向量表 3. 复位中断函数(Reset_Handler) 4.其它中断异常服务函数,以及弱[WEAK]声明 5.将堆栈地址传递给库函数 原文在此:http://www.cnblogs.com/mddblog/p/4920063.html 概述 在嵌入式系统中,启动文件是整个系统非常关键的部分,它会进行一些底层的初始化,构建程序运行必要的环境,比如堆栈初始…
startup_LPC177x_8x.s启动代码分析. 参考资料: Cortex-M3 (NXP LPC1788)之启动代码分析 ARM启动过程(Cortex-M3 NXP LPC1768为例) ;/***************************************************************************** ; * @file: startup_LPC177x_8x.s ; * @purpose: CMSIS Cortex-M3 Core Devic…
什么是启动代码?     启动代码是系统上电或者复位后运行的第一段代码,是进入C 语言的main 函数之前需要执行的那段汇编代码.STM32的启动代码在startup_stm32f10x_hd.s 启动代码有何用?     它的作用是在用户程序运行之前对系统硬件及软件环境进行必要的初始化并在最后使程序跳转到用户程序.它直接面对ARM 处理器内核及硬件控制器进行编程,所执行的操作与具体的目标系统紧密相关.     C语言程序的运行需要具备一定的条件,如分配好外部数据空间.设置初始堆栈指针.配置时钟…
Startup code:启动代码. 在Keil中,启动代码在复位目标系统后立即被执行.启动代码主要实现以下功能: (1) 清除内部数据存储器 (2) 清除外部数据存储器 (3) 清除外部页存储器 (4) 初始化small模式下的可重入栈和指针 (5) 初始化large模式下的可重入栈和指针 (6) 初始化compact模式下的可重入栈和指针 (7) 初始化8051硬件栈指针 (8) 传递初始化全局变量的控制命令或者在没有初始化全局变量时给main函数传递命令. 在每一个启动文件中,提供了可供用…
bootloader启动代码init.s解析----IRQ中断处理函数 init.s源代码如下: ;///////////////////////////////////////////// ;option.inc _ISR_STARTADDRESS EQU 0x33ffff00 ;2440addr.incINTOFFSET EQU  0x4a000014    ;Interruot request source offset ;/////////////////////////////////…
很多人都会把两者混淆,所以这里稍微说一下. 启动代码和Bootloader有点类似于类和结构体的关系,也就是说结构体只是一种很特殊很特殊的类,但不能说类是一种结构体. 也就是说可以说启动代码是Bootloader,但是不能说Bootloader是启动代码.但是这也不是绝对的,只在某些情况下可以这么说. 通常,启动代码仅仅是指CPU复位后到main函数之前需要执行的汇编代码.需要这段代码是为了给C语言程序准备好堆栈空间,中断入口和外部数据等.而且这段汇编代码可以直接对硬件进行操作,效率很高. Bo…
今天查看了 iar 上面的启动文件,好奇堆栈指针到底是什么时候赋值的,所以就仔细的阅读了代码和相关手册,找到了答案. 首先,芯片启动后,会从ROM的首地址处进行执行,那么我们从 linker 里面找找具体是怎么安排的. /* 起始地址标签 */ define symbol __ICFEDIT_intvec_start__ = 0x08000000; /* iar 代码块绝对地址定位: intvec块 和 StartCode 块 */ place at address mem:__ICFEDIT_…
WebAPI使用属性路由,配置config.MapHttpAttributeRoutes();后出现错误: System.InvalidOperationException: 该对象尚未初始化.请确保在所有其他初始化代码后面的应用程序启动代码中调用 HttpConfiguration.EnsureInitialized(). 在 System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes() 在 System.Web.Http.Routi…
STM32启动文件简单分析(STM32F10x.s适用范围)定时器, 型号, 名字在<<STM32不完全手册里面>>,我们所有的例程都采用了一个叫STM32F10x.s的启动文件,里面定义了STM32的堆栈大小以及各种中断的名字及入口函数名称,还有启动相关的汇编代码.STM32F10x.s是MDK提供的启动代码,从其里面的内容看来,它只定义了3个串口,4个定时器.实际上STM32的系列产品有5个串口的型号,也只有有2个串口的型号,定时器也是,做多的有8个定时器.比如,如果你用的ST…
被忽略的过程 对于C这种编译性语言,我们平时编译时,不管是通过IDE图形界面,还是通过命令行,总感觉编译一下就完成了,然后就得到了针对某OS和某CPU的二进制可执行文件(机器指令的文件).但是实际上在源码到可执行文件中间隐藏了四个过程,这四个过程被OS默默的处理了. 编译四个过程:预处理.编译.汇编.链接 四个过程中的“编译”,特指其中的某个过程,这四个过程合在一起,我们也统称为编译,所以“编译”二字到底指的是第二个过程,还是全部过程的统称,这个就要看说话的“语境”了.其实统称的“编译”,完整的…
与其它SuperSocket程序相同,启动代码同样也要写到程序的入口处,如 Windows Azure 的 WorkRole 项目的OnStart() 方法: public override bool OnStart() { // Set the maximum number of concurrent connections ServicePointManager.DefaultConnectionLimit = 100; // For information on handling conf…
​ 随着互联网的快速发展,各种组件层出不穷,需要框架集成的组件越来越多.每一种组件与Spring容器整合需要实现相关代码.SpringMVC框架配置由于太过于繁琐和依赖XML文件:为了方便快速集成第三方组件和减少对配置文件的依赖,SpringBoot应运而生,其中采用了约定大于配置的理论让开发者不需要过多配置即可进行开发.SpringBoot底层使用的Spring ,默认集成了N多组件的自动装配.使用SpringBoot很简单,在主类中添加一个@SpringBootApplication,以及调…
转自:http://blog.csdn.net/tommy_wxie/article/details/17093297 最近公司要求调试一个内核,启动时有问题,所以就花了一点时间看看内核启动. 看的过程中总结了一点东西,希望可以帮助大家调试内核. 当我开始看的时候,第一件事是从网上搜集资料,不看不知道,一看吓一跳!牛人太多了,像这种内核启动的上古代码早就被人分析的彻彻底底.这注定我写的只能是烂微博了. 为了此微博有存在的必要,我会显示内核启动打印的代码位置(用绿色表示)及出现错误打印的原因(用红…
转自:http://www.cnblogs.com/yaoshiyou/archive/2009/11/25/1610901.html 插件介绍 辛苦了两人小时写日志不小心浏览器崩溃了,发誓以后一定记得用Word先写好. 将Word 中的内容copy编辑器中,就是不大对劲,最惨的就图片,根本就没有. 在记事本中写内容,代码图片一张张处理. 打开网站—>输入用户名->输入密码->输入验证码->正在进入->用户名或密码错误->重输-正在进入->验证码不正确->……
启动的方式 对于S3C2440而言,启动的方式有两种,一是Nor Flash方式启动,二是Nand Flash方式启动. 使用Nor Flash方式启动 Nor Flash的地址范围如下 0x0000.0000—0x0800.0000 (2M Nor Flash) 片内的BootSRAM地址被置为 0x4000.0000—0x4000.DFFF (4K BootSRAM) 由于可以在Nor Flash直接运行代码,因此BootSRAM被映射到别的地址上去,可作为其他用途. 程序映像直接存放到NO…
/* * armboot - Startup Code for OMAP3530/ARM Cortex CPU-core * * Copyright (c) 2004 Texas Instruments <r-woodruff2@ti.com> * * Copyright (c) 2001 Marius Gröger <mag@sysgo.de> * Copyright (c) 2002 Alex Züpke <azu@sysgo.de> * Copyright (c)…