zyp000 发表于 2012-4-14 13:19:04

请教一下交叉编译

初学,自写了一段简单的汇编程序,编译出错,请教下各位。
本来这段程序是在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]
查看完整版本: 请教一下交叉编译