第三章 裸机_第一个裸机程序(上)

第一章 裸机调试入门知识

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值