嵌入式Linux开发环境的搭建之:U-Boot移植
) /* 准备加载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
嵌入式Linux U-Boot移植 Bootloader 相关文章:
- 嵌入式Linux技术在工业控制网络中的应用(10-30)
- 基于嵌入式Linux的组态软件实时数据库的设计(02-01)
- 基于ARM+DSP的嵌入式Linux数控系统设计(11-18)
- 基于嵌入式Linux的细胞特征提取算法设计(11-19)
- 基于S3C2410的嵌入式Linux系统构建(03-02)
- 嵌入式Linux网络编程之:网络基础编程(08-13)