1.概述 本文主要讲述了U-boot的移植方法。 U-boot版本:2022.10;硬件平台架构:ARMv8;操作系统:Linux。 2.移植思路 本文的目标是将U-boot移植到ARMv8架构硬件平台,支持引导Linux内核启动。 移植的主要工作包括编译配置、添加硬件平台、添加开发板、添加串口驱动等。 3.移植方法 3.1编译配置 在源码的configs目录下有众多defconfig文件,这些文件是板级的默认配置文件。移植的首要工作就是根据开发板硬件配置编写默认配置文件,以开发板esdev1_evb1为例,将其默认配置文件命名为esdev1_evb1_defconfig。 esdev1_evb1_defconfig的设计方法为基于硬件配置相近平台的defconfig文件,然后通过menuconfig界面修改配置。图示的Target选择了ESDev SoCs系列芯片,开发板选择了ESDEV ESDEV1 EVB1,这些就是我们将要移植的内容。 添加引导Linux内核启动命令booti和bootz,配置界面如下。 3.2添加硬件平台 硬件平台目录在arch/arm下,增加arch/arm/mach-esdev目录,esdev是添加的硬件平台名称。mach-esdev目录下添加具体芯片目录esdev1、Kconfig和Makefile。 芯片目录esdev1用于支持esdev1芯片,包括esdev1芯片使用的公共代码。esdev1目录下包含esdev1.c、Kconfig、Makefile 和u-boot.lds。 esdev1.c一般包括如下内容: (1)存储器映射结构体指针struct mm_region *mem_map定义,arch/arm/cpu/armv8/cache_v8.c会使用mem_map结构体指针。 (2)reset_cpu函数实现。该函数被arch/arm/lib/reset.c调用。 (3)arch_cpu_init函数实现,用于完成CPU初始化相关工作,比如配置ARMv8 CPU的Generic timer。该函数被common/board_f.c的board_init_f函数调用。 u-boot.lds是链接器脚本文件,基于arch/arm/cpu/armv8/u-boot.lds编写。链接器脚本文件的路径配置界面如下。 3.3添加开发板 开发板是我们进行U-boot移植的具体对象。对于esdev1芯片,可以有多个开发板相对应。如下图所示,有EVB1和EVB2两个开发板。 其中,EVB1开发板对应的板级目录为board/esdev/esdev1_evb1。 添加开发板主要有3方面工作,包括添加板级源文件、添加板级头文件和添加板级设备树。 (1)添加板级源文件 添加板级源文件esdev1_evb1.c到board/esdev/esdev1_evb1目录下,完成板级初始化工作,比如DRAM初始化、芯片管脚复用配置、外设配置等。 (2)添加板级头文件 添加板级头文件esdev1_evb1.h到include/configs目录,用于对芯片及板级进行配置,比如GIC控制器、DRAM、串口、定时器、MMC、BOOTCOMMAND以及环境变量等。 (3)添加板级设备树 添加板级设备树esdev1-evb1.dts到arch/arm/dts目录。 3.4添加串口驱动 串口驱动是串口控制台工作的必备基础。串口驱动的加载由common/board_r.c的board_init_r函数调用serial_initialize函数完成。 根据芯片使用的UART IP对驱动进行配置。配置界面示例如下。 4.功能验证 U-boot的启动log示例如下。 支持的命令示例如下。
|
|
来自: 新用户0118F7lQ > 《文件夹1》