u-boot开发手记

 

u-boot开发手记  -- u-boot for skyeye

author: hhq0216

time: 06.12.26

 

1、前言

 

由于工作的需要,我开始尝试在s3c2410开发板上移植u-boot1.1.6,由于没有硬件仿真器,我的工作进展得非常痛苦,每次只能将认为有较大进展和把握的u-boot.bin烧写进我的开发板测试,而一次的烧写近20分钟。在这种情况下我选择了在skyeye上移植,希望能将工作平台转移到skyeye上,这样不仅减轻了开发难度,更加快了开发速度。

这篇文章即我开发过程中的一点手记,希望能对大家有所帮忙,同时更希望能起到抛砖引玉的作用,让更多的朋友加入到skyeye中。

 

2、开发环境

 

我使用的硬件平台是华恒的study r3开发板,s3c2410x CPU16M NOR flash64M SDram

软件开发是在cygwin下用skyeye进行u-boot for smdk2410的仿真

 

3skyeye的安装

 

首先下载安装skyeye-1.2-RC8.tar.tar的源码包,解压,按readme里的说明编译:

 

在正式编译之前我想先提下关于skyeye LCD支持,请先确认你的cygwin有以下软件包的支持:

gtk+-2.0-dev pkg-config atk-dev pango-dev freetype2-dev glib-dev x11-dev binutils-dev(bfd)

 

[]、我下载了个cygwin的完整安装包cygwin-cd-release-20051128.iso,里边有所需的所有支持包。

 

确认安装了以上支持包后,就可以开始编译了,由于头文件路径的原因会提示个小错误:

 

arch/arm/mach/skyeye_mach_ps7500.c:50:26: mpw/sys/time.h: No such file or direct

ory

make: *** [binary/skyeye_mach_ps7500.o] Error 1

 

只需找到arch/arm/mach/skyeye_mach_ps7500.c文件,做如下修改即可:

 

#ifdef __CYGWIN__

//#include "mpw/sys/time.h"

#include

#endif

 

重新编译即可生成binary/skyeye.exe

建立个指向执行文件的链接 ln -s /home/skyeye-v1/binary/skyeye.exe /bin/skyeye.exe 这样我们就可以方便地执行skyeye程序了。

 

4、交叉编译器的安装

 

下载安装bu-2.15_gcc-3.4.3-c-c++-java_nl-1.12.0_gi-6.1.exe

我将交叉编译器安装在d:/cygwin/GNUARM/

安装时不要选中Install Cygwin Dlls,否则运行时会提示:

$ arm-elf-ar

d:/cygwin/gnuarm/bin/arm-elf-ar.exe (1296): *** proc version mismatch detected -

 0xD94C588A/0x19C16FB6.

You have multiple copies of cygwin1.dll on your system.

Search for cygwin1.dll using the Windows Start->Find/Search facility

and delete all but the most recent version.  The most recent version *should*

reside in x:/cygwin/bin, where 'x' is the drive on which you have

installed the cygwin distribution.

提示系统中重复安装了cygwin1.dll,须删除多余库文件,保留x:/cygwin/bin下的那个。

最后提示是否将交叉编译器路径加入环境变量中,这要看个人习惯了,我是没选。

 

安装后可以测试下交叉编译器是否可用

 

$export PATH=/GNUARM/bin:$PATH

$arm-elf-ar

$arm-linux-gcc -o test test.c
$file test
test: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped.

 

5、编译u-boot-1.1.6

 

uboot的网站上可以下载到最新的uboot源代码,你可以从以下的网址下载

http://u-boot.sourceforge.net/

目前u-boot的最新版本是u-boot-1.1.6.tar.bz2u-boot源码目录结构清晰,是学习bootloader很好的范例,这里我的硬件平台是s3c2410u-boot已经支持一个smdk2410的板子,我们只要根据实际硬件做少许修改即可,以下是我所做的修改:

有关开发板的配置都在”include/configs/smdk2410.h”

源码:

#ifdef CONFIG_AMD_LV400

#define PHYS_FLASH_SIZE        0x00080000 /* 512KB */

#define CFG_MAX_FLASH_SECT      (11) /* max number of sectors on one chip */

#define CFG_ENV_ADDR           (CFG_FLASH_BASE + 0x070000) /* addr of environment */

#endif

修改:

#ifdef CONFIG_AMD_LV400

#define PHYS_FLASH_SIZE        0x01000000 /* 16MB */

#define CFG_MAX_FLASH_SECT      (128)      /* max number of sectors on one chip */

#define CFG_ENV_ADDR           (CFG_FLASH_BASE + 0x020000) /* addr of environment */

#endif

 

$make distclean;make smdk2410_config;make

编译生成u-boot.binu-boot其中u-boot.binraw的二进制文件,u-bootELF格式的,这里我选用u-boot.binskyeye里运行。

 

6、配置skyeye.conf,运行u-boot

 

编辑skyeye.conf,这个文件是用来配置主板的,详细说明见skyeye的相关文档。我的skyeye.conf如下:

# add by hhq, 06.12.16

 

cpu: arm920t

mach: s3c2410x

 

#memory area

mem_bank: map=M, type=RW, addr=0x33f00000, size=0x01000000, file=u-boot.bin, boot=yes

mem_bank: map=M, type=RW, addr=0xc0000000, size=0x01000000, file=vmlinux

mem_bank: map=M, type=RW, addr=0xc1000000, size=0x00800000, file=initrd.img

 

#all peripherals I/O mapping area

mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000

 

[]:这里的peripherals i/o mapping area是根据cpu手册确定的,设置不对会导致当机

 

好的,如果一切顺利你将会看到u-boot的命令提示符SMDK2410#

$ skyeye.exe

SKYEYE: If you have ELF kernel file, please use -e option to indicate your ELF f

ormat kernel filename

SKYEYE: If you only have kernel binary image, you should put the filename of ker

nel binary image in skyeye.conf file

arch: arm

cpu info: armv4, arm920t, 41009200, ff00fff0, 2

mach info: name s3c2410x, mach_init addr 0x4163e0

SKYEYE: use arm920t mmu ops

Loaded RAM   u-boot.bin

Loaded RAM   vmlinux

Loaded RAM   initrd.img

 

 

U-Boot 1.1.6 (Dec 26 2006 - 21:57:44)

 

DRAM:  64 MB

Flash: 16MB

*** Warning - bad CRC, using default environment

 

In:    serial

Out:   serial

Err:   serial

SMDK2410 #

 

不知1.2版本的skyeye是否已经支持flash的仿真,总之我是没成功配置过,所以导致u-boot没能自动引导内核,而停在了命令提示符,不过这没关系,我们可以通过go c0000000来手动跳转到内核入口来执行:

$go c0000000

 

这样我们就初步实现了整个系统在skyeye上的移植工作,不过这只完成了u-bootskyeye上的移植,真正要完成开发,最终在板子上运行还有很多工作要做,如不同flash的支持,网络的支持,及command的扩展等等。

 

7、遗留的问题

 

关于skyeyeLCD的支持,虽然编译通过了,可不知该怎么仿真

lcd:state=on,type=smdk2410,mod=gtk

运行时提示:

(:928): Gtk-WARNING **: cannot open display:

你可能感兴趣的:(我的手记)