커널 2.6 컴파일 문제...

honesteyes의 이미지

이번에 커널 linux-2.6.4를 다운 받아서 설치 하는중에

자꾸

CC arch/i386/kernel/asm-offsets.s
In file included from include/linux/prefetch.h:13,
from include/linux/list.h:7,
from include/linux/signal.h:4,
from arch/i386/kernel/asm-offsets.c:7:
include/asm/processor.h:86: error: array type has incomplete element type
make[1]: *** [arch/i386/kernel/asm-offsets.s] 오류 1
make: *** [arch/i386/kernel/asm-offsets.s] 오류 2

이런 에러가 납니다
인터넷으로 계속 찾아서 그 데로 해봤는데 잘 안되네요...
왜 이런 오류가 나는건지 알려주시고 해결 방안 좀 알려주시면 감사드리겠습니다.

sandy의 이미지

..gcc4 로 컴파일 할때 에러나는 이유는

include/asm-i386/processor.h가 구조체 tss_struct 가 선언되기도 전에 tss_struct 를 사용해서 init_tss[NR_CPUS]를 선언하기 때문입니다

Simple fix:
라인 86 의
extern struct tss_struct init_tss[NR_CPUS];를

구조체 tss_struct 가 선언된 이후로 옮기면 됩니다.

예컨대 line 405 위치로 옮긴다든지..

unsigned long __cacheline_filler[5];
/*
* .. and then another 0x100 bytes for emergency kernel stack
*/
unsigned long stack[64];
} __attribute__((packed));

+ extern struct tss_struct init_tss[NR_CPUS];

struct thread_struct {
/* cached TLS descriptors. */
struct desc_struct tls_array[GDT_ENTRY_TLS_ENTRIES];

..