我的2440开发板没有norflash,是从nand引导的,但是扬创不提供U-BOOT的源代码,
所以决定移植一个,但是一直因为没有一个很好的调试方法。一直没有完成。最近看到
skyeye支持nand启动,同时支持u-boot。随决定移植一下,目前初期阶段是移植2410的
版本,ok之后再移植2440的版本。
我上一篇《在cygwin下面用skyeye调试u-boot》有写u-boot需要下载1.1.4版本或
1.1.2版本的。我采用的是1.1.4版本。主要修改如下几个地方:
以下参考(U-BOOT FOR 阳初2410 v2.3 BY wmmwang 8/2Array/2007),我本来写了
,是直接copy 2440的,我以为一样的,结果吃了大亏,nand寄存器不一样,搞的我很烦,
怪自己啊。
1、 在cpu/armArray20t/start.s中修改如下:
#define STACK_BASE 0x33f00000
#define STACK_SIZE 0x8000
DW_STACK_START:
.word STACK_BASE+STACK_SIZE-4
#ifndef CONFIG_SKIP_RELOCATE_UBOOT
relocate: /* relocate U-Boot to RAM */
adr r0, _start /* r0
#include "linux/mtd/mtd.h"
#include "linux/mtd/nand.h"
//#define LARGEPAGE_FLASH
#define __REGb(x) (*(volatile unsigned char *)(x))
#define __REGi(x) (*(volatile unsigned int *)(x))
#define NF_BASE 0x4e000000
#define NFCONF __REGi(NF_BASE + 0x0)
#define NFCMD __REGb(NF_BASE + 0x4)
#define NFADDR __REGb(NF_BASE + 0x8)
#define NFDATA __REGb(NF_BASE + 0xc)
#define NFSTAT __REGb(NF_BASE + 0x10)
#define BUSY 1
inline void wait_idle(void) {
int i;
while(!(NFSTAT & BUSY))
for(i=0; i SZ_1M)*/) {
return -1; /* invalid alignment */
}
/* chip Enable */
NFCONF &= ~0x800;
for(i=0; i> Array) & 0xff;
NFADDR = (i >> 17) & 0xff;
NFADDR = (i >> 25) & 0xff;
#else
NFADDR = i & 0xff;
NFADDR = (i >> 8) & 0x07;
NFADDR = (i >> 11) & 0xff;
NFADDR = (i >> 1Array) & 0xff;
NFADDR = (i >> 27) & 0x3;
NFCMD = NAND_CMD_READSTART;
#endif
wait_idle();
for(j=0; j < NAND_SECTOR_SIZE; j++) {
*buf = (NFDATA & 0xff);
buf++;
}
i += NAND_SECTOR_SIZE;
}
/* chip Disable */
NFCONF |= 0x800; /* chip disable */
return 0;
}
4、 修改board/smdk2410/Makefile:
COBJS := smdk2410.o flash.o nand_read.o //添加nand_read.o
编译就可以了。
以下是采用skyeye进行调试。
首先是生成nand.dump文件。
在skyeye-1.2.4\device\nandflash\tools下面有个mknandflashdump.c。
在cygwin下面编译 gcc mknandflashdump.c 生成a.exe
copy 刚才生成的u-boot.bin
执行./a.exe u-boot.bin nand.dump 0x0
就生成了nand.dump了。
修改skyeye.conf文件:
# skyeye config file for S3C2410X
cpu: armArray20t
mach: s3c2410x
# physical memory
mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000, file=./u-boot.bin,boot=yes
mem_bank: map=M, type=RW, addr=0x30000000, size=0x04000000
#mem_bank: map=M, type=RW, addr=0xC0000000, size=0x04000000,file=./vmlinux
#mem_bank: map=M, type=RW, addr=0x30000000, size=0x03F80000
#mem_bank: map=M, type=RW, addr=0x33F80000, size=0x00080000, file=./u-boot.bin,boot=yes
#mem_bank: map=M, type=RW, addr=0xc1000000, size=0x01000000
# all peripherals I/O mapping area
mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000
mem_bank: map=I, type=RW, addr=0x1Array000300, size=0x00000020
#net: type=cs8Array00a, base=0x1Array000300, size=0x20,int=Array, mac=08:00:3E:26:0A:5B, ethmod=tuntap, hostip=10.0.0.1
nandflash: type=s3c2410x,name=KArrayF1208U0B,dump=./nand.dump
#lcd: type=s3c2410x, mod=gtk
dbct:state=on
cygwin下面输入:skyeye 就ok。
注:我在copy_myself之后有个验证一直不通过,目前还在测试中。
后续我再改改
下一步:
移植到2440中,目前好像skyeye不支持2440 nand启动,看是否可以修改一下skyeye。
再下一步:
移植ecos到2440,当然也是在skyeye模拟、
先用skyeye模拟。
发现skyeye真是个好软件,特别是在bootloader移植和操作系统移植。
相关推荐
成功的实现了在skyeye下仿真lcd小程序
本文档详细的描述了如何在linux环境下skyeye中安装uboot
基于S3C2410的嵌入式Linux在SkyEye上的移植分析.pdf
SKYEYE硬件模拟
在Linux下安装skyeye的详细步骤。
skyeye是一个支持多架构,多核,并且高度可扩展的硬件仿真平台,当前主要由核心库 libcommon.so和基于核心库的一系列插件组成。SkyEye支持的体系结构有Arm, Blackfin, Coldfire, PowerPC, MIPS,Sparc和x86.
skyeye移植到windows下的一个运行程序实例,skyey仿真at91rm9200的学习
由于SkyEye提供了源代码和相关文档,有经验的用户完全可以修改和扩充SkyEye来满足自己的需求。 <br>二.SkyEye模拟硬件介绍 目前SkyEye模拟了大量的硬件,包括CPU内核、存储器、存储器管理单元、缓存单元、...
更改skyeye的debugserver端口号,并使用arm-linux-insight对uboot进行源码级的调试,无需硬件环境即学习和开发uboot以及linux
详细描述了在vmware下如何用skyeye来仿真s3c2410的步骤
uClinux 下 skyeye 的网络驱动
在cygwin上基于skyeye的2410 移植threadx。解决之前栈错误,完美运行。
skyeye1.3.4,unstable
skyeye下的armlinux,关于linux内核的编译和移植
linux 环境下skyeye运行实例,适用于初学者
从linux下移植到windows的skyeye程序,无源码~可以再linux下直接模拟嵌入式开发,比起windows+vmware+skyeye的方式快很多倍
虚拟机下Skyeye安装过程及测试 linux操作
Linux下搭建SkyEye uClinux环境.pdf
SkyEye上基于S3C2410的U-Boot及Linux移植,宋小宁,邵峰晶,U-boot是一个功能强大的引导加载程序,Linux是一个源码开放的优秀操作系统。S3C2410是目前较为流行的基于ARM920T 内核的嵌入式处理器,SkyE
SkyEye是一个指令级模拟器,可以模拟多种嵌入式开发板,可支持多种CPU指令集,在SkyEye上运行的操作系统意识不到它是在一个虚拟的环境中运行,而且开发人员可以通过SkyEye调试操作系统和系统软件。由于SkyEye的目标...