Bootloader一般要实现两种启动模式:自举模式和内核启动模式。自举模式也称为bootstrap模式,该模式的主要作用是目标机通过串口与主机通信,可以接收主机发送过来的映像文件,例如内核、文件系统和应用程序,并将其固化在Flash中,也可以将Flash中的映像文件上传到主机。内核启动模式允许嵌入式系统加电启动后加载μCLinux内核,将系统交由μCLinux操作系统管理。
在本系统中,采用一个开关实现两种模式的切抽象。在系统的Flash中只有bootloader时,首先将开关拔上去,提示系统进入自举模式,加电启动后,bootloader根据开关的状态,进入自举模式,接收主机发送过来的内核和文件系统的映像文件。接着将开关拔下来,提示系统进入内核启动模式,再按链,bootloader根据此时的开关状态进入内核启动模式,加载内核和文件系统,由操作系统接管系统。以后也可以根据需要,设置开关的状态,以提示系统进入不同的启动模式。
(5)地址映射表的配置和重映射
地址映射表的配置包括设置Flash地址空间、SDRAM地址空间、外部I/O地址范围和处理器寄存器地址范围。ARM处理器加电后执行在地址0x0处的代码,因此在加电启动时,首先将存储了bootlader的Flash地址空间设置为0x0-0x200000,将SDRAM的地址空间设置为0x1000000-0x2000000,当内核引导程序将内核拷贝到SDRAM后,再设置SDRAM的地址空间为0x00x1000000,而Flash的地址空间为0x1800000-0x1A00000。这需要在内核引导程序中对Flash和SDRAM的地址空间进行重映射。
本文采用的系统启动引导方案流程图如图1。
3 μCLinux内核的加载和初始化
本启动方案中采用μCLinux自带的引导程序加载内核。该引导程序代码在linux/arch/armnommu/boot/compressed目录,其中Head.s的作用最关键,它完成了加载内核的大部分工作;Misc.c则提供加载内核所需要的子程序,其中解压内核的子程序是Head.s调用的重要程序,另外内核的加载还必须知道系统必要的硬件信息,该硬件信息在hardware.h中并被Head.s所引用。
当bootloader将控制权交给内核的引导程序时,第一个执行的程序就是Head.s。下面基于本系统介绍Head.s加载内核的主要过程。Head.s首先配置S3C4510的系统寄存器;再初始化S3C4510的ROM、RAM以及总线等控制寄存器,将Flash和SDRAM的地址范围分别设置为0x0-0x200000和0x1000000-0x2000000;接着将内核的映像文件从Flash拷贝到SDRAM,并将Flash和SDRAM的地址区间分别重映射为0x1800000-0x1A00000和0x0-0x1000000;然后调用Misc.c中的解压内核函数(decompress_kernel),对拷贝到SDRAM的内核映像文件进行解压缩;最后跳转到执行调用内核函数(call_kernel),将控制权交给解压后的μCLinux系统。
执行Call_kernel函数实际上是执行linux/init/main.c中的start_kernel函数,中包括处理器结构的初始化、中断的初始化、进程相关的初始化以及内存初始化等重要工作。
该启动引导方案实现了自举模式和内核启动模式以及两种模式的切换,使得开人员既可以采用自举模式方便地烧写Flash,更新嵌入式系统中的软件平台,又能够切换到内核启动模式,自动安全地启动系统;其次,本方案采用简易的串口通道作业主机与目标系统的通信渠道,既可以方便地将操作系统内核、文件系统和其他应用下载到目标系统中,又可以作为调试μCLinux内核和应用程序通道;此外针对ARM7TDMI的无MMU特性,采用修改后的μCLinux内核引导程序加载操作系统和初始化操作系统环境,解决内核加载的地址重映射问题和操作系统的内存管理问题。
共1条
1/1 1 跳转至页
基于ARM-μCLinux嵌入式系统启动引导的实现3

关键词: 基于 CLinux 嵌入式 系统 启动 引导 实现
共1条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 |