一篇简述 Linux 移植与系统启动

1、Linux系统启动与U-Boot

所谓移植就是把程序代码从一种运行环境转移到另一种运行环境。对于内核移植来说,主要是从一种硬件平台转移到另一种硬件平台上运行。

体系结构级别的移植是指在不同体系结构平台上Linux内核的移植,例如,在ARM、MIPS、PPC等不同体系结构上分别都要对每个体系结构进行特定的移植工作。一个新的体系结构出现就需要进行这个层次上的移植。

SoC级别的移植是指在具体的SoC处理器平台上Linux内核的移植,例如,ARM i.MX6Dual处理器要进行SoC特定的移植工作,主要包括处理器相关的内核修改、集成外设驱动。

主板级别的移植是指在具体的目标主板上Linux内核的移植,例如,在i.MX6DualFS2410目标板上,需要进行主板特定的移植工作,主要包括特定目标板系统启动与主板扩展外设相关的外设驱动等。

基于同一款处理器的不同嵌入式设备并不是所有的外部设备都相同,不同的开发板可以使用不同的SDRAM、Flash、以太网接口芯片等。这就需要根据硬件修改或者开发驱动程序。

一个最基本的Linux操作系统应该包括:引导程序、内核与根文件系统三部分。因此,需要移植一个Linux系统的话,那么需要以下4个步骤:

  • 搭建交叉开发环境;
  • BootLoader的选择和移植;
  • kernel的配置、编译、和移植;
  • 根文件系统的制作。

(1)BootLoader简介

引导加载程序(Boot Loader)就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

如下图所示:

为什么系统移植之前要先移植BootLoader?

BootLoader的任务是引导操作系统,所谓初始化CPU运行环境,引导操作系统。就是启动内核,让内核运行就是把内核加载到内存RAM中去运行。

是谁把CPU运行环境初始化的?

是谁把内核搬到内存中去运行?

SRAM只要系统上电就可以运行,而SDRAM需要软件进行初始化才能运行,那么内存是由谁来初始化的呢?

(2)Bootloader的执行过程

  • 初始化SDRAM;
  • 初始化串口;
  • 检测处理器类型;
  • 设置Linux启动参数;
  • 调用Linux内核映像。

(3)BootLoader的分类

很多人说BootLoader就是U-Boot,这种说法是错误的,确切来说是U-Boot是BootLoader的一种。

如下图所示。
 

可以知道如果使用开发板board/<board_name>,就先执行“make <board_name>_config”命令进行配置,然后执行“make all”, 就可以生成如下3个文件:

  • u-boot.bin:二进制可执行文件,它就是可以直接烧入eMMC中的文件。
  • u-boot: ELF格式的可执行文件。
  • u-boot.srec: 原摩托罗拉格式的可执行文件。

对于imx6dlsabresd开发板,可以根据开发板的型号选择执行“mak

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值