二、U-Boot第二阶段代码分析
U-Boot 第二阶段流程图
移植U-Boot 的主要工作在于对硬件的初始化、驱动,所以下面的重点放在硬件的操作上。
(1)初始化本阶段要使用到的硬件设备
最主要的是设置系统时钟、初始化串口,只要这两个设置好了就可以从串口看到打印信息。
board_init 函数设置MPLL、改变系统时钟,它是开发板相关的函数,在board/EmbedSky/EmbedSky.c 中实现。
board_init 函数还保存了机器类型ID,这将在调用内核时传给内核代码如下:
串口的初始化函数主要是 serial_init,它设置 UART 控制器,是CPU 相关的函数,在cpuarm920ts3c24x0serial.c 中实现。
(2)检测系统内存映射
对于特定的开发板,其内存的分布是明确的,所以可以直接设置。board/EmbedSky/EmbedSky.c 中的dram_init 函数指定了本开发板的内存起始地址为0x30000000,大小为4000000(在对应的头文件中可找到)。代码如下:
这些设置的参数,将在后面向内核传递参数时用到。
(3)U-Boot 命令的格式
U-Boot 中的每个命令都通过U_BOOT_CMD 宏来定义,格式如下:
宏U_BOOT_CMD 在 include/command.h 中定义,如下图:
Struct_Section 也是 在 include/command.h 中定义,如下图:
(4)为内核设置启动参数
U-Boot 也是通过标记列表向内核传递参数。
关键字:TQ2440 移植 U-Boot 启动过程
引用地址:
TQ2440 学习笔记—— 31、移植U-Boot【U-Boot 的启动过程第二阶段源码分析】
推荐阅读最新更新时间:2024-11-12 12:32
u-boot-2016.09移植(7)-nandflash
一、uboot中增加NANDFLASH 由第二节分析得知,硬件初始化在board_init_r中,我们到这里找到nand的初始化: u-boot-2016.09$ vim common/board_r.c 看这里知道首先我们需要定义宏CONFIG_CMD_NAND,屏蔽CONFIG_CMD_ONENAND,才可以调用nand的初始化函数,在include/conifgs/tq210.h中定义宏: #define CONFIG_CMD_NAND 编译,发现没有定义CONFIG_SYS_MAX_NAND_DEVICE,由于我们的板子上只有一个nandflash,所以在tq210.h中定义宏: #define C
[单片机]
玩转mini2440开发板之【tekkamanninja版的u-boot的编译和烧录】
今天继续玩一玩mini2440开发板,弄清楚U-boot的编译和烧录过程。 首先,这里交代一个前提,此处所使用的u-boot,是已经移植测试过的,完全可用的版本。就本文而言,我使用的是tekkamanninja大神于2010.03移植过来的mini2440定制版的u-boot,这位大神是友善之臂官方推荐的研究u-boot的大神,厉害之极,其所移植的代码也一直都是大众所效仿和研究的目标。下面就开始具体步骤的介绍: 1、下载和分支 由于tekkamanninja大神的u-boot源码存放于github上,因此我们使用以下命令进行克隆: git clone https://github.com/tekkamanninja/u
[单片机]
I.MX6Q(TQIMX6Q/TQE9)学习笔记——U-Boot移植
其实Freescale的BSP移植文档已经将u-boot的移植步骤讲述的非常详细了,但为了以后方便查阅,还是按照自己的理解记录在这里。 获取源码 根据前一篇文章搭建好LTIB环境后就可以非常方便的导出u-boot源码了。切换到ltib目录,并运行如下指令: ./ltib -m prep -p u-boot 该指令执行需要一些时间,指令执行完成后Freescale维护的u-boot-2009.8就会出现在rpm/BUILD目录下。 添加单板 为TQIMX6Q开发板创建相应的单板目录,可以参考sabresd相关的目录进行,下面是具体的步骤。 Step1. 创建board目录 创建board目录需要以下几步:
[单片机]
Exynos4412 Uboot 移植(一)—— Uboot 编译流程分析
Uboot 所用版本 u-boot-2013.01 u-boot-2013.01 中有上千文件,要想了解对于某款开发板,使用哪些文件、哪些文件首先执行、可执行文件占用内存的情况,最好的方法就是阅读它的Makefile。 根据顶层Readme文件的说明: 可以知道如果使用开发板board/ board_name ,就先执行“make board_name _config”命令进行配置,然后执行“make all”, 就可以生成如下3个文件: U-Boot.bin:二进制可执行文件,它就是可以直接烧入eMMC中的文件。 U-Boot : ELF格式的可执行文件。 U-Boot.srec : 摩托罗拉格式的可执行
[单片机]
STM32开发笔记64: STM32F4 UART4-5移植驱动程序应注意的问题
单片机型号:STM32F407VGT6 使用通用串口驱动程序分别运行UART1和UART4,则UART1正常,UART5不正常,本文解释具体原因。 先看STM32F407VGT6的串口配置情况,如下图所示,串口1、2、3、6为USART(同异步串口),串口4、5为UART(异步串口)。 在启动文件startup_stm32f407xx.s定义的中断矢量入口地址不同,可参看下面程序。 DCD USART1_IRQHandler ; USART1 DCD USART2_IRQHandler ; USA
[单片机]
S3C6410移植日记系列
现在发布的是si版本,是以单片机模式运行的,S3C6410这样强劲的cpu,运行si版本,就作为高速单片机用了,所有地址都是按照物理地址一一对应映射。cpu的状态也没有区分内核态和用户态。 1、中断引擎最初的部分代码在IRQ态(还没决定是否使用FIQ)。 2、中断引擎的大部分以及用户ISR运行在SVC态。 3、所有其他代码运行在SYS态。 移植碰到的第一个问题就是烧录代码到flash的问题,由于廉价的jtag烧录器不支持arm11,我们不能要求用户必须拥有昂贵的仿真烧录工具才能够在idea6410上使用djyos,这样不利于用户使用。 我的第一个目标,就是弄清楚怎么下载程序的问题,也就是把一个最简单的闪灯程序运行起来,
[单片机]
UCOS2_STM32F1移植详细过程(一)
Ⅰ、概述 该文写针对初学µC/OS的朋友,基于以下平台来一步一步移植µC/OS嵌入式操作系统。 UCOS移植相关平台: 系统平台:µC/OS-II (最新V2.92版) 硬件平台:STM32F1 (适合F1所以系列) 开发平台: Keil(MDK-ARM) V5 1.为什么是 µC/OS -II? 原因在于µC/OS-II是一个比较成熟、稳定的系统,与µC/OS-III比较有些机制相对简单很多。但你掌握了µC/OS-II,µC/OS-III很容易就理解了。 2.为什么是STM32F1? 硬件平台是在移植的过程中比较重要的一点,也就是说,不同的硬件平台,移植过程中的端口(uCOS-II\Ports下源文件)存在一定的
[单片机]
u-boot-2011.06在基于s3c2440开发板的移植之支持YAFFS2
YAFFS和YAFFS2是由AlephOne公司开发的NAND Flash文件系统。YAFFS和YAFFS2主要差异在于PAGE读写size的大小,YAFFS2可支持到2Kper page,远高于YAFFS的512 Bytes,因此YAFFS2对于大容量NANDflash来说更具优势。 就u-boot来说,主要是能够使它支持下载YAFFS文件,以供操作系统使用,因此只要能够实现YAFFS的写入功能即可,无需实现读取功能。 u-boot-2011.06是支持写入YAFFS文件的,但默认情况下,该功能没有开启。要想开启该功能,就必须在include/configs/zhaocj2440.h文件内定义CONFIG_CMD_N
[单片机]