【内核笔记】Bootloader启动引导程序

1.u-boot 可以支持多种架构
可以启动多种操作系统

user bootcode是从SD卡等外部设备
上加载的,这样iROM就会先找到能够启动的外部设备
SD卡,并从核心板上的EMMC上搬运user bootcode,而
搬运的这段代码就是我们常说的Bootloader。
ubootpak.bin主要就是一个包含了2ndboot和
uboot.bin的完整Bootloader。

u-boot 的目录结构
arch 体系结构相关,按架构进行分类
board 开发办相关,按厂商分类
conmmon 各种命令的实现
include 各种头文件和开发板配置文件
api 用于演示测试用的代码,通常不参与工程编译
disk 硬盘接口程序
doc 开发使用文档
drivers 设备驱动
examples 一些独立运行的实例,通常不参与工程编译
fs 能支持的文件系统 fat 、ubifs,用于访问带文件系统的存储设备
lib用于存放库和其他主要支持文件程序,中断处理、启动相关等
net 独立于网卡驱动的网络协议
tools 工具软件 mkimage用于制作内核镜像,scripts用于生成指定的config,mk,还有支持GDB的调试工具等
post 商店自检程序
prototype
scripts 用于生成指定的config.mk配置文件,以及一些检查程序

环境变量设置命令
 u-boot中采用环境变量来协调各命令工作时所需的
参数及数据
 环境变量可以存储Bootloader在运行过程中需要用
到的可配置参数列表,以及需要传递给内核的参数
 用户可以通过printenv、setenv、saveenv进行查看、
设置、保存这些参数
 如:
#printenv //打印环境变量
#setenv bootdelay 3 //3秒内核启动等待
#saveenv //保存环境变量
#reset //软重新启动

下载镜像:
通过串口下载到内存中
loady 0x48000000 loadb 0x48000000
USB命令下载
fastboot
网络命令下载(t同一局域网)
ping 10.30.10.xxx

系统启动方式:
1.boot (外存启动)
2.bootm 0x48000000 (内存启动)
3.fastboot flash app uImage(PC)
bootm 0x48000000(开发板u-boot命令行)

commond
board_init_r()->main_loop()没有键按下时直
接启动内核:
 autoboot_command()->
run_command_list()->
parse_string_outer()->setup_string_in_str()->
parse_stream_outer()->
parse_stream()->
run_list()->
run_list_real()->
run_pipe_real()->cmd_process()->
find_cmd()
 board_init_r()->main_loop()有键按下时从命令
行接收命令并处理:
 cli_loop()->
parse_file_outer()->setup_file_in_str()->
parse_stream_outer()->
parse_stream()->
run_list()->
run_list_real()->
run_pipe_real()->cmd_process()->find_cmd()

三步完成U-boot命令的添加:
1.在include/configs/x6818.h中增加一项宏定义:
#define CONFIG_CMD_HELLOWORLD 1
2 、并在common/文件夹下建立cmd_helloworld.c
3 、在common/Makefile中增加一项

在这里插入图片描述

make
重新下载ubootpak,bin
在命令行输入help 和hello 查看结果

猜你喜欢

转载自blog.csdn.net/Flywithdawn/article/details/108792575