请教一下交叉编译
初学,自写了一段简单的汇编程序,编译出错,请教下各位。本来这段程序是在KeilARM上用的,这两天开始学交叉编译,好像很多语法的写法都不一样了,于是,修改,然后,就成下面这样了。
从错误信息看,似乎main函数定义重复定义了,在后面的错误信息,很莫名其妙,明明有这些函数的。
请各位帮忙看看是怎么回事?
或者介绍点这方面的教材让我观摩一下。
错误信息如下:
root@ubuntu:/program/mmu# make
arm-linux-gcc -Wall -O2 -o ini.o ini.S
ini.S:63:2: warning: no newline at end of file
/gcc-3.4.5-glibc-2.3.6/bin/../lib/gcc/arm-linux/3.4.5/../../../../arm-linux/lib/crt1.o(.text+0x30): In function `_start':
: undefined reference to `main'
/tmp/ccUH57Gc.o(.text+0x94): In function `copy2sdram':
: undefined reference to `create_pagetable'
/tmp/ccUH57Gc.o(.text+0x98): In function `copy2sdram':
: undefined reference to `MMUOn'
/tmp/ccUH57Gc.o(.text+0xbc): In function `haltloop':
: undefined reference to `main'
collect2: ld returned 1 exit status
make: *** Error 1
代码如下:
.text
.extern main
.extern create_pagetable
.extern MMUOn
.global start
start:
//1 设置栈
ldr sp, =0x40000FFF
//2 关看门狗
mov r0, #0
ldr r1, =0x53000000
str r0,
//3 初始化GPIO
// (n)LED=(n+4)GPB
mov r0, #0
ldr r1, =0x56000014
str r0,
mov r0, #0x15400
ldr r1, =0x56000010
str r0,
//4 初始化SDRAM
ldr r0, =memsettab
ldr r1, =0x48000000
mov r2, #13
memini:
ldr r3, ,#4
str r3, ,#4
sub r2, r2,#1
bne memini
memsettab:
.long 0x22111110
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00018005
.long 0x00018005
.long 0x008C07A3
.long 0x000000B0
.long 0x00000030
.long 0x00000030
//5 搬运代码
mov r0, #2048
ldr r1, =0x30004000
mov r2, #4096
copy2sdram:
ldr r3, , #4
str r3, , #4
sub r2, r2, #4
bne copy2sdram
//6 建立页表
bl create_pagetable
//7 开启MMU
bl MMUOn
//8 进入main()
ldr sp, =0xA4000000
ldr pc, =main
haltloop:
b haltloop
页:
[1]