视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
u_boot 移植(一)之uboot配置编译
2025-10-02 15:44:41 责编:小OO
文档
u_boot 移植(一)之uboot配置编译

一 、开发环境

PC OS : Ubuntu 14.04

SOC : 基于ARM Cortex-a8 核的S5PC100

开发板 : FSC100

u_boot : u-boot-2010.03

编译器 : arm-cortex_a8-linux-gnueabi-gcc version 4.4.6

二、目标

1.Uboot 能从FSC100的 Nand Flash 正常启动

2.Uboot 支持DM9000 网卡

3.Uboot 支持Nand Flash 读、写、擦除

4.Uboot 支持Linux 内核引动

好了,接下来就进行移植uboot到FSC100开发板吧 。

三、建立自己的平台

1、 下载源码

我们可以在下面这个网站上下载最新的和以前任一版本的 uboot

ftp://ftp.denx.de/pub/u-boot/

2、 解压 uboot 源码并进入目录

tar zxvf u-boot-2010.03.tar.gz

cd u-boot-2010.03

u-boot-2010.3 源码中已经支持了SMDKC100了(SMDKC100是三星公司基于SOC : S5PC100设计的一块开发板)。我们的FSC100使用的SOC也是S5PC100,所以我们只需要稍加修改Uboot支持的SMDC100代码,就可以编译出支持我们的FSC100开发板的uboot了。

1.修改 u-boot 顶层目录下的 Makefile,指定交叉工具链

ifeq ($(HOSTARCH, $(ARCH))

CROSS_COMPILE ?=

endif

下添加:

ifeq (arm, $(ARCH))

CROSS_COMPILE ?= arm-cortex_a8-linux-gnueabi

endif

2.在 u-boot 顶层目录下的 Makefile 中添加 fsc100 配置信息

smdkc100_config: unconfig

@$(MKCONFIG) $(@:_config=) arm arm_cortexa8 smdkc100 samsung s5pc1xx

下添加:

fsc100_config: unconfig

@$(MKCONFIG) $(@:_config=) arm arm_cortexa8 fsc100 samsung s5pc1xx

3. 添加 fsc100 平台信息

(1)进入board/samsung目录

(2)拷贝smdkc100 为 fsc100

(3)进入fsc100目录下修改smdkc100.c 为fsc100.c

修改Makefile中的smkc100.o 为fsc100.o

(4)进入include/configs目录,拷贝smdkc100.h为fsc100.h

include/configs目录下的.h文件为对应开发板的配置文件。smdkc100.h 为SMDKC100开发板的配置文件,所以

我们把smdkc100.h文件拷贝成fsc100.h,作为我们FSC100开发板的配置文件。

四、配置和编译uboot

1.配置我们自己的开发板fsc100

2.编译uboot

编译完成后生成的 u-boot.bin 是二进制的文件。但是该文件只能在 smdkc100 平台上运行,我们需要对 u-boot 源代码进行相应的修改。

五、如何快速的调试uboot我想很多人在移植uboot的时候,都经历过,为了调试uboot,每次修改代码,编译好后,都需要将它烧写到开发板上这个过程。当然,并不是一次修改后,烧写到开发板上就一定可以成功启动。大多数情况都是启动开发板后,没有任何反应的结果。需要多次调试。

究其原因,无非以下几种情况。

(1)内存初始化代码有问题

(2)从Nand Flash启动的时候,读Nand Flash 的代码有问题

(3)SOC的时钟初始化有问题,导致串口输出乱码

每次调试,将uboot烧写到Nand Flash是一个很耗时、很繁琐的操作。其实,很多时候我们拿到一块开发板的时候,这块开发板中已经有一个uboot 了,我们可以利用这个uboot来进行调试。

FSC100开发板,从Nand Flash启动后,已经有一个uboot了。这个uboot支持网络、NAND Flash操作等功能。我们可以利用uboot的TFTP 服务将我们的调试的uboot下载到内存中去,然后利用uboot中的go 命令运行我们调试的uboot 。

好了,接下来我们就按照这个思路来进行吧!

哦!还不能立即进行,我们还需要修改一下uboot代码。通过前面对uboot 的分析,大家应该知道uboot启动的时候,会初始化系统时钟和内存。要知道,我们开发板自带的uboot在启动的时候,已经初始化好了系统时钟和内存。如果再次初始化系统时钟或内存,我们的内存就不能正常工作了。

嗯,我们修改以下几个地方。

(1)修改cpu/arm_cortexa8/start.S , 去掉内存初始化和系统时钟初始化

(2)修改board/samsung/fsc100目录下的config.mk文件。

config.mk文件中,存放的是代码段运行的起始地址。它的内容如下:

S5PC100 的内存映射图如下:

从上图可以知道,TEXT_BASE的默认值,不符合当前情况。

FSC100上接了256M内存,所以能使用的地址范围为 : 0x20000000 ~

0x2fffffff。在这里我们将TEXT_BASE的值修改为 0x20f00000。

是不是一定是这个值?不是,其他值也可以。当然不是这个范围的任意一个值都可以,要想知道原因,你就必须知道uboot内存的分配情况了。这里就不说了,前面已经说过了。

嗯,修改完成后,编译uboot。编译完成后,将uboot拷贝到tftp的工作目录下。

启动开发板,通过tftp 下载uboot到0x20f00000

用go命令运行uboot,效果如下:下载本文

显示全文
专题