设为首页 加入收藏

TOP

裸机移植yaffs2文件系统(二)
2014-11-24 03:17:17 来源: 作者: 【 】 浏览:12
Tags:裸机 移植 yaffs2 文件 系统
ck */

stack_setup:

ldr r0, =TEXT_BASE /* upper 128 KiB: relocated uboot */

sub r0, r0, #CONFIG_SYS_MALLOC_LEN /* malloc area */

sub sp, r0, #12 /* leave 3 words for abort-stack */

bic sp, sp, #7 /* 8-byte alignment for ABI compliance */


clear_bss:

ldr r0, _bss_start /* find start of bss segment */

ldr r1, _bss_end /* stop here */

mov r2, #0x00000000 /* clear */


clbss_l:str r2, [r0] /* clear loop... */

add r0, r0, #4

cmp r0, r1

ble clbss_l


bl bootstrap_main

堆栈段初始化

其中TEXT_BASE和#CONFIG_SYS_MALLOC_LEN变量是在makefile文件中定义的,如下:

# Set the stack top base address here

TEXT_BASE=0x31000000

STACK_BASE=0x31010000

MALLOC_SIZE=0x100000

CFLAGS+=-DTEXT_BASE=$(TEXT_BASE) -DSTACK_BASE=${STACK_BASE} -DCONFIG_SYS_MALLOC_LEN=${MALLOC_SIZE}

上面的CFLAGS一行中的-D的意思类似于#define,,例如-DTEXT_BASE=$(TEXT_BASE) 等于#define TEXT_BASE 0X31000000。.

BSS段初始化

Bss段初始化代码其中的_bss_start ---> __bss_start是在makefile文件中

APP_NAME=bootstrap

LDFLAGS=-Bstatic -T$(APP_NAME).lds -Ttext $(TEXT_BASE)

参数LDFLAGS依赖于文件bootstrap.lds文件,如下

/********************************************************************************************

* File: bootstrap.lds

* Version: 1.0.0

* Copyright: 2011 (c) Guo Wenxue <guowenxue@gmail.com>

* Description: This is the LD linker configure script for bootstrap

* ChangeLog: 1, Release initial version on "Tue Jul 12 16:43:18 CST 2011"

*

*******************************************************************************************/


OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")

OUTPUT_ARCH(arm)

ENTRY(_start)


SECTIONS{

. = ALIGN(4);

.text :

{

start.o (.text)

*(.text)

}

. = ALIGN(4);

.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }

. = ALIGN(4);

.rodata : { *(.rodata) }

. = ALIGN(4);

.data : { *(.data) }

. = ALIGN(4);

__bss_start = .;

.bss : { *(.bss) }

_end = .;

}

然后是跳转到c函数中的bootstarp_main()函数中去,bootstarp_main()函数如下:

位置:yaffs2/bootstrap.c

int bootstrap_main(void)

{

char *ptr = NULL;

int rv = -1;



console_serial_init();

printf("\b\n");

printf("\bBootstrap nandflash yaffs2 test Version 0.0.1\n");


/* armboot_start is defined in the board-specific linker script */

mem_malloc_init (TEXT_BASE - CONFIG_SYS_MALLOC_LEN, CONFIG_SYS_MALLOC_LEN);



ptr = (char *)malloc(MALLOC_SIZE);

strncpy(ptr, "Hello World!\n", MALLOC_SIZE);

printf("Malloc address: %p, string: %s\n", ptr, ptr);

free(ptr);



yaffs_test(YAFFSFS_MNT_POINT);


hang:

while(1)

;


return 0;

}

首先是初始化串口,console_serial_init()函数如下:

位置:yaffs2/bsp/s3c_board.h

#define CONSOLE_BAUDRATE 115200

#define CONSOLE_SERIAL S3C2440_UART0

其中S3C2440_UART0在文件yaffs2/bsp/s3c2440.h中定义:

enum s3c2440_uarts_nr {

S3C2440_UART0 = 0,

S3C2440_UART1 = 1,

S3C2440_UART2 = 2

};


#define console_serial_init() s3c2440_serial_init(CONSOLE_BAUDRATE, CONSOLE_SERIAL)

即--> console_serial_init()-->s3c2440_serial_init()如下:

int s3c2440_serial_init(unsigned int baudrate, int index)

{

struct s3c2440_uart *uart = s3c2440_get_base_uart(index);


/* FIFO enable, Tx/Rx FIFO clear */

uart->UFCON = 0x07;

uart->UMCON = 0x0;


/* Normal,No parity,1 stop,8 bit */

uart-

首页 上一页 1 2 3 4 5 6 下一页 尾页 2/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇PHP的SO扩展编程入门 下一篇C++你所不知道的sprintf_s与sprin..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C语言中如何将结构体 (2025-12-24 22:20:09)
·纯C语言结构体成员变 (2025-12-24 22:20:06)
·C语言中,指针函数和 (2025-12-24 22:20:03)
·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)