U-Boot移植全程指导

        经过快一个月的时间,终于将U-Boot相关的知识全部总结在一起,从入门——>熟悉——>理解——>深入的方式进行讲解,最终达到可针对不同版本的U-Boot进行移植。下面贴出文章的目录,供大家参考(其中标红文字表示还未完成的部分):

一、嵌入式Linux系统软件结构与分布

二、Bootloader简介

2.1 Bootloader的功能

2.2 Bootloader的特点

2.3 Bootloader的分类

2.4 Bootloader的启动模式

2.4.1 启动加载(Boot loading)模式

2.4.2 下载(Downloading)模式

2.4.3 下载模式之网络启动方式

2.5 Bootloader的启动流程

2.5.1 Bootloader第一阶段的功能

2.5.2 Bootloader第二阶段的功能

2.6 Bootloader与内核的交互

2.6.1 设置标记ATAG_CORE

2.6.2 设置内存标记

2.6.3 设置命令行标记

2.6.4 设置标记ATAG_NONE

三、自己编写一个简单的Bootloader

3.1 Bootloader的目的

3.2 Linux内核启动条件

3.3 着手编写简单的Bootloader

四、U-Boot简介

4.1 U-Boot工程介绍

4.2 U-Boot源码获取

4.3 U-Boot源码结构

4.4 U-Boot工具介绍

4.5 U-Boot常用命令介绍

4.5.1 环境变量相关指令

4.5.1.1 设置环境变量:setenv

4.5.1.2 保存环境变量:saveenv

4.5.1.3 打印环境变量信息:printenv

4.5.2 网络相关命令

4.5.2.1 测试网络是否通了:ping

4.5.2.2 远程下载文件

4.5.3 Nand Flash操作命令

4.5.4 Nor Flash指令

4.5.4.1 打印Flash存储器信息:flinfo

4.5.4.2 设置块保护信息:protect

4.5.4.3 擦除指令:erase

4.5.5 从串口加载文件

4.5.6 系统引导指令

4.5.7 信息类命令

4.5.7.1 获取帮助:help

4.5.7.2 显示开发板信息:bdinfo

4.5.7.显示控制台设备和信息:coninfo

4.5.7.4 显示Flash存储信息:flinfo

4.5.7.5 显示映像文件头部信息:iminfo

4.5.8 存储类命令

4.5.8.1 显示或设置地址偏移:base

4.5.8.2 校验和计算:crc32

4.5.8.3 存储单元比较:cmp

4.5.8.4 存储器拷贝:cp

4.5.8.5 显示存储单元内容:md

4.5.8.6 存储单元修正:mm(自动增长)

4.5.8.7 简单的RAM测试:mtest

4.5.8.8 写存储器命令:mw

4.5.8.9 存储单元修正(恒定地址):nm

4.5.8.10 在地址范围内无限循环:loop

4.5.9 USB操作指令

4.5.10 SD卡(MMC)指令

4.6 U-Boot环境变量介绍

4.6.1 bootcmd

4.6.2 bootargs

4.6.2.1 root参数

4.6.2.2 rootfstype

4.6.2.3 console参数

4.6.2.4 men参数

4.6.2.5 ramdisk_size

4.6.2.6 initrd与noinitrd参数

4.6.2.7 init参数

4.6.2.8 mtdparts

4.6.2.9 ip参数

4.6.2.10 使用实例

五、U-Boot源码熟悉

5.1 U-Boot的配置过程

5.1.1 U-Boot配置命令展开

5.1.2 mkconfig脚本分析

5.1.3 板级配置文件介绍

5.2 U-Boot的编译过程

5.2.1 U-Boot编译命令展开

5.2.2 U-Boot编译流程

5.2.3 Makefile文件分析

5.3 U-Boot启动流程介绍

5.3.1 U-Boot分析之源码第1阶段

5.3.1.1 设置中断向量表:cpu/arm920t/start.S

5.3.1.2 设置CPUSVC32模式:start.S

5.3.1.3 关看门狗、关中断及设置时钟频率:start.S

5.3.1.4 CPU相关部件初始化

5.3.1.5 存储控制器初始化:board/smdk2410/lowlevel_init.S

5.3.1.6 代码重定向:cpu/arm920t/start.S

5.3.1.7 设置堆栈:start.S

5.3.1.8 清除BSS段:start.S

5.3.1.9 跳入第二阶段C入口执行:start.S

5.3.2 U-Boot分析之源码第2阶段

5.3.2.1 定义并初始化gd_tbd_t结构体:lib_arm/board.c

5.3.2.2 计算U-Boot映像的大小:board.c

5.3.2.3 循环调用初始化函数:board.c

5.3.2.4 内存及Flash初始化:board.c

5.3.2.5 配置环境变量重定位:board.c

5.3.2.6 初始化IP地址及控制终端等:board.c

5.3.2.7 进入main_loop()主循环

5.3.2.8 检测启动延时与启动中断

5.3.2.9 进入U-Boot控制终端

5.4 U-Boot之核心内容:命令实现

5.4.1 U-Boot命令的实现流程

5.4.1.1 U-Boot命令的定义

5.4.1.2 U-Boot命令实现

5.4.2 添加一个自己的命令

5.5 U-Boot之终极目标:启动内核

5.5.1 启动内核之映像拷贝

5.5.2 启动内核之启动内核

5.5.2.1 do_bootm()函数

5.5.2.2 do_bootm_linux()函数

5.5.2.3 TAG参数的设置

六、U-Boot的移植

6.1 U-Boot的移植步骤

6.1.1 U-Boot的移植步骤

6.1.2 U-Boot的调试方法

七、U-Boot源码详解

7.1 run_command()函数实现

7.2 环境变量的实现

        接下来稍作休息,准备开始自己编写一个Bootloader来启动Linux内核,到时候还可提供源码,主要讲解方法。只要你手上有开发板,就可以按照同样的步骤编写一个简单的只为启动Linux内核为目的的Bootloader。
        然后再针对比较老版本的U-Boot和较新版本的U-Boot进行移植,提供移植的全过程详解。为大家提供移植U-Boot的全程讲解,希望能给大家的工作带来很大的帮助。
       最后,对于U-Boot中,一些比较好的功能实现(在内核中也有对应功能的实现,但代码不是很好理解)的源码进行分析,通过对这块的学习,可以加深自己阅读源代码的能力。更重要的是可以提高看Linux内核源代码的能力。
      总之,第一次在CSDN上发表技术文章,希望得到大家的鼎立支持!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值