|
arm+uclinux开发环境建立错误,刚开始接触,不知如何解决,请指教,十分感谢!
[root@localhost uClinux-dist]# make
make ARCH=armnommu CROSS_COMPILE=arm-elf- -C linux-2.6.x || exit 1
make[1]: Entering directory `/home/embeded/uClinux-dist/linux-2.6.x'
CHK include/linux/version.h
make[2]: `arch/armnommu/kernel/asm-offsets.s' is up to date.
make[2]: `include/asm-arm/mach-types.h' is up to date.
CHK include/linux/compile.h
AS arch/armnommu/kernel/entry.o
arch/armnommu/kernel/entry.S: Assembler messages:
arch/armnommu/kernel/entry.S:99: Error: can only set flag field with immediate value
arch/armnommu/kernel/entry.S:152: Error: can only set flag field with immediate
value
arch/armnommu/kernel/entry.S:154: Error: can only set flag field with immediate
value
arch/armnommu/kernel/entry.S:178: Error: can only set flag field with immediate
value
arch/armnommu/kernel/entry.S:199: Error: can only set flag field with immediate
value
arch/armnommu/kernel/entry.S:237: Error: can only set flag field with immediate
value
arch/armnommu/kernel/entry.S:320: Error: can only set flag field with immediate
value
arch/armnommu/kernel/entry.S:383: Error: can only set flag field with immediate
value
make[2]: *** [arch/armnommu/kernel/entry.o] Error 1
make[1]: *** [arch/armnommu/kernel] Error 2
make[1]: Leaving directory `/home/embeded/uClinux-dist/linux-2.6.x'
make: *** [linux] Error 1
部分文件如下
/*
* linux/arch/armnommu/kernel/entry.S
*
* Copyright (C) 1996,1997,1998 Russell King.
* ARM700 fix by Matthew Godbolt (linux-user@willothewisp.demon.co.uk)
* uClinux/ARM fix and clean-up by Hyok S. Choi (hyok.choi@samsung.com)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* machine independent low-level vector interface routines, only.
* dependent codes gone to each machine directory, "entry-header.S"
*
*/
#include <linux/config.h>
#include <linux/init.h>
#include <asm/thread_info.h>
#include <asm/glue.h>
#include <asm/ptrace.h>
#include "../../arm/kernel/entry-header.S"
/*
* Load-in the machine dependent Macros from:
* arch/armnommu/mach-$(MACHINE)/entry-macro.S
*
* disable_fiq : disable FIQ
* get_irqnr_and_base : get the irq number(at least), and others.
* irq_prio_table : irq priority table
*/
#include "entry-macro.S"
/*
* Invalid mode handlers
*/
__pabt_invalid: sub sp, sp, #S_FRAME_SIZE @ Allocate frame size in one go
stmia sp, {r0 - lr} @ Save XXX r0 - lr
ldr r4, .LCabt
mov r1, #BAD_PREFETCH
b 1f
__dabt_invalid: sub sp, sp, #S_FRAME_SIZE
stmia sp, {r0 - lr} @ Save SVC r0 - lr [lr *should* be intact]
ldr r4, .LCabt
mov r1, #BAD_DATA
b 1f
__irq_invalid: sub sp, sp, #S_FRAME_SIZE @ Allocate space on stack for frame
stmfd sp, {r0 - lr} @ Save r0 - lr
ldr r4, .LCirq
mov r1, #BAD_IRQ
b 1f
__und_invalid: sub sp, sp, #S_FRAME_SIZE
stmia sp, {r0 - lr}
ldr r4, .LCund
mov r1, #BAD_UNDEFINSTR @ int reason
1: zero_fp
ldmia r4, {r5 - r7} @ Get XXX pc, cpsr, old_r0
add r4, sp, #S_PC
stmia r4, {r5 - r7} @ Save XXX pc, cpsr, old_r0
mov r0, sp
and r2, r6, #31 @ int mode
b bad_mode
/*
* SVC mode handlers
*/
.align 5
__dabt_svc: sub sp, sp, #S_FRAME_SIZE
stmia sp, {r0 - r12} @ save r0 - r12
ldr r2, .LCabt
add r0, sp, #S_FRAME_SIZE
ldmia r2, {r2 - r4} @ get pc, cpsr
add r5, sp, #S_SP
mov r1, lr
stmia r5, {r0 - r4} @ save sp_SVC, lr_SVC, pc, cpsr, old_ro
mrs r9, cpsr @ Enable interrupts if they were
tst r3, #PSR_I_BIT
biceq r9, r9, #PSR_I_BIT @ previously
/*
* This routine must not corrupt r9
*/
#ifdef MULTI_ABORT
ldr r4, .LCprocfns @ pass r2, r3 to
mov lr, pc @ processor code
ldr pc, [r4] @ call processor specific code
#else
bl CPU_ABORT_HANDLER
#endif
msr cpsr_c, r9
mov r2, sp
bl do_DataAbort
disable_irq r0 -------------------》99行,怎么更改呢?
ldr r0, [sp, #S_PSR]
msr spsr, r0
ldmia sp, {r0 - pc}^ @ load r0 - pc, cpsr
.align 5
__irq_svc: sub sp, sp, #S_FRAME_SIZE
stmia sp, {r0 - r12} @ save r0 - r12
ldr r7, .LCirq
add r5, sp, #S_FRAME_SIZE
ldmia r7, {r7 - r9}
add r4, sp, #S_SP |
|