Tiny6410开发板Linux系统自学笔记 下载本文

内容发布更新时间 : 2024/5/29 20:51:17星期一 下面是文章的全部内容请认真阅读。

Tiny6410开发板Linux系统自学笔记

一、嵌入式Linux系统 自学计划:

0、学习嵌入式Linux系统启动、加载的工作原理。 1、搭建针对目标CPU的Linux编译环境。 2、移植、编译针对目标CPU单板的Bootloader。 3、移植、编译针对目标CPU单板的Linux内核。 4、制作用于Linux内核启动的根文件系统。 4、定制、开发针对目标CPU单板的硬件驱动程序。 5、开发基于嵌入式Linux平台的应用程序。

二、参考文档: 《ARM学习报告1~3》 《嵌入式Linux入门笔记》 《嵌入式Linux性能详解》 《Tiny6410 Linux开发指南》

6410 BootLoader启动过程分析:S3C6410支持从SD卡或Nand FLASH直接启动,但是实际上板子上电后,会首先执行芯片内部iRom中的代码,iROM中的代码会根据GPN[15:13]的管脚来判断从哪个存储设备中读取4KB的启动代码,并放入SteppingStone中运行,这段代码被称为

Bootloader1(BL1)。【因为SteppingStone 是SRAM,所以不需要初始化就可以使用】所以,整个启动过程可以分成BL0, BL1, BL2 三个阶段, 其中BL0是固化在s3c6410内部的iROM中的,1、BL0处理流程如下图所示

2、BL1的处理流程对于SD卡, BL1代码位于(totalSector - 18) 的扇区对于SDHC卡,BL1代码位于(totalSector-1042)的扇区对于NANDFLASH,BL1代码位于最前面的4K空间因为最终的系统需要运行在DDR内存中,所以,BL1首先需要执行DDR的初试化,然后再将GPN[15:13]管脚指定的存储设备中bootloader代码(BL1+BL2)拷贝到DDR中,然后重定位到编译器编译时指定的位置,然后跳转。 3、此时,DDR中的BL2就是完成一些复杂的初始化,以及很多辅助调试功能,比如网络命令,usb命令,nand命令等等,最后执行你的bootcmd,将内核加载到指定位置,将bootargs放到指定位置,传递给内核mach_type,bootargs的存放地址,然后跳转到内核执行,到这里bootloader就完成使命然后消失了。所以说我们可以认为BLx是bootloader的几个阶段,其实如果只是基本功能的话,完全可以将代码压缩到8K以内,那么就不需要重定位,编译的时候直接从0地址开始就行了。 五、BL2将Linux内核加载到RAM的原理分析BL1的主要工作包括:1、硬件设备初始化2、加载U-Boot第二阶段代码到RAM空间3、设置好栈4、跳转

到第二阶段代码入口 BL2的主要工作包括:1、初始化本阶段使用的硬件设备2、检测系统内存映射3、将内核从Flash读取到RAM中4、为内核设置启动参数5、调用内核 1、BL1结束之后,BL2执行之前,系统内存的使用情况 2、嵌入式LInux设备NAND FLASH上典型的空间分配情况: 如上图所示,Boot Loader文件、内核启动参数、内核文件和根文件系统的镜像文件, 这四个文件从FLASH的低地址开始依次保存。6410大致启动过程是:芯片上电找到NAND FLASH起始地址上保存的Boot Loader并运行,Boot Loader读取内核启动参数,再将内核文件和根文件系统的镜像文件加载到RAM中运行。所以,我们后面的学习目标就是如何为特定的CPU和目标单板生成 上述四个系统文件,以及它们的系统工作原理。 三、6410系统内存分配:

ARM CPU采用统一存储空间映射,将各种存储设备:寄存器,ROM,RAM,Flash都映射到这一地址空间。S3C6410的物理内存分成Memory和Pheriperal两部分,地址范围分别为0x0~0x6fffffff 和 0x7000_00000~x7fffffff。Memory,又叫主内存,分为4大区域,分别是启动镜像区、内部内存区、静态内存区、动态内存区0x0000_0000~0x07FF_FFFF 128MB 启动镜像区0x0800_0000~0x0BFF_FFFF 64MB 内部内存区ROM0x0C00_0000~0x0FFF_FFFF 64MB