ARM平台下的嵌入式linux移植大纲(一)

首先要理解嵌入式系统移植的基本概念:

软件的移植是系统开发中最常见的一项工作。嵌入式系统移植一般来说指的是引导程序、操作系统等和硬件关系

比较密切的软件在一个新的硬件平台上运行起来的过程。

 

嵌入式系统移植分为以下几种:

引导程序移植

操作系统移植

应用程序移植

 

引导程序移植

1、引导程序就是在操作系统内核运行之前运行的一段程序。通过这段程序,可以初始化硬件设备、将系统的软硬件

环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境

2、引导程序的主要目的有两个:初始化硬件和引导操作系统。一般来说,只要能在硬件平台上把这两个部分做好就可以了

 

操作系统移植中关心的是以下几个:

中断系统的移植:不同的硬件系统中断结构差别都非常大,正确的移植是设备驱动能正常工作的前提
时钟系统的移植:时钟是维系整个操作系统的运行的基石

内存管理系统的移植:一般对linux来说主要是IO映射的移植

设备驱动的移植

 


os移植需要掌握的概念

时钟系统在线程切换中的作用——时钟与中断(重中之重)

mmu的概念

虚拟内存的映射

 

应用程序移植

应用程序移植一般指的是将其移植到某个操作系统上,难度一般是体现在将一个应用移植到一个新的操作系统的情

况下存在的。硬件平台的差异对于应用影响不是很大,当然也不排除一些需要特殊硬件支持的应用程序。

 

系统移植的难点

一般来说,嵌入式系统移植工作中的代码编写量不会很大,代码的逻辑也不会非常复杂。移植的难度并不在于代码

的编写,而在于移植者对于系统的理解程度。移植者必须对所移植的系统的硬件结构、操作系统的基本工作原理等

非常理解,才可能把移植工作很好的完成

 

Bootloader移植

什么是bootloader

简单地说,bootloader就是在操作系统内核运行之前运行的一段小程序。通过这段程序,我们可以初始化硬件设

备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好

正确的环境。

 

bootloader的主要功能

 

1、PC系统中的

BIOS启动和自检

OS Loader:grub 或LILO

PC系统启动过程

 

2、嵌入式系统中的

初始化硬件,为系统运行建立环境,类似PC的BIOS

读入OS核心并引导

为系统的可升级性和可调试性提供方便

-将系统的可执行image进行替换和升级

-从串口或Ethernet向目标系统中下载image

建立一个基本的命令环境

 

bootloader——stage1

硬件设备初始化(内存控制器的设置)

为加载bootloader的stage2部分的代码准备RAM空间

拷贝bootloader的stage2部分的代码到RAM空间中,并跳转执行

设置好堆栈,Heap等

跳转到stage2的C入口点

 

bootloader——stage2

初始化本阶段要使用到的硬件设备(net,flash等)

将OS映像从flash上读到RAM空间中

为OS设置启动参数

跳转到OS内核image的入口点

 

U-Boot(Universal Bootloader)

GPL下资源代码最完整的一个通用BootLoader

支持绝大部分处理器架构

Powerpc arm mips i386 nios m68k ......

支持大量开发板:214个开发板(u-boot1.1.6)

大量外设驱动

http://sourceforge.net/projects/u-boot

 

U-Boot的目录树结构

board/:所有支持的开发板

cpu/:所有支持的cpu

disk/,drivers/,fs/,lib_xxx/,net/,toos/,etc

 

u-boot的编译

重点理解   链接脚本

  1. start.o_____________ /
  2. u-boot.lds-----------  =========>link<===========与开发板相关的*.c文件
  3. libgcc.a-------------/

link-------------->u-boot(elf)------------------>OBJCOPY -O binary---------------->u-boot.bin

 

u-boot的启动过程分析(第一阶段)

  • 关中断,初始化PLL,设置时钟,MMU操作,lowlevel_init(初始化bank时序)
  • 重定位u-boot,实际大部分情况是将u-boot第二阶段代码和数据拷贝到SDRAM中
  • 设置stack,这里实际也包括设置heap等
  • clear BSS段
  • 跳转到第二阶段(注意已经是在C的环境中)

u-boot的启动过程分析(第二阶段)

  • 分配gd:gd = (gd_t*)(_armboot_start-CFG_MALLOC_LEN-sizeof(gd_t);
  • 调用初始化序列  board_init    interrupt_init
  • 一系列的初始化
  • 进入主循环,等待输入命令

linux核心的启动

cmd_myboot.c

检查image信息

设置引导参数

启动核心:两个函数mach_type,addr

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值