微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式Linux开发环境的搭建之:U-Boot移植

嵌入式Linux开发环境的搭建之:U-Boot移植

时间:08-13 来源:3721RD 点击:

) /* 准备加载linux */

{

/*

* this function is called just before we call linux

* it prepares the processor for linux

*

* we turn off caches etc ...

*/

unsigned long i;

disable_interrupts ();

/* turn off I/D-cache:关闭cache */

asm ("mrc p15, 0, %0, c1, c0, 0":"=r" (i));

i &= ~(C1_DC | C1_IC);

asm ("mcr p15, 0, %0, c1, c0, 0": :"r" (i));

/* flush I/D-cache */

i = 0;

asm ("mcr p15, 0, %0, c7, c7, 0": :"r" (i));

return (0);

}

OUTPUT_ARCH(arm)

ENTRY(_start)

SECTIONS

{

. = 0x00000000;

. = align(4);

.text :

{

cpu/arm920t/start.o (.text)

*(.text)

}

. = align(4);

.rodata : { *(.rodata) }

. = align(4);

.data : { *(.data) }

. = align(4);

.got : { *(.got) }

__u_boot_cmd_start = .;

.u_boot_cmd : { *(.u_boot_cmd) }

__u_boot_cmd_end = .;

. = align(4);

__bss_start = .;

.bss : { *(.bss) }

_end = .;

}

(4)memsetup.S

这个文件是用于配置开发板参数的,如下所示:

/* memsetup.c */

/* memory control configuration */

/* make r0 relative the current location so that it */

/* reads SMRDATA out of FLASH rather than memory ! */

ldr r0, =SMRDATA

ldr r1, _TEXT_BASE

sub r0, r0, r1

ldr r1, =BWSCON /* Bus Width Status Controller */

add r2, r0, #52

0:

ldr r3, [r0], #4

str r3, [r1], #4

cmp r2, r0

bne 0b

/* everything is fine now */

mov pc, lr

.ltorg

5.2.4 U-Boot移植主要步骤

(1)建立自己的开发板类型。

阅读makefile文件,在makefile文件中添加两行,如下所示:

fs2410_config: unconfig

@./mkconfig $(@:_config=) arm arm920t fs2410

其中"arm"为表示处理器体系结构的种类,"arm920t"表示处理器体系结构的名称,"fs2410"为主板名称。

在board目录中建立fs2410目录,并将smdk2410目录中的内容(cp –a smdk2410/* fs2410)复制到该目录中。

n 在include/configs/目录下将smdk2410.h复制到(cp smdk2410.h fs2410.h)。

n 修改ARM编译器的目录名及前缀(都要改成以"fs2410"开头)。

n 完成之后,可以测试配置。

$ make fs2410_config;make

(2)修改程序链接地址。

在board/s3c2410中有一个config.mk文件,它是用于设置程序链接的起始地址,因为会在U-Boot中增加功能,所以留下6MB的空间,修改33F80000为33A00000。

为了以后能用U-Boot的"go"命令执行修改过的用loadb或tftp下载的U-Boot,需要在board/ s3c2410的memsetup.S中标记符"0:"上加入5句:

mov r3, pc

ldr r4, =0x3FFF0000

and r3, r3, r4 (以上3句得到实际代码启动的内存地址)

aad r0, r0, r3 (用go命令调试u-boot时,启动地址在RAM)

add r2, r2, r3 (把初始化内存信息的地址,加上实际启动地址)

(3)将中断禁止的部分应该改为如下所示(/cpu/arm920t/start.S):

# if defined(CONFIG_S3C2410)

ldr r1, =0x7ff

ldr r0, =INTSUBMSK

str r1, [r0]

# endif

(4)因为在fs2410开发板启动时是直接从Nand Flash加载代码,所以启动代码应该改成如下所示(/cpu/arm920t/start.S):

#ifdef CONFIG_S3C2410_NAND_BOOT @START

@ reset NAND

mov r1, #NAND_CTL_BASE

ldr r2, =0xf830 @ initial value

str r2, [r1, #oNFCONF]

ldr r2, [r1, #oNFCONF]

bic r2, r2, #0x800 @ enable chip

str r2, [r1, #oNFCONF]

mov r2, #0xff @ RESET command

strb r2, [r1, #oNFCMD]

mov r3, #0 @ wait

nand1:

add r3, r3, #0x1

cmp r3, #0xa

blt nand1

nand2:

ldr r2, [r1, #oNFSTAT] @ wait ready

tst r2, #0x1

beq nand2

ldr r2, [r1, #oNFCONF]

orr r2, r2, #0x800 @ disable chip

str r2, [r1, #oNFCONF]

@ get read to call C functions (for nand_read())

ldr sp, DW_STACK_START @ setup stack pointer

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top