【嵌入式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段
③栈的作用
④重定位/链接地址
⑤位置无关码
***********************************************************************
第 1 篇: [原创]【嵌入式linux学习之路】序列之1 虚拟机上挂载ubuntu
第 2 篇: [原创]【嵌入式Linux学习之路】序列之2 嵌入式linux的一些底层知识
第 3 篇:[原创]【嵌入式Linux学习之路】序列之3:Linux常用命令之说一
第 4 篇: [原创]【嵌入式Linux学习之路】序列之4:Linux常用命令之说二
第 5 篇: [原创]【嵌入式Linux学习之路】序列之5:Linux常用命令之说三
第 6 篇: [原创]【嵌入式Linux学习之路】序列之6:Linux常用命令之说四
************************************************************************ |