도와주세요!!
글 수 15,339
2005.02.21 08:38:05 (*.110.112.215)
6690
안녕하세요..
gcc-3.3 에서 arm용으로 컴파일시 커널 부분에서 어셈코드관련 부분을 패치해 주셔야 합니다.
인터넷으로 찾아보시면 관련 부분 패치들이 있을 것입니다.
[참고] 반드시 인터넷으로 패치를 찾아 주세요... 아래 코드는 이전에 한 내용이라서 문제가
발생 할 수도 있습니다. 단지 참고만 하시라고 올려 드립니다...
2. linux/include/asm-arm/uaccess.h
[수정 전]
#define get_user(x,p)
({
const register typeof(*(p)) *__p asm("r0") = (p);
register typeof(*(p)) __r1 asm("r1");
register int __e asm("r0");
switch (sizeof(*(p))) {
case 1:
__get_user_x(__r1, __p, __e, 1, "lr");
break;
case 2:
__get_user_x(__r1, __p, __e, 2, "r2", "lr");
break;
case 4:
__get_user_x(__r1, __p, __e, 4, "lr");
break;
case 8:
__get_user_x(__r1, __p, __e, 8, "lr");
break;
default: __e = __get_user_bad(); break;
}
x = __r1;
__e;
})
[수정 후]
모든 "r2" 를 "ip"로 수정한다.
#define get_user(x,p)
({
const register typeof(*(p)) *__p asm("r0") = (p);
register typeof(*(p)) __r1 asm("r1");
register int __e asm("r0");
switch (sizeof(*(p))) {
case 1:
__get_user_x(__r1, __p, __e, 1, "lr");
break;
case 2:
__get_user_x(__r1, __p, __e, 2, "ip", "lr");
break;
case 4:
__get_user_x(__r1, __p, __e, 4, "lr");
break;
case 8:
__get_user_x(__r1, __p, __e, 8, "lr");
break;
default: __e = __get_user_bad(); break;
}
x = __r1;
__e;
})
[수정 전]
#define put_user(x,p)
({
const register typeof(*(p)) __r1 asm("r1") = (x);
const register typeof(*(p)) *__p asm("r0") = (p);
register int __e asm("r0");
switch (sizeof(*(p))) {
case 1:
__put_user_x(__r1, __p, __e, 1, "r2", "lr");
break;
case 2:
__put_user_x(__r1, __p, __e, 2, "r2", "lr");
break;
case 4:
__put_user_x(__r1, __p, __e, 4, "r2", "lr");
break;
case 8:
__put_user_x(__r1, __p, __e, 8, "ip", "lr");
break;
default: __e = __put_user_bad(); break;
}
__e;
})
[수정 후]
모든 "r2" 를 "ip"로 수정한다.
#define put_user(x,p)
({
const register typeof(*(p)) __r1 asm("r1") = (x);
const register typeof(*(p)) *__p asm("r0") = (p);
register int __e asm("r0");
switch (sizeof(*(p))) {
case 1:
__put_user_x(__r1, __p, __e, 1, "ip", "lr");
break;
case 2:
__put_user_x(__r1, __p, __e, 2, "ip", "lr");
break;
case 4:
__put_user_x(__r1, __p, __e, 4, "ip", "lr");
break;
case 8:
__put_user_x(__r1, __p, __e, 8, "ip", "lr");
break;
default: __e = __put_user_bad(); break;
}
__e;
})
3. linux/arch/arm/lib/getuser.S
[수정 전]
.global __get_user_2
__get_user_2:
bic r2, sp, #0x1f00
bic r2, r2, #0x00ff
ldr r2, [r2, #TSK_ADDR_LIMIT]
sub r2, r2, #2
cmp r0, r2
2: ldrlsbt r1, [r0], #1
3: ldrlsbt r2, [r0]
orrls r1, r1, r2, lsl #8
movls r0, #0
movls pc, lr
b __get_user_bad
[수정 후]
모든 "r2" 를 "ip"로 수정한다.
.global __get_user_2
__get_user_2:
bic ip, sp, #0x1f00
bic ip, ip, #0x00ff
ldr ip, [ip, #TSK_ADDR_LIMIT]
sub ip, ip, #2
cmp r0, ip
2: ldrlsbt r1, [r0], #1
3: ldrlsbt ip, [r0]
orrls r1, r1, ip, lsl #8
movls r0, #0
movls pc, lr
b __get_user_bad
[수정 전]
.global __get_user_8
__get_user_8:
bic r2, sp, #0x1f00
bic r2, r2, #0x00ff
ldr r2, [r2, #TSK_ADDR_LIMIT]
sub r2, r2, #8
cmp r0, r2
5: ldrlst r1, [r0], #4
6: ldrlst r2, [r0]
movls r0, #0
movls pc, lr
[수정 후]
모든 "r2" 를 "ip"로 수정한다.
.global __get_user_8
__get_user_8:
bic ip, sp, #0x1f00
bic ip, ip, #0x00ff
ldr ip, [ip, #TSK_ADDR_LIMIT]
sub ip, ip, #8
cmp r0, ip
5: ldrlst r1, [r0], #4
6: ldrlst ip, [r0]
movls r0, #0
movls pc, lr
[수정 전]
__get_user_bad_8:
mov r2, #0
[수정 후]
"r2" 를 "ip"로 수정한다.
__get_user_bad_8:
mov ip, #0
4. linux/arch/arm/lib/putuser.S
[수정 전]
.global __put_user_1
__put_user_1:
bic r2, sp, #0x1f00
bic r2, r2, #0x00ff
ldr r2, [r2, #TSK_ADDR_LIMIT]
sub r2, r2, #1
cmp r0, r2
1: strlsbt r1, [r0]
movls r0, #0
movls pc, lr
b __put_user_bad
.global __put_user_2
__put_user_2:
bic r2, sp, #0x1f00
bic r2, r2, #0x00ff
ldr r2, [r2, #TSK_ADDR_LIMIT]
sub r2, r2, #2
cmp r0, r2
2: strlsbt r1, [r0], #1
movls r1, r1, lsr #8
3: strlsbt r1, [r0]
movls r0, #0
movls pc, lr
b __put_user_bad
.global __put_user_4
__put_user_4:
bic r2, sp, #0x1f00
bic r2, r2, #0x00ff
ldr r2, [r2, #TSK_ADDR_LIMIT]
sub r2, r2, #4
cmp r0, r2
4: strlst r1, [r0]
movls r0, #0
movls pc, lr
b __put_user_bad
.global __put_user_8
__put_user_8:
bic ip, sp, #0x1f00
bic ip, ip, #0x00ff
ldr ip, [ip, #TSK_ADDR_LIMIT]
sub ip, ip, #8
cmp r0, ip
5: strlst r1, [r0], #4
6: strlst r2, [r0]
movls r0, #0
movls pc, lr
[수정 후]
모든 "r2" 를 "ip"로 수정한다.
.global __put_user_1
__put_user_1:
bic ip, sp, #0x1f00
bic ip, ip, #0x00ff
ldr ip, [ip, #TSK_ADDR_LIMIT]
sub ip, ip, #1
cmp r0, ip
1: strlsbt r1, [r0]
movls r0, #0
movls pc, lr
b __put_user_bad
.global __put_user_2
__put_user_2:
bic ip, sp, #0x1f00
bic ip, ip, #0x00ff
ldr ip, [ip, #TSK_ADDR_LIMIT]
sub ip, ip, #2
cmp r0, ip
2: strlsbt r1, [r0], #1
movls r1, r1, lsr #8
3: strlsbt r1, [r0]
movls r0, #0
movls pc, lr
b __put_user_bad
.global __put_user_4
__put_user_4:
bic ip, sp, #0x1f00
bic ip, ip, #0x00ff
ldr ip, [ip, #TSK_ADDR_LIMIT]
sub ip, ip, #4
cmp r0, ip
4: strlst r1, [r0]
movls r0, #0
movls pc, lr
b __put_user_bad
.global __put_user_8
__put_user_8:
bic ip, sp, #0x1f00
bic ip, ip, #0x00ff
ldr ip, [ip, #TSK_ADDR_LIMIT]
sub ip, ip, #8
cmp r0, ip
5: strlst r1, [r0], #4
6: strlst ip, [r0]
movls r0, #0
movls pc, lr
4. linux/drivers/ide/ide-cd.h
[수정 전]
440 __u8 short slot_tablelen;
[수정 후]
440 __u16 slot_tablelen;
5. arch/arm/kernel/semaphore.c
[수정 전]
#ifdef CONFIG_CPU_26
asm(" .align 5
.globl __down_failed
__down_failed:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __down
ldmfd sp!, {r0 - r3, pc}^
.align 5
.globl __down_interruptible_failed
__down_interruptible_failed:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __down_interruptible
mov ip, r0
ldmfd sp!, {r0 - r3, pc}^
.align 5
.globl __down_trylock_failed
__down_trylock_failed:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __down_trylock
mov ip, r0
ldmfd sp!, {r0 - r3, pc}^
.align 5
.globl __up_wakeup
__up_wakeup:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __up
ldmfd sp!, {r0 - r3, pc}^
");
#else
/* 32 bit version */
asm(" .align 5
.globl __down_failed
__down_failed:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __down
ldmfd sp!, {r0 - r3, pc}
.align 5
.globl __down_interruptible_failed
__down_interruptible_failed:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __down_interruptible
mov ip, r0
ldmfd sp!, {r0 - r3, pc}
.align 5
.globl __down_trylock_failed
__down_trylock_failed:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __down_trylock
mov ip, r0
ldmfd sp!, {r0 - r3, pc}
.align 5
.globl __up_wakeup
__up_wakeup:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __up
ldmfd sp!, {r0 - r3, pc}
");
#endif
[수정 후]
#ifdef CONFIG_CPU_26
asm(" .align 5
"
" .globl __down_failed
"
"__down_failed:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __down
"
" ldmfd sp!, {r0 - r3, pc}^
"
"
"
" .align 5
"
" .globl __down_interruptible_failed
"
"__down_interruptible_failed:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __down_interruptible
"
" mov ip, r0
"
" ldmfd sp!, {r0 - r3, pc}^
"
"
"
" .align 5
"
" .globl __down_trylock_failed
"
"__down_trylock_failed:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __down_trylock
"
" mov ip, r0
"
" ldmfd sp!, {r0 - r3, pc}^
"
"
"
" .align 5
"
" .globl __up_wakeup
"
"__up_wakeup:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __up
"
" ldmfd sp!, {r0 - r3, pc}^
");
#else
/* 32 bit version */
asm(" .align 5
"
" .globl __down_failed
"
"__down_failed:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __down
"
" ldmfd sp!, {r0 - r3, pc}
"
"
"
" .align 5
"
" .globl __down_interruptible_failed
"
"__down_interruptible_failed:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __down_interruptible
"
" mov ip, r0
"
" ldmfd sp!, {r0 - r3, pc}
"
"
"
" .align 5
"
" .globl __down_trylock_failed
"
"__down_trylock_failed:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __down_trylock
"
" mov ip, r0
"
" ldmfd sp!, {r0 - r3, pc}
"
"
"
" .align 5
"
" .globl __up_wakeup
"
"__up_wakeup:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __up
"
" ldmfd sp!, {r0 - r3, pc}
" );
#endif
그럼 수고하세요...
상재 wrote..
: 안녕하세요 ez-x5보드를 사용하는 학생입니다.
:
: 크로스컴파일 gcc버전을 3.3버전으로 업을하고 커널 컴파일 시 에러가 납니다.
: make dep
: make clean 시에는 에러가 나지 않고
: make zImage 시에 에러가 나는데요..
:
: gcc버전을 업하지 않았을땐 에러가 나질 않았는데, 버전업한후 에러가 발생하
: 네요.
:
: 왜 그런지 이유를 알고 싶고, 해결은 어떻게 해야하는지요.
gcc-3.3 에서 arm용으로 컴파일시 커널 부분에서 어셈코드관련 부분을 패치해 주셔야 합니다.
인터넷으로 찾아보시면 관련 부분 패치들이 있을 것입니다.
[참고] 반드시 인터넷으로 패치를 찾아 주세요... 아래 코드는 이전에 한 내용이라서 문제가
발생 할 수도 있습니다. 단지 참고만 하시라고 올려 드립니다...
2. linux/include/asm-arm/uaccess.h
[수정 전]
#define get_user(x,p)
({
const register typeof(*(p)) *__p asm("r0") = (p);
register typeof(*(p)) __r1 asm("r1");
register int __e asm("r0");
switch (sizeof(*(p))) {
case 1:
__get_user_x(__r1, __p, __e, 1, "lr");
break;
case 2:
__get_user_x(__r1, __p, __e, 2, "r2", "lr");
break;
case 4:
__get_user_x(__r1, __p, __e, 4, "lr");
break;
case 8:
__get_user_x(__r1, __p, __e, 8, "lr");
break;
default: __e = __get_user_bad(); break;
}
x = __r1;
__e;
})
[수정 후]
모든 "r2" 를 "ip"로 수정한다.
#define get_user(x,p)
({
const register typeof(*(p)) *__p asm("r0") = (p);
register typeof(*(p)) __r1 asm("r1");
register int __e asm("r0");
switch (sizeof(*(p))) {
case 1:
__get_user_x(__r1, __p, __e, 1, "lr");
break;
case 2:
__get_user_x(__r1, __p, __e, 2, "ip", "lr");
break;
case 4:
__get_user_x(__r1, __p, __e, 4, "lr");
break;
case 8:
__get_user_x(__r1, __p, __e, 8, "lr");
break;
default: __e = __get_user_bad(); break;
}
x = __r1;
__e;
})
[수정 전]
#define put_user(x,p)
({
const register typeof(*(p)) __r1 asm("r1") = (x);
const register typeof(*(p)) *__p asm("r0") = (p);
register int __e asm("r0");
switch (sizeof(*(p))) {
case 1:
__put_user_x(__r1, __p, __e, 1, "r2", "lr");
break;
case 2:
__put_user_x(__r1, __p, __e, 2, "r2", "lr");
break;
case 4:
__put_user_x(__r1, __p, __e, 4, "r2", "lr");
break;
case 8:
__put_user_x(__r1, __p, __e, 8, "ip", "lr");
break;
default: __e = __put_user_bad(); break;
}
__e;
})
[수정 후]
모든 "r2" 를 "ip"로 수정한다.
#define put_user(x,p)
({
const register typeof(*(p)) __r1 asm("r1") = (x);
const register typeof(*(p)) *__p asm("r0") = (p);
register int __e asm("r0");
switch (sizeof(*(p))) {
case 1:
__put_user_x(__r1, __p, __e, 1, "ip", "lr");
break;
case 2:
__put_user_x(__r1, __p, __e, 2, "ip", "lr");
break;
case 4:
__put_user_x(__r1, __p, __e, 4, "ip", "lr");
break;
case 8:
__put_user_x(__r1, __p, __e, 8, "ip", "lr");
break;
default: __e = __put_user_bad(); break;
}
__e;
})
3. linux/arch/arm/lib/getuser.S
[수정 전]
.global __get_user_2
__get_user_2:
bic r2, sp, #0x1f00
bic r2, r2, #0x00ff
ldr r2, [r2, #TSK_ADDR_LIMIT]
sub r2, r2, #2
cmp r0, r2
2: ldrlsbt r1, [r0], #1
3: ldrlsbt r2, [r0]
orrls r1, r1, r2, lsl #8
movls r0, #0
movls pc, lr
b __get_user_bad
[수정 후]
모든 "r2" 를 "ip"로 수정한다.
.global __get_user_2
__get_user_2:
bic ip, sp, #0x1f00
bic ip, ip, #0x00ff
ldr ip, [ip, #TSK_ADDR_LIMIT]
sub ip, ip, #2
cmp r0, ip
2: ldrlsbt r1, [r0], #1
3: ldrlsbt ip, [r0]
orrls r1, r1, ip, lsl #8
movls r0, #0
movls pc, lr
b __get_user_bad
[수정 전]
.global __get_user_8
__get_user_8:
bic r2, sp, #0x1f00
bic r2, r2, #0x00ff
ldr r2, [r2, #TSK_ADDR_LIMIT]
sub r2, r2, #8
cmp r0, r2
5: ldrlst r1, [r0], #4
6: ldrlst r2, [r0]
movls r0, #0
movls pc, lr
[수정 후]
모든 "r2" 를 "ip"로 수정한다.
.global __get_user_8
__get_user_8:
bic ip, sp, #0x1f00
bic ip, ip, #0x00ff
ldr ip, [ip, #TSK_ADDR_LIMIT]
sub ip, ip, #8
cmp r0, ip
5: ldrlst r1, [r0], #4
6: ldrlst ip, [r0]
movls r0, #0
movls pc, lr
[수정 전]
__get_user_bad_8:
mov r2, #0
[수정 후]
"r2" 를 "ip"로 수정한다.
__get_user_bad_8:
mov ip, #0
4. linux/arch/arm/lib/putuser.S
[수정 전]
.global __put_user_1
__put_user_1:
bic r2, sp, #0x1f00
bic r2, r2, #0x00ff
ldr r2, [r2, #TSK_ADDR_LIMIT]
sub r2, r2, #1
cmp r0, r2
1: strlsbt r1, [r0]
movls r0, #0
movls pc, lr
b __put_user_bad
.global __put_user_2
__put_user_2:
bic r2, sp, #0x1f00
bic r2, r2, #0x00ff
ldr r2, [r2, #TSK_ADDR_LIMIT]
sub r2, r2, #2
cmp r0, r2
2: strlsbt r1, [r0], #1
movls r1, r1, lsr #8
3: strlsbt r1, [r0]
movls r0, #0
movls pc, lr
b __put_user_bad
.global __put_user_4
__put_user_4:
bic r2, sp, #0x1f00
bic r2, r2, #0x00ff
ldr r2, [r2, #TSK_ADDR_LIMIT]
sub r2, r2, #4
cmp r0, r2
4: strlst r1, [r0]
movls r0, #0
movls pc, lr
b __put_user_bad
.global __put_user_8
__put_user_8:
bic ip, sp, #0x1f00
bic ip, ip, #0x00ff
ldr ip, [ip, #TSK_ADDR_LIMIT]
sub ip, ip, #8
cmp r0, ip
5: strlst r1, [r0], #4
6: strlst r2, [r0]
movls r0, #0
movls pc, lr
[수정 후]
모든 "r2" 를 "ip"로 수정한다.
.global __put_user_1
__put_user_1:
bic ip, sp, #0x1f00
bic ip, ip, #0x00ff
ldr ip, [ip, #TSK_ADDR_LIMIT]
sub ip, ip, #1
cmp r0, ip
1: strlsbt r1, [r0]
movls r0, #0
movls pc, lr
b __put_user_bad
.global __put_user_2
__put_user_2:
bic ip, sp, #0x1f00
bic ip, ip, #0x00ff
ldr ip, [ip, #TSK_ADDR_LIMIT]
sub ip, ip, #2
cmp r0, ip
2: strlsbt r1, [r0], #1
movls r1, r1, lsr #8
3: strlsbt r1, [r0]
movls r0, #0
movls pc, lr
b __put_user_bad
.global __put_user_4
__put_user_4:
bic ip, sp, #0x1f00
bic ip, ip, #0x00ff
ldr ip, [ip, #TSK_ADDR_LIMIT]
sub ip, ip, #4
cmp r0, ip
4: strlst r1, [r0]
movls r0, #0
movls pc, lr
b __put_user_bad
.global __put_user_8
__put_user_8:
bic ip, sp, #0x1f00
bic ip, ip, #0x00ff
ldr ip, [ip, #TSK_ADDR_LIMIT]
sub ip, ip, #8
cmp r0, ip
5: strlst r1, [r0], #4
6: strlst ip, [r0]
movls r0, #0
movls pc, lr
4. linux/drivers/ide/ide-cd.h
[수정 전]
440 __u8 short slot_tablelen;
[수정 후]
440 __u16 slot_tablelen;
5. arch/arm/kernel/semaphore.c
[수정 전]
#ifdef CONFIG_CPU_26
asm(" .align 5
.globl __down_failed
__down_failed:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __down
ldmfd sp!, {r0 - r3, pc}^
.align 5
.globl __down_interruptible_failed
__down_interruptible_failed:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __down_interruptible
mov ip, r0
ldmfd sp!, {r0 - r3, pc}^
.align 5
.globl __down_trylock_failed
__down_trylock_failed:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __down_trylock
mov ip, r0
ldmfd sp!, {r0 - r3, pc}^
.align 5
.globl __up_wakeup
__up_wakeup:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __up
ldmfd sp!, {r0 - r3, pc}^
");
#else
/* 32 bit version */
asm(" .align 5
.globl __down_failed
__down_failed:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __down
ldmfd sp!, {r0 - r3, pc}
.align 5
.globl __down_interruptible_failed
__down_interruptible_failed:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __down_interruptible
mov ip, r0
ldmfd sp!, {r0 - r3, pc}
.align 5
.globl __down_trylock_failed
__down_trylock_failed:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __down_trylock
mov ip, r0
ldmfd sp!, {r0 - r3, pc}
.align 5
.globl __up_wakeup
__up_wakeup:
stmfd sp!, {r0 - r3, lr}
mov r0, ip
bl __up
ldmfd sp!, {r0 - r3, pc}
");
#endif
[수정 후]
#ifdef CONFIG_CPU_26
asm(" .align 5
"
" .globl __down_failed
"
"__down_failed:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __down
"
" ldmfd sp!, {r0 - r3, pc}^
"
"
"
" .align 5
"
" .globl __down_interruptible_failed
"
"__down_interruptible_failed:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __down_interruptible
"
" mov ip, r0
"
" ldmfd sp!, {r0 - r3, pc}^
"
"
"
" .align 5
"
" .globl __down_trylock_failed
"
"__down_trylock_failed:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __down_trylock
"
" mov ip, r0
"
" ldmfd sp!, {r0 - r3, pc}^
"
"
"
" .align 5
"
" .globl __up_wakeup
"
"__up_wakeup:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __up
"
" ldmfd sp!, {r0 - r3, pc}^
");
#else
/* 32 bit version */
asm(" .align 5
"
" .globl __down_failed
"
"__down_failed:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __down
"
" ldmfd sp!, {r0 - r3, pc}
"
"
"
" .align 5
"
" .globl __down_interruptible_failed
"
"__down_interruptible_failed:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __down_interruptible
"
" mov ip, r0
"
" ldmfd sp!, {r0 - r3, pc}
"
"
"
" .align 5
"
" .globl __down_trylock_failed
"
"__down_trylock_failed:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __down_trylock
"
" mov ip, r0
"
" ldmfd sp!, {r0 - r3, pc}
"
"
"
" .align 5
"
" .globl __up_wakeup
"
"__up_wakeup:
"
" stmfd sp!, {r0 - r3, lr}
"
" mov r0, ip
"
" bl __up
"
" ldmfd sp!, {r0 - r3, pc}
" );
#endif
그럼 수고하세요...
상재 wrote..
: 안녕하세요 ez-x5보드를 사용하는 학생입니다.
:
: 크로스컴파일 gcc버전을 3.3버전으로 업을하고 커널 컴파일 시 에러가 납니다.
: make dep
: make clean 시에는 에러가 나지 않고
: make zImage 시에 에러가 나는데요..
:
: gcc버전을 업하지 않았을땐 에러가 나질 않았는데, 버전업한후 에러가 발생하
: 네요.
:
: 왜 그런지 이유를 알고 싶고, 해결은 어떻게 해야하는지요.