farley
发表于 2006-12-26 13:02:53
:)
请问hhq0216:
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=0x01000000, file=initrd.img
上面第一个file后面是u-boot的文件
第二,三个file后面的是linux系统的文件吗?
这样设置之后,是不是把linux系统启动起来了?
(我是新手,对skyeye还在琢磨中:) )
hhq0216
发表于 2006-12-26 13:10:14
是这样的,skyeye启动后将会把这三个文件加载到内存
不过由于u-boot是从flash中加载内核和根文件的,因此u-boot会停在命令提示符(不知是否支持flash的模拟,有待于版主老大的支持),我们可以用go 0xc0000000 来手动跳转到内核入口运行
farley
发表于 2006-12-26 13:20:22
哦,谢谢了!
期待你的大作! :mrgreen:
hhq0216
发表于 2006-12-26 13:30:12
:shock:
hhq0216
发表于 2006-12-29 09:42:35
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: *** Error 1
只需找到arch/arm/mach/skyeye_mach_ps7500.c文件,做如下修改即可:
#ifdef __CYGWIN__
//#include "mpw/sys/time.h"
#include <time.h>
#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
运行时提示:
(<unknown>:928): Gtk-WARNING **: cannot open display:
hhq0216
发表于 2006-12-29 09:50:31
很少写文章,写得有些乱,大家看后有什么问题欢迎提出,我会及时修改补充
也欢迎论坛的大侠们帮忙补充,谢谢
naroya
发表于 2006-12-29 22:41:19
hhq0216,你发到KSH老大那里,能不能顺便给我也发一份啊!
[email protected]
谢谢了!
farley
发表于 2006-12-29 22:52:56
谢谢hhq0216带来的好文章!期待你能够继续发扬共享精神。。 :mrgreen:
楼上的兄弟的要求太“过分”了,你直接cp不就得了,难道ksh老大得到那一份有“秘方”吗? :lol:
farley
发表于 2006-12-29 22:55:00
谢谢hhq0216带来的好文章!期待你能够继续发扬共享精神。。 :mrgreen:
楼上的兄弟的要求太“过分”了,你直接cp不就得了,难道ksh老大得到那一份有“秘方”吗? :lol:
hhq0216
发表于 2006-12-30 13:12:23
呵呵,我没给ksh老大发邮件,这里贴的就是原稿
看来是写得太不咋的,使得naroya老兄怀疑其真实性:(
ps:LCD仿真已经可以,主要是我原先的cygwin没装全
另怎么贴图?
ksh
发表于 2006-12-30 13:20:59
Good. Flash simulation should can run on uboot also. Hope you can keep on going to dig into.
hhq0216
发表于 2006-12-31 12:53:06
ok
ij889
发表于 2007-1-17 10:03:37
太谢谢了,我买了2410的开发板,最后发现还是要用skyeye来调试,正无从下手呢,楼主给了我很大的帮助!
farley
发表于 2007-2-2 12:13:08
hhq0216 如果能再详细的介绍一下背景知识就更好,说说你的开发板的情况,为什么mem_bank的起始地址是****.......这样对新手来说就更好...........
好像还没有这样的文章
hhq0216
发表于 2007-2-7 13:17:38
多谢farley的提醒 这是当时写时的疏忽
最近也太久没来坛子关注
我尽量改下吧争取年后回来补上
:)