ArmLinux BOOTLOADER全程详解
网上关于Linux的BOOTLOADER文章不少了,但是大都是vivi,blob等比较庞大的程序,读起来不太方便,编译出的文件也比较大,而且更多的是面向开发用的引导代码,做成产品时还要裁减,这一定程度影响了开发速度,对初学者学习开销也比较大,在此分析一种简单的BOOTLOADER,是在三星公司提供的2410 BOOTLOADER上稍微修改后的结果,编译出来的文件大小不超过4k,希望对大家有所帮助. 【 ArmLinux BOOTLOADER 全程详解】 在嵌入式 Linux 系统中,BOOTLOADER 是一个至关重要的组件,负责初始化硬件、加载内核以及传递启动参数。本篇文章将探讨一个针对三星S3C2410处理器的简化版BOOTLOADER,其特点是编译后文件大小不超过4KB,易于理解和裁剪,适合初学者学习和快速开发。 1. 关键概念 - **COMPRESSED KERNEL and DECOMPRESSED KERNEL**:在现代Linux系统中,通常使用压缩后的KERNEL(COMPRESSED KERNEL),因为它包含了解压器。BOOTLOADER需要在RAM中为压缩和解压的KERNEL分配足够的空间,确保解压过程不会覆盖原始的压缩KERNEL。如果空间不足,可能导致错误发生。 - **Jffs2 File System**:JFFS2是一种针对闪存设备的文件系统,允许在FLASH上存储armlinux应用的数据。虽然在本文中未深入讨论,但它是嵌入式Linux系统常见的持久化存储解决方案。 - **RAMDISK**:在没有其他设备时,RAMDISK可以作为根文件系统使用。通常,BOOTLOADER会将压缩的RAMDISK映像加载到特定地址,并通过启动参数ATAG_INITRD2传递给KERNEL。 - **启动参数**:在调用内核前,BOOTLOADER需要设置启动参数,如ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK等。这些参数以标记列表形式传递,定义在Linux内核源码的include/asm/setup.h头文件中。此外,也可以使用COMMANDLINE来设定参数。 2. 开发环境与开发板配置 - **CPU**: S3C2410,具有64MB的SDRAM(分为两个银行)和32MB的NOR FLASH。 - **内存布局**: - 0x4000_0000:4KB的片内DRAM,存放BOOTLOADER IMAGE。 - 0x0000_0000:32MB的16位宽FLASH。 - 0x3000_0000:64MB的32位宽SDRAM。 - 0x3000_0100:启动参数。 - 0x3120_0000:压缩的KERNEL IMAGE。 - 0x3200_0000:压缩的RAMDISK。 - 0x3000_8000:解压后的KERNEL IMAGE地址。 - 0x3040_0000:解压后的RAMDISK IMAGE地址。 - **开发环境**:基于Redhat Linux,使用armgcc工具链和armlinux KERNEL。 建立armgcc编译环境的方法包括下载arm-gcc 3.3.2 toolchain,解压缩并移动到/tooldchain目录,然后在makefile中设置arch=arm和CROSS_COMPILE变量。 在深入研究BOOTLOADER的实现细节时,开发者需要了解如何初始化CPU和外围设备,例如设置内存控制器、时钟、中断控制器以及串行端口。此外,BOOTLOADER还需要能够识别和加载KERNEL映像的格式,例如ELF或BIN。在加载KERNEL后,BOOTLOADER会设置启动参数,并跳转到KERNEL的入口点执行。 总结来说,ARM架构下的Linux BOOTLOADER设计需要考虑硬件平台的具体特性,如内存布局、文件系统支持和启动参数管理。一个简洁的BOOTLOADER不仅有助于快速开发,也有利于理解整个系统的启动流程,对于初学者和开发者来说,都是一个很好的学习起点。
剩余11页未读,继续阅读
- 粉丝: 1
- 资源: 15
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助