Chinaunix首页 | 论坛 | 博客
  • 博客访问: 276647
  • 博文数量: 91
  • 博客积分: 2105
  • 博客等级: 大尉
  • 技术积分: 1050
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-14 19:30
文章分类
文章存档

2011年(11)

2010年(64)

2009年(16)

我的朋友

分类: LINUX

2010-09-02 10:52:04

3.1 配置xsbase270.h

可以参考lubbock.hadsvix.h等相关开发板的设置,另外也可以从U-Boot源码的README文件获取更多信息。

(1) 存储器映射配置:

/*

* Physical Memory Map

*/

#define CONFIG_NR_DRAM_BANKS 4 /* we have 2 banks of DRAM*/

#define PHYS_SDRAM_1 0xa0000000 /* SDRAM Bank #1 */

#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */

#define PHYS_SDRAM_2 0xa4000000 /* SDRAM Bank #2 */

#define PHYS_SDRAM_2_SIZE 0x00000000 /* 0 MB */

#define PHYS_SDRAM_3 0xa8000000 /* SDRAM Bank #3 */

#define PHYS_SDRAM_3_SIZE 0x00000000 /* 0 MB */

#define PHYS_SDRAM_4 0xac000000 /* SDRAM Bank #4 */

#define PHYS_SDRAM_4_SIZE 0x00000000 /* 0 MB */

#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */

#define PHYS_FLASH_2 0x04000000 /* Flash Bank #2 */

#define PHYS_FLASH_SIZE 0x02000000 /* 32 MB */

#define PHYS_FLASH_BANK_SIZE 0x02000000 /* 32 MB Banks */

#define PHYS_FLASH_SECT_SIZE 0x00040000 /* 256 KB sectors (x2) */

#define CFG_DRAM_BASE 0xa0000000

#define CFG_DRAM_SIZE 0x04000000

#define CFG_FLASH_BASE PHYS_FLASH_1

//you can also add other IO address map here, such as a FPGA

(2) 定制U-Boot命令:

include/config_cmd_default.h头文件中已经预定义了一些常用的U-Boot命令,我们可以在include/configs/xsbase270.h中包含该头文件,对于其中已定义的不需要的命令,可用undef去除;对于要添加的命令,使用define定义相关的符号即可。

/*

* Command line configuration.

*/

#include 

#define CONFIG_CMD_PING

(3) 控制台串口配置:

包括指定控制台所用的PXA27X串口,缺省的串口通信波特率等。

/*

* select serial console configuration

*/

#define CONFIG_FFUART 1 /* we use FFUART on XSBASE270 */

#define CONFIG_BAUDRATE 115200

(4) 环境变量设置

包括BOOTP选项设置,缺省环境变量设置,启动参数列表配置等。

/*

* BOOTP options

*/

#define CONFIG_BOOTP_BOOTFILESIZE

#define CONFIG_BOOTP_BOOTPATH

#define CONFIG_BOOTP_HOSTNAME

#define CONFIG_BOOTDELAY 3

#define CONFIG_ETHADDR 08:00:3e:26:0a:5b

#define CONFIG_NETMASK 255.255.255.0

#define CONFIG_IPADDR 192.168.0.21

#define CONFIG_SERVERIP 192.168.0.250

#define CONFIG_BOOTCOMMAND "bootm 80000"

#define CONFIG_BOOTARGS "root=/dev/ram0,rw mem=64M console=ttyS0, 115200"

#define CONFIG_CMDLINE_TAG

#define CONFIG_TIMESTAMP

/* allow to overwrite serial and ethaddr */

#define CONFIG_ENV_OVERWRITE

其中,CONFIG_BOOTCOMMANDCONFIG_BOOTARGS在后续的引导内核实验中还需要进行修正。

(5) 网卡驱动程序配置:

/*

* Hardware drivers

*/

#define CONFIG_DRIVER_SMC91111

#define CONFIG_SMC91111_BASE 0x0C000000

#define CONFIG_SMC_USE_32_BIT 1

XSBASE270采用的网卡是LAN91C111U-Boot自带的驱动程序drivers/smc91111.c可支持这款网卡,因此只要在这里作相应的配置即可。CONFIG_SMC91111_BASE要根据PXA27X对网卡的地址译码来决定(片选信号CSx和高位地址线)CONFIG_SMC_USE_32_BIT指定了网卡工作于32位数据总线模式。可以查看驱动程序源代码得到更多配置选项。

(6) NOR型闪存驱动程序配置:

U-Boot本身支持一系列符合CFI(Common Flash Interface)接口规范的闪存,其缺省支持的闪存芯片信息在include/flash.h中定义,该头文件中还定义了CFI闪存驱动所必需的数据结构和其他物理及结构特性描述符。NAND闪存驱动在drivers/nand目录下,这里不予考虑。CFI是针对NORFLASH所提出的一种获取闪存芯片物理和结构参数的操作规程和标准。

XSBASE270采用两片Intel 28F128K18C的兼容CFI标准的NOR型闪存,单片容量为16MB,数据线宽度为16-bit,两片并作一个32MB容量的数据宽度为32-bitBANK来使用。在头文件include/flash.h中没有定义该芯片的相关信息,可以手动添加;这并不是必须的,如果你并不需要使用这些信息的话(例如将CFI驱动所检测到的Device Id与头文件中定义的Device ID进行比对与验证)

/* file : include/flash.h */

#define INTEL_ID_28F128K18 0x88068806 /* added by aaron */

#define FLASH_28F128K18 0x00BA /*Intel 28F128K18 (128M=8Mx16)*/

要使用U-Boot自带的CFI闪存驱动,必须要作的是在include/configs/xsbase270.h中添加如下定义:

#define CFG_FLASH_CFI

#define CFG_FLASH_CFI_DRIVER 1

/* avoid long time detection, added by aaron ,see include/flash.h */

#define CFG_FLASH_CFI_WIDTH FLASH_CFI_32BIT

#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */

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

/* timeout values are in ticks */

#define CFG_FLASH_ERASE_TOUT (25*CFG_HZ) /*Timeout for Flash Erase */

#define CFG_FLASH_WRITE_TOUT (25*CFG_HZ) /*Timeout for Flash Write */

/* write flash less slowly */

#define CFG_FLASH_USE_BUFFER_WRITE 1

另外,如果把环境变量保存在FLASH中,还有如下相关定义:

/* NOTE: many default partitioning schemes assume the kernel starts at

* the second sector, not an environment. You have been warned!

*/

#define CFG_MONITOR_BASE 0

#define CFG_MONITOR_LEN PHYS_FLASH_SECT_SIZE

#define CFG_ENV_IS_IN_FLASH 1

#define CFG_ENV_ADDR (PHYS_FLASH_1 + PHYS_FLASH_SECT_SIZE)

#define CFG_ENV_SECT_SIZE PHYS_FLASH_SECT_SIZE

#define CFG_ENV_SIZE (PHYS_FLASH_SECT_SIZE / 16)

/* If defined, hardware flash sectors protection is used instead of

* U-Boot software protection. */

#define CFG_FLASH_PROTECTION

(7) 其他配置:

/*

* Miscellaneous configurable options

*/

#define CFG_HUSH_PARSER 1

#define CFG_PROMPT_HUSH_PS2 "> "

#define CFG_LONGHELP /* undef to save memory */

#ifdef CFG_HUSH_PARSER

#define CFG_PROMPT "$ " /* Monitor Command Prompt */

#endif

#define CFG_CBSIZE 256 /* Console I/O Buffer Size*/

/* Print Buffer Size */

#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)

#define CFG_MAXARGS 16 /* max number of command args */

#define CFG_BARGSIZE CFG_CBSIZE /*Boot Argument Buffer Size*/

#define CFG_DEVICE_NULLDEV 1

#define CFG_MEMTEST_START 0xa0400000 /* memtest works on */

#define CFG_MEMTEST_END 0xa0800000 /* 4 ... 8 MB in DRAM */

#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */

/*default load address */

#define CFG_LOAD_ADDR (CFG_DRAM_BASE + 0x8000)

#define CFG_HZ 3686400 /* incrementer freq: 3.6864 MHz */

/* valid baudrates */

#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }

至此,目标板配置头文件xsbase270.h就完成了。

3.2 板级初始化代码xsbase270.c

只需修改board_init()函数即可,完整代码如下:

#include 

DECLARE_GLOBAL_DATA_PTR;

/* Miscelaneous platform dependent initialisations */

int board_init (void)

{

/* memory and cpu-speed are setup before relocation */

/* so we do _nothing_ here */

/* arch number of XSBASE270-Board */

gd->bd->bi_arch_number = MACH_TYPE_XSBASE270;

/* adress of boot parameters */

gd->bd->bi_boot_params = 0xa0000100;

return 0;

}

int board_late_init(void)

{

setenv("stdout""serial");

setenv("stderr""serial");

return 0;

}

int dram_init (void)

{

gd->bd->bi_dram[0].start = PHYS_SDRAM_1;

gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;

gd->bd->bi_dram[1].start = PHYS_SDRAM_2;

gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE;

gd->bd->bi_dram[2].start = PHYS_SDRAM_3;

gd->bd->bi_dram[2].size = PHYS_SDRAM_3_SIZE;

gd->bd->bi_dram[3].start = PHYS_SDRAM_4;

gd->bd->bi_dram[3].size = PHYS_SDRAM_4_SIZE;

return 0;

}

3.3 驱动程序移植

最主要的是闪存和网卡驱动程序的移植。由于使用U-Boot自带的CFI闪存驱动程序和SMC91111网卡驱动程序,应此只要在头文件中进行相关配置即可完成。具体见3.1节。如果需要自行添加相关的设备驱动,则需要在board/xsbase270/目录下添加驱动源文件,并将其添加到该目录下的Makefile中进行编译与链接。

至此,针对特定目标板的U-Boot软件移植工作基本完成。在下一节中,将简单讨论U-Boot的基本的硬件调试方法与技巧。

阅读(538) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-04-13 16:33:46

学习了,多谢楼主分享哦!也欢迎广大linux爱好者来我的论坛一起讨论arm哦!www.lt-net.cn