第一章 裸机调试入门知识

1.对于友善之臂Micro2440开发板进行裸机调试时,需要将启动FLASH选项开关拨动到NOR FLASH上。这样做的原因:裸机程序里面会包含很多的初始化,这些初始化一般都是由u-boot或者vivi来完成的,而u-boot或者vivi一般都放在NOR FLASH中,所以启动选项要选择到NOR FLASH上。

2.H-JTAG和J-Link

H-JTAG:H-JTAG团队开发的一款自主原创的ARM仿真套件, H-JTAG开发套件主要包括了: H-JTAG SERVER 调试软件, H-FLASHER 烧写软件, 及高速H-JTAG USB 仿真器。

J-Link:SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。J-Link配套的烧写FLASH的J-Flash。

JTAG: (Joint Test Action Group;联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。

ARM的一种调试接口协议就是JTAG,在仿真时,开发平台IAR、Keil或者ADS都会有一个公共调试接口(比如RDI),要实现开发平台到ARM的JTAG协议之间的转换,有两种做法:软件实现或者硬件实现。

软件实现:H-JTAG就是这样的。H-JTAG的硬件就仅是一个物理电平的转换接口,所以很简单。而电脑中装的H-JTAG软件就是前面说到的服务程序,负责协议转换的。

硬件实现:做一个电路板,用此板直接接收来自IAR、Keil或者ADS等软件的调试命令,由此板做RDI到JTAG协议的转换。然后与目标板通信,这就是J-Link的工作原理。

总结:J-Link和H-JTAG完成的功能基本一致,只是实现的方式不一样。所以在进行ARM调试的时候要么使用H-JTAG的一系列软件(H-FLASH等)要么使用J-Link的一系列软件(J-Flash等)。

3.上电之后,开发板从nor flash启动,会绕开片内ram,直接从nor flash的零地址处开始执行。一般的裸机程序都需要在u-boot的基础上运行,因为u-boot会做很多的初始化工作,如果没有u-boot这些初始化工作就必须要用户自己来完成。

4.调试裸机程序时,直接下载后自动运行?

这个裸机程序被下载到RAM中,汇编指令的最后附加了一条跳转指令跳转到这段RAM的起始地址处去执行,所以就有这种效果。

5.开发板上有Linux系统时,选择的是Nand flash启动,那么u-boot是下载到Nor flash中的,这个时候u-boot还是会完成系统上电的初始化工作吗?

6.Nand flash启动和Nor flash启动

Nand flash启动:CPU会自动从Nand flash中读取前4KB的数据放置在片内SRAM里面(这个功能是由Nand flash控制器来完成)(S3C2440是SOC),同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。CPU是从0x00000000开始执行,也就是执行Nand flash前4KB的内容。因为Nand flash没有地址线,所以 不能把Nand flash映射到0x00000000,只能使用片内SRAM作为一个载体,通过这个载体把Nand flash中大代码复制到SRAM中去执行。

注:这4K的代码里面保存有u-boot的部分功能,如拷贝功能等。

Nor flash启动:Nor flash被映射到0x00000000地址(就是nGCS0,这里不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x40000000),然后CPU从0x00000000开始执行(也就是从Nor flash中执行)。

7.使用ADS调试裸机程序时编译环境的设置

1)新建一个项目

主菜单 File->New,里面选择ARM Executealbe Image,表示要创建一个axf项目我们在这里选择ARM Executable Image,在“Project name:”中输入工程文件名,本为“myled”,点击“Location:”文本 Set”按钮,浏览选择想要保存该工程的路径(本例为“D:\work”),将这些设置好之后,点击“ ,即可创建一个新的名为 myled的工程。注意ADS对中文支持非常不好,强烈建议不在放在中文路径下面

ADS的项目文件是 mcp.创建成功后会出现空项目窗口

2)向项目增加源码

把源码拷入项目目当,在项目窗按右键,选择增加文件

3)切换构造输出选项

ADS与一般开发环境不一样的,ADS的项目除了有Debug和Release输出两个选项之外,还多出了一DebugRel选项,它与Debug的区别在,DebugRel只有一个基本的调试信息,体积小一点,一般我们在线调试选择DebugRel的构造结果来调试

切换的方法在项目窗口,右边的下拉列表选择相应输出选项.

– DebugRel:使用该目标选项,在生成目标的时候,会为每一个源文件生成调试信息。 
– Debug:使用该目标选项,在生成目标的时候,会为每一个源代码生成最完整的调试信息。

– Release:使用该目标选项,在生成目标的时候,不会生成任何调试信息。

4)配置项目属性

一般缺省项目是不能直接来编译的,往往需要对生成的目标进行配置,点击主菜单Edit 菜单,选择“DebugRelSetting…”(注意:这个选项会因为用户选择的不同目标而有所不同), 或者选择项目窗口的配置按钮,出现如图所示的设置窗口。

基中关键几个配置有

1.ARM Assembler 的编译选项    这里要选择汇编编译的指令集。不同CPU要选对类型,如S3C2440要选ARM920T.ADS 1.2不支持S3C6410的ARM1172JZF-S的内核,可以昨时用ARM920T或ARM112020E来代替

还有字节序选择小端字节序.

同理道理,如果你的项目包含C或C++的源码,必须要配置ARM C Compiler选项/ARM C++ Compiler选项.

2.ARM 链接选项

这里LinkType项目,如果Simple类型(即标准只有一个RO,一个RW类型),则需要配置RO_BASE即默认的代码段地址。RW段地址不填表示紧密排在RO段后面。

另外程序的入口地址可以单独配置,不写表示与RO Base地址一致,

如果可以自己初始化启动的程序,一般最好指定是哪一个S中的哪一个段是作为入口。在layout页标签里

如果选择scatter 输出类型,必须要还选择相应的scatter文件路径。

3.输出 bin文件格式

这要做两步设置.首先设置Target Settings中的Post-linker为ARM FromElf

然后在 ARM fromElf再设相应的文件名

5.构造程序

选择项目窗口的Make,或工具条上Make按键

6.清除编译结果(make clean)

选择主菜单的project-->Remove Object Code.或用快捷键 Ctrl->-.

强出对话框,选择All Targets

第三章 裸机_第一个裸机程序(上)相关推荐

  1. 数据库第三章习题_完整版

    数据库系统与概念 (6th) 第三章习题 文章目录 数据库系统与概念 (6th) 第三章习题 实践习题 1. 使用大学模式,用SQL写出如下查询. 2. 假设给你一个关系grade_points( g ...

  2. (王道408考研操作系统)第三章内存管理-第一节5:动态分区分配算法(首次适应、和邻近适应)

    文章目录 一:首次适应算法(First Fit) 二:最佳适应算法(Best Fit) 三:最坏适应算法(Worst Fit) 四:邻近适应算法(Next Fit) 总结 动态分区分配算法:用于研究当 ...

  3. 操作系统_第三章处理器管理_批处理作业的调度算法

    在批处理操作系统控制下的作业称为批处理作业. 在操作系统中,我们把磁盘上用来存放作业信息的专用区域称为输入井,把在输入井中等待处理的作业称为后备作业. 批处理操作系统应怎样从输入井中选取作业装入主存储 ...

  4. (最优化理论与方法)第三章优化建模-第一节:优化建模和常见建模技术

    文章目录 一:优化建模概述 二:目标函数的设计 (1)最小二乘法 (2)正则化 (3)最大似然估计 (4)代价.损失.收益函数 (5)泛函.变分 (6)松弛 三:约束的设计 (1)问题本身的物理性质 ...

  5. Web前端开发笔记——第三章 CSS语言 第一节 CSS的基本概念和样式表

    目录 一.CSS和HTML 二.CSS的基本语法格式 三.CSS样式设置 (一)行内样式 (二)内嵌样式 (三)引用外部CSS文件 四.多重样式优先级 结语 一.CSS和HTML CSS,又称为层叠样 ...

  6. (王道408考研操作系统)第三章内存管理-第一节8:非连续分配管理方式之段页式管理方式

    文章目录 一:分段和分页管理优缺点 二:段页式管理基本概念 (1)基本思想 (2)逻辑地址结构 (3)段表和页表 三:段页式管理实现地址管理 一:分段和分页管理优缺点 经过前面几节的叙述,可以看到分段 ...

  7. (王道408考研操作系统)第三章内存管理-第一节7:非连续分配管理方式之基本分段管理方式

    文章目录 一:分段存储管理 (1)基本思想 (2)逻辑地址结构及地址转换 (3)段表 二:分段存储管理实现地址转换 三:分段和分页管理比较 一:分段存储管理 (1)基本思想 基本思想:按照用户进程自身 ...

  8. (王道408考研操作系统)第三章内存管理-第一节6-4:非连续分配管理方式之基本分页存储管理之两级页表

    文章目录 一:单级页表存在的问题 二:两级页表原理 (1)基本原理 (2)逻辑地址结构 三:多级页表 一:单级页表存在的问题 问题一:页表必须连续存放,当页表很大时,就需要占用很多个连续的页框 在32 ...

  9. (王道408考研操作系统)第三章内存管理-第一节6-3:非连续分配管理方式之基本分页存储管理之具有快表的地址变换机构

    文章目录 一:程序访问的局部性原理 二:快表 三:对比 一:程序访问的局部性原理 如下有这样一段简单的C语言程序 int sumarrayrows(int a[M][N]) {int i,j,sum= ...

最新文章

  1. python代码格式-设置Python代码格式
  2. BZOJ1996:[HNOI2010]CHORUS 合唱队(区间DP)
  3. (转)分布式锁的几种使用方式(redis、zookeeper、数据库)
  4. oracle转sparksql工具化,不使用Sqoop流程,利用CacheManager直接完成SparkSQL数据流直接回写Oracle...
  5. js拦截物联返回键跳转到指定页面
  6. es6-es12简单总结
  7. java jwt 单点登录_jwt技术实现系统间的单点登录
  8. 软件测试基础理论与测试方法
  9. ANSYS有限元分析
  10. 星巴克 销售数据分析_星巴克大数据科学家纳米级推广战略顶峰项目
  11. 蓝懿iOS 技术内容交流和学习心得 11.11
  12. OEM/ODM/OBM
  13. 白宁超计算机科学院,基于主动学习的传统中医症状本体构建方法研究综述.PDF...
  14. ASIC Design and C Model
  15. 如何查找APP漏洞并渗透测试 解决网站被黑客攻击
  16. C++:char数组初始化
  17. 机器学习数学知识(一) 自然数e
  18. [转]我在赶集网的两个月 7.4(完结)
  19. 机械cad 讲c语言编程,机械CAD讲解.doc
  20. Unity | VS2019中代码颜色的更改

热门文章

  1. 基于华为云会议SDK 24行代码打造企业专属会议室
  2. 再次携号转网_携号转网来了,中国移动仅需满足3个条件,网友:我要转网
  3. VUE2表格行上下移动(父子、多层级)
  4. 星际地图制作中OB无建筑 退出问题
  5. 关于通用汽车破产的启示问题
  6. C语言:字符串反序输出
  7. jbd2 mysql_修复ext4日志(jbd2)bug( Ext4 文件系统有以下 Bug)
  8. cos图像(cos图像周期)
  9. 开发之外,我们还用过哪些装X的神器
  10. 运维人员在武汉,献给正在拼搏的你,