【嵌入式Linux学习之路】序列之7:裸板认识初步 ************************************************************************ 转载请注明: 版权所有!否则后果自负,谢谢合作!! ************************************************************************ 本节我们主要是从下面2个方面进行讲解: 1.准备工作 2.裸板初步 ************************************************************************ 一、准备工作 1.电脑一台; 2.VMare软件; 3.已经安装好了ubuntu的虚拟机; 4.SecureCRT远程连接管理工具; 5.Winscp软件。 二、裸板初步 1.裸板 启动内核(bootloader):初始化其他部件(如:时钟,LCD等) ——> 初始化内存 ——> 操作Flash ——> 从Flash读出内核放到内存 ——> 启动它 U-boot:①硬件操作,②启动内核。 2.怎么学习U-boot ①记住主要目的,启动内核; ②把设计的硬件自学单独学习(如:时钟,Nand Flash、SDRAM、IIC、UART等); ③组合起来就是一个u-boot。 3.重定位 假设CPU是4KRAM,SDRAM64k: 启动过程: ①上电时,CPU把NandFlash前4K内容全部复制到片内内存并执行。 ②假设uboot超过了4k 咋办:那么在4k代码里面必须要加入 这部分代码:①设置时钟,让速度更快。②初始化SDRAM;③读Nand到SDRAM 问:把uboot读到SDRAM哪里去?答:链接地址(你运行前,“应该”在那里)。 链接地址:是一个基地址;其他变量。 如:int a = 123; void main() { int i = a; } 如果基地址是:0x30000000那么a的地址是0x30000028(基地址+123的值) ********************************************* @File crtos.s @功能:通过它转入C程序 ********************************************* .text .global_start _start: Ldr sp = 1024 * 2;@设置堆栈;注意:不能超过2k;因为现在可用的内存只有2k /* 重定位 */ /* 把代码Flash读到内存“链接地址”处 */ b1 main @调用C程序中的main函数 halt_loop: b halt_loop 4.要不要学习汇编 ①要不要学习汇编 Ldr:load 读内存 ldr r0,[r1] :r1里存放的是地址值,去这个地址读取4字节的内容,存入r0 Str:store 写内存 str r0,[r1] :r1里存放的是地址值,把r0里的4字节数据存入到这个地址 所有的汇编、C语言也好,终极目标就是:读写某个地址 ②程序为何要分为代码段、数据段、BSS段 ③栈的作用 ④重定位/链接地址 ⑤位置无关码 *********************************************************************** ************************************************************************
|