【Linux内幕】U-BOOT快速入门

前言

Das U-Boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,包括PPC、ARM、AVR32、MIPS、x86、68k、Nios与MicroBlaze。这也是一套在GNU通用公共许可证之下发布的自由软件。
一言以蔽之,uboot的功能就是用户输入启动linux的命令的时候, u-boot会将 kernel 映像(zImage) 和从 nand flash上读到 RAM 空间中, 为内核设置启动参数,调用内核,从而启动linux系统。

1.uboot目录

uboot下载地址:http://ftp.denx.de/pub/u-boot/
在这里插入图片描述
├── api 存放uboot提供的接口函数
├── arch 与体系结构相关的代码,uboot的重头戏
├── board 根据不同开发板定制的代码,代码也不少
├── common 通用的代码,涵盖各个方面,已命令行处理为主
├── disk 磁盘分区相关代码
├── doc 文档,一堆README开头的文件
├── drivers 驱动,很丰富,每种类型的设备驱动占用一个子目录
├── examples 示例程序
├── fs 文件系统,支持嵌入式开发板常见的文件系统
├── include 头文件,已通用的头文件为主
├── lib 通用库文件
├── nand_spl NAND存储器相关代码
├── net 网络相关代码,小型的协议栈
├── onenand_ipl
├── post 加电自检程序
└── tools 辅助程序,用于编译和检查uboot目标文件
一般移植U-BOOT会修改绿色部分的代码,U-BOOT中各目录间也是有层次结构的,虽然这种分法不是绝对的,但是在移植过程中可以提供一些指导意义。
在这里插入图片描述

2.U-BOOT功能

要学习u-boot之前,最好先了解一块板子的裸板程序启动的过程,因为u-boot其实就是裸板程序的集大成者。
U-boot的主线目标功能是从flash中读出内核,放到内存中,启动内核。为了要实现这个功能,u-boot分为两个阶段,主要在start.s文件中。
在这里插入图片描述

2.1第一阶段

硬件设备初始化;
为加载 Bootloader 的第二阶段代码准备 RAM 空间;
复制 Bootloader 的第二阶段代码到 RAM 空间中;
设置好栈;
跳转到第二阶段代码的 C 入口点(start_armboot);
备注:在第一阶段进行的硬件初始化一般包括:关闭 WATCHDOG、关中断、设置 CPU的速度和时钟频率、 RAM 初始化等。这些并不都是必须的,比如 S3C2410/S3C2440的开发板所使用的 U-Boot 中,就将 CPU的速度和时钟频率放在第二阶段进行设置。

2.2第二阶段

初始化本阶段要使用到的硬件设备;
检测系统内存映射( Memory map );
将内核映像和根文件系统映像从 Flash上读到 RAM 空间中;
为内核设置启动参数;
调用内核;
备注:为了方便开发,初始化一个串口以便程序员与 Bootloader 进行交互。部分内容的解释在文末,名为“内容二的解释”。

3.u-boot源码查看前置步骤

将u-boot源码放在linux系统下编译(需要配置交叉编译工具),设置为板子的配置(如make smdk2410_config),再编译(make),最好的办法是拿一个开发板的u-boot源码进行编译,因为开发板厂商一般都会提供编译环境等(这些问题不该在初学时就遇到,否则会极大降低学习的积极性),编译成功后,将代码复制到windows下用source insight查看代码(这样看代码之间的互联性比较方便)。

以我的板子(jz2440为例),将全部目录加进SI后,要去掉部分不是2440板子的板级文件(注:加入文件时,如果不能加入.S文件,需要更改SI的设置)
board目录只留samsung/smdk2410;
arch目录只留:(注意要加入各层的通用文件(未在文件夹内的))
a、arm/cpu/arm920t/s3c24x0以及各层的通用文件(未在文件夹内的)
b、arm/cpu/dts
c、arm/include/asm/arch-s3c24x0和proc-armv以及各层的通用文件(未在文件夹内的)
d、arm/lib
include/config目录只加smdk2410.h
再同步(project-synchronize files)

加入讨论

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值