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 CPU,16M NOR flash,64M SDram
软件开发是在cygwin下用skyeye进行u-boot for smdk2410的仿真
3、skyeye的安装
首先下载安装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.bz2,u-boot源码目录结构清晰,是学习bootloader很好的范例,这里我的硬件平台是s3c2410,u-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.bin和u-boot,其中u-boot.bin是raw的二进制文件,u-boot是ELF格式的,这里我选用u-boot.bin在skyeye里运行。
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-boot在skyeye上的移植,真正要完成开发,最终在板子上运行还有很多工作要做,如不同flash的支持,网络的支持,及command的扩展等等。
7、遗留的问题
关于skyeye中LCD的支持,虽然编译通过了,可不知该怎么仿真
lcd:state=on,type=smdk2410,mod=gtk
运行时提示:
(