一、编写目的
本文档用于记录移植U-BOOT-2.14.07到MICRO 2440开发板的过程。方便日后工作、学习中查阅/参考相关设置方法。
U-BOOT移植部分参考“u-boot-2014.04移植手册(TQ2440)”。
二、U-BOOT移植
所有版本的u-boot源代码压缩包都可以在ftp://ftp.denx.de/pub/u-boot/下载。关于u-boot源代码的信息,看http://www.denx.de/wiki/U-Boot/SourceCode。本文档使用的u-boot源码为当前最新版本u-boot-2014.07.tar.bz2(网盘:http://pan.baidu.com/s/1gdJ0u3p)。
1. 解压源码
为了适应更多的CPU,U-BOOT的源码目录结构会越来越复杂,本文档只针对MICRO 2440开发板进行开发,该开发板使用的CPU为三星的S3C2440(arm920t)。
解压U-BOOT源码到工作目录
# tar -xvf /media/sf_ShareDIR/MICRO2440/source/u-boot-2014.07.tar.bz2 -C ./
# cd ./u-boot-2014.07/
2. 建立MICR02440开发板配置
a) 建立board下的micro2440目录
#cp ./board/samsung/smdk2410/ ./board/samsung/micro2440 -rf
#mv ./board/samsung/micro2440/smdk2410.c ./board/samsung/micro2440/micro2440.c
b) 修改micro2440下的Makefile文件
# vim ./board/samsung/micro2440/Makefile
c) 建立include/configs下的micro2440配置文件
# cp include/configs/smdk2410.h include/configs/micro2440.h
d) 修改U-BOOT配置文件
# vim include/configs/micro2440.h
#define CONFIG_SYS_PROMPT "MICRO2440 # "
e) 修改顶层vim boards.cfg,增加开发板配置(旧版本UBOOT在MAKEFILE配置)
# vim boards.cfg
3. 时钟初始化
a) 修改start.S中时钟初始化代码
# vim ./arch/arm/cpu/arm920t/start.S
# if defined(CONFIG_S3C2410)
ldr r1, =0x3ff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
#if defined(CONFIG_S3C2440)
ldr r1, =0x7fff
ldr r0, =INTSUBMSK
str r1, [r0]
#endif /*CONFIG_S3C2440*/
#if defined(CONFIG_S3C2440)
#define MPLLCON 0x4C000004
#define UPLLCON 0x4C000008
#define CAMDIVN 0x4C000018
ldr r0, =CAMDIVN
mov r1, #0
str r1, [r0]
ldr r0, =CLKDIVN
mov r1, #0x05
str r1, [r0]
mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #0xc0000000
mcr p15, 0, r0, c1, c0, 0
ldr r0, =UPLLCON
ldr r1, =0x38022
str r1, [r0]
/*
** When you set MPLL&UPLL values,you have to set the UPLL
** value first and then the MPLL value.(Needs intervals
** approximately 7 NOP)
*/
nop
nop
nop
nop
nop
nop
nop
ldr r0, =MPLLCON
ldr r1, =0x5c011
str r1, [r0]
#else
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
#endif /* CONFIG_S3C2440 */
#endif /* CONFIG_S3C24X0 */
b) 屏蔽micro2440.c时钟初始化代码
在上一步中修改start.S的时候,已经增加了时钟初始化的代码。因此需要屏蔽掉micro2440.c文件下的时钟初始化代码。
# vim board/samsung/micro2440/micro2440.c
int board_early_init_f(void)
{
// struct s3c24x0_clock_power * const clk_power =
// s3c24x0_get_base_clock_power();
struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio();
#if 0
/* to reduce PLL lock time, adjust the LOCKTIME register */
writel(0xFFFFFF, &clk_power->locktime);
/* configure MPLL */
writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV,
&clk_power->mpllcon);
/* some delay between MPLL and UPLL */
pll_delay(4000);
/* configure UPLL */
writel((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV,
&clk_power->upllcon);
/* some delay between MPLL and UPLL */
pll_delay(8000);
#endif
/* set up the I/O ports */
writel(0x007FFFFF, &gpio->gpacon);
writel(0x00044555, &gpio->gpbcon);
4. 编译并下载至于RAM运行
a) 由于需要通过DNW(参考MICRO2440用户手册)下载UBOOT到SDRAM上运行,因此需要先去掉底层初始化相关的代码,如SDRAM、NAND初始化的代码,通过定义CONFIG_SKIP_LOWLEVEL_INIT宏即可。另外需要设置CONFIG_SYS_TEXT_BASE为0x32000000,通过DNW下载BIN文件到这个地址运行。
# vim include/configs/micro2440.h
#define CONFIG_SYS_TEXT_BASE 0x32000000
#define CONFIG_SKIP_LOWLEVEL_INIT
b) 屏蔽U-BOOT中暂时未用到的功能(如果不屏蔽,将编译不过)
# vim include/configs/micro2440.h
(1)
#if 0
#define CONFIG_CS8900 /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE 0x19000300
#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */
#endif
(2)
#if 0
#define CONFIG_USB_OHCI
#define CONFIG_USB_OHCI_S3C24XX
#define CONFIG_USB_KEYBOARD
#define CONFIG_USB_STORAGE
#define CONFIG_DOS_PARTITION
#endif
(3)
#if 0
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_ELF
#define CONFIG_CMD_NAND
#define CONFIG_CMD_PING
#define CONFIG_CMD_REGINFO
#define CONFIG_CMD_USB
#endif
(4)
#if 0
#define CONFIG_CMD_FAT
#define CONFIG_CMD_EXT2
#define CONFIG_CMD_UBI
#define CONFIG_CMD_UBIFS
#define CONFIG_CMD_MTDPARTS
#define CONFIG_MTD_DEVICE
#define CONFIG_MTD_PARTITIONS
#define CONFIG_YAFFS2
#define CONFIG_RBTREE
#endif
c) 编译
# make micro2440_config
# make ARCH=arm CROSS_COMPILE=arm-linux-
d) 运行
设置开发板从NOR启动,使用友善之臂提供的DNW(FriendlyARM BIOS 2.0 for 2440的d选项)下载生成的u-boot.bin文件至RAM中运行。运行结果如下图所示,可以正常输出,但无法初始化FLASH,是因为还没移植好NOR FLASH的驱动。
5. 移植NOR FLASH
MICRO 2440开发板使用的NOR FLASH型号为SST39VF1601。因此需要为U-BOOT增加对NOR的支持。在u-boot中添加对Nor flash的支持比较简单,大多数Nor flash都支持CFI接口,而u-boot有对cfi flash的驱动支持。对于SSTVF1601,并不支持标准的CFI接口,所以得使用JEDEC接口。但jedec_flash.c中并没有SSTVF1601的配置信息,所以得手动添加上。
a) 修改jedec_table结构体,增加对SST39VF1601的支持
#ifdef CONFIG_SYS_FLASH_LEGACY_1024Kx16
{ /* MICRO2440 SST39VF1601 */
.mfr_id = (u16)SST_MANUFACT,
.dev_id = SST39VF1601,
.name = "SST39VF1601",
.uaddr = {
[1] = MTD_UADDR_0x5555_0x2AAA /* x16 */
},
.DevSize = SIZE_2MiB,
.CmdSet = P_ID_AMD_STD,
.NumEraseRegions= 4,
.regions = {
ERASEINFO(0x1000,96),
ERASEINFO(0x1000,160),
ERASEINFO(0x1000,240),
ERASEINFO(0x1000,16),
}
}
#endif
# vim ./drivers/mtd/jedec_flash.c
b) 修改开发板的NOR配置为CONFIG_SYS_FLASH_LEGACY_1024Kx16
# vim include/configs/micro2440.h
#define CONFIG_SYS_FLASH_LEGACY_1024Kx16
#define CONFIG_SYS_MAX_FLASH_SECT (512)
c) 重新编译并下载至RAM中运行
如下图所示,已经可以正常识别NOR FLASH。
d) 测试FLASH读写命令
Ø 解锁FLASH
# protect off all
Ø 格式化FLASH
# erase 0 +200000
Ø 复制数据至FLASH中
# cp.b 32000000 0 200000
Ø 比较数据
# cmp.b 0 32000000 200000
注意:经过上面几个测试后,FLASH的数据已经是混乱的,因此已无法通过NOR启动SUPERVIVI了,需要使用J-LINK重新烧写SUPERVIVI-128MB。
6. 移植DM9000网卡
a) 屏蔽原有网卡配置,这一步在前面已经修改过的
# vim include/configs/micro2440.h
#if 0
#define CONFIG_CS8900 /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE 0x19000300
#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */
#endif
b) 增加DM9000网卡配置
# vim include/configs/micro2440.h
#define CONFIG_DRIVER_DM9000
#define CONFIG_DM9000_BASE 0x20000300
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE + 4)
#define CONFIG_DM9000_USE_16BIT
c) 根据实际网络设置网络参数
# vim include/configs/micro2440.h
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.2.123
#define CONFIG_SERVERIP 192.168.2.222
#define CONFIG_ETHADDR 10:23:45:67:89:AB
d) 修改网卡初始化函数
# vim ./board/samsung/micro2440/micro2440.c
int board_eth_init(bd_t *bis)
{
int rc = 0;
#ifdef CONFIG_CS8900
rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
#endifi
#ifdef CONFIG_DRIVER_DM9000
上一篇:micro2440写的第一个驱动-LED
下一篇:移植Linux 2.6.39至Micro2440开发板
推荐阅读最新更新时间:2024-10-29 04:54
设计资源 培训 开发板 精华推荐
- LT3970HMS-5 1.8V 降压转换器的典型应用
- DC709A,使用 LTC4557EUD 双 SIM 卡电源和接口的演示板
- ITM-MKR680,基于 Bosch Sensortec BME680 压力、温度和湿度传感器的开发板
- LF25CDT-TR 2.5V 低压降稳压器的典型应用
- 使用 ON Semiconductor 的 LM2576-12 的参考设计
- SC174 4A EcoSpeed 同步降压稳压器的典型应用,可选超声波节能
- 90W、12V 交流转直流单输出电源,适用于台式电脑电源
- 【立创开发板】梁山派贪吃蛇
- Micro SD 卡分线板教程| 254
- MAO_ESP按压烧录器
- 下载喽:PCIe要了解的10件事和识别协议的BSX系列BERTScope误码率测试仪技术资料
- 汽车VCU知识问答第一站:了解VCU系统框图和功能清单
- 泰克送你三板斧,招招解决电源测试大难题!答题赢好礼喽!
- 【摸黑抢楼】赢大礼,关于示波器的狂想曲!正式开抢!!!
- 一起哇:基于国产芯、便携烙铁系统IronOS(FreeRTOS)的智能烙铁
- 理想中的开发板、万用表,好用不贵? e络盟11.11抢购,给你机会!
- ADI•世健工业嘉年华—有奖直播:ADI赋能工业4.0—助力PLC/DCS技术创新
- STM32全国巡回研讨会高能来袭, 快告诉小伙伴们
- 福禄克首款热成像万用表Fluke-279FC 即将上市!填写问卷赢好礼喽!