首页 > 其他 > 详细

嵌入式U-BOOT菜鸟入门,for s3c2440开发板

时间:2019-07-19 13:59:14      阅读:106      评论:0      收藏:0      [点我收藏+]

一、u-boot目录

技术分享图片

一般移植U-BOOT会修改绿色部分的代码,U-BOOT中各目录间也是有层次结构的,虽然这种分法不是绝对的,但是在移植过程中可以提供一些指导意义。

技术分享图片

可以通过“内容一的举例”来看看移植过程中需要更改哪些文件,我将其放在文末。

二、U-BOOT功能

要学习u-boot之前,最好先了解一块板子的裸板程序启动的过程,因为u-boot其实就是裸板程序的集大成者。

U-boot的主线目标功能是从flash中读出内核,放到内存中,启动内核。为了要实现这个功能,u-boot分为两个阶段,主要在start.s文件中。

2.1第一阶段

硬件设备初始化;

为加载 Bootloader 的第二阶段代码准备 RAM 空间;

复制 Bootloader 的第二阶段代码到 RAM 空间中;

设置好栈;

跳转到第二阶段代码的 C 入口点;

在第一阶段进行的硬件初始化一般包括:关闭 WATCHDOG、关中断、设置 CPU的速度和时钟频率、 RAM 初始化等。这些并不都是必须的,比如 S3C2410/S3C2440的开发板所使用的 U-Boot 中,就将 CPU的速度和时钟频率放在第二阶段进行设置。

2.2第二阶段

初始化本阶段要使用到的硬件设备;

检测系统内存映射( Memory map );

将内核映像和根文件系统映像从 Flash上读到 RAM 空间中;

为内核设置启动参数;

调用内核;

备注:为了方便开发,初始化一个串口以便程序员与 Bootloader 进行交互。部分内容的解释在文末,名为“内容二的解释”。

三、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)

四、源码分析

? 最传统的方法是从makefile开始分析,但是这样太难了,

五、附录

内容一的举例:

比如common/cmd_nand.c文件提供了操作NAND Flash的各种命令,这些命令调用drivers/nand/nand_base.c中的擦除、读写函数来实现;而这些函数是针对NAND Flash的共性做的封装,与平台/开发板相关的代码用宏或外部函数代替;平台相关则在cpu/xxx,开发板相关则在board/xxx。

以增加yaffs文件系统映像功能为例,先在common下的cmd_nand.c增加命令,比如nand write.yaffs,这个命令调用/drivers/nand/nand_util.c中的函数,而这些函数依赖于drivers/nand/nand_base.c、cpu/arm920t/s3c24x0/nand_flash.c文件中的相关函数。

内容二的解释:

所谓检测内存映射,就是确定板上使用了多少内存、他们的地址空间是什么。由于嵌入式开发中的 Bootloader 多是针对某类板子进行编写,所以可以根据板子的情况直接设置,不需要考虑可以适用于各类情况的复杂算法。

Flash上的内核映像有可能是经过压缩的,在读到 RAM 之后,还需要进行解压。当然,对于有自解压功能的内核,不需要 Bootloader 来解压。

将根文件系统映像复制到RAM中并不是必须的,这取决于是什么类型的根文件系统,以及内核访问它的方法。

将内核放在适当的位置后,在跳入执行内核之前,需要根据内核启动的需求,配置相应的启动参数。

调用内核的函数是什么还没找到,待会再找

嵌入式U-BOOT菜鸟入门,for s3c2440开发板

原文:https://www.cnblogs.com/princepeng/p/11212854.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!