2010-07-31 2 views
2

llvm-gcc (llvm 버전 1.7)를 사용하여 드라이버 프로그램을 컴파일하려고합니다 (linux/drivers/순/연구 목적을 위해 리눅스 커널 소스 코드 (버전 2.6.18.8)에서 zorro8390.c),하지만 난 jiffies.h에서 많은 오류를 얻을 수는 :llvm-gcc로 드라이버 코드를 컴파일 할 때 "error : #if에서 0으로 나누기"가 표시됩니다.

bash-3.2$ llvm-gcc -D__GNUCC -E -I../../include zorro8390.c -o test.o 
In file included from ../../include/linux/lockdep.h:12, 
       from ../../include/linux/spinlock_types.h:12, 
       from ../../include/linux/spinlock.h:78, 
       from ../../include/linux/module.h:10, 
       from zorro8390.c:22: 
../../include/linux/list.h:887:2: warning: #warning "don't include kernel headers in userspace" 
In file included from zorro8390.c:30: 
../../include/linux/jiffies.h:210:31: error: division by zero in #if 
../../include/linux/jiffies.h:210:31: error: division by zero in #if 
...(a bunch of same errors) 
../../include/linux/jiffies.h:432:28: error: division by zero in #if 

나는에 대한 논의를 많이 봤했습니다 이 오류는 많이 있지만, make 명령을 사용하여 커널을 빌드하는 것에 관한 내용이 많이 있습니다. 나는 llvm-gcc를 직접 사용할 때 그것을 고치는 방법을 여전히 모른다. 그것에 대한 어떤 제안? 당신의 도움을 주셔서 대단히 감사합니다! 당신이 손으로 리눅스 커널 소스 파일을 컴파일 할 때 명령 행에서 정의 될 필요가있는 많은 것들 중 몇 가지를 정의하지 않았기 때문에

다니엘

답변

1

당신은 거의 확실이 오류가 있습니다.

linux/list.h:887:2: warning: #warning "don't include kernel headers in userspace" 

당신은의 make 명령 행에서 V = 1 커널의 정상적인 빌드를 수행 출력을 파일로 로그인하고 zorro8390을 위해 줄을 발굴해야한다 :이 메시지는 팁 오프입니다. c - 필요한 추가 -D 스위치를 알려줍니다. 필요한 다른 것들도있을 수 있습니다 (-I, -include 등).

0

jiffies는 커널의 내부 시계 틱이며 HZ이라는 정의에 따라 다릅니다. iirc는 jiffies/second의 수입니다. 이것은 일반적으로 구성 상수가 될 것입니다 (나는 100에서 1024로 갔다는 것을 기억합니다. 아마도 요즘은 더 많을 것입니다). 그리고 HZ은 일반적으로 부서에서 사용되므로 div/0 오류가 발생합니다.

그래서 @Zack은 올바르게 언급 된 문제입니다. config 정의 등은 필요 없습니다. 그러나 HZ (또는 오늘 그것이 무엇이라고 부름)을 정의하고 시도해 볼 수 있으며 작동하도록 만들 수 있는지 확인하십시오.

0

커널 헤더에 액세스 한 프로그램 (ti-davinci 도구 세트)을 교차 컴파일 할 때 동일한 오류가 발생하여 here의 정보를 사용하여 정렬했습니다.

The correct way to package the header files for a distribution is to run 'make headers_install' from the kernel source directory to install the headers into /usr/include and then rebuild the C library package, with a dependency on the specific version of the just installed kernel headers.

이렇게하면 커널 원본 디렉터리에 포함 할 헤더가 포함 된/usr/include 폴더가 만들어집니다.

0

내 경우에 #include <linux/time.h>은 헤더에 있지만 time.h 헤더 파일이 누락되었습니다. osprey/obj/include/linux. 아웃 폴더에 헤더를 추가하자마자 오류가 해결되었습니다. linux/time.h에는 필요한 적절한 정의가 있습니다.
무엇인가의 이유로 그것은 누락 된 파일을 선택하기 전에 오류를 선택했습니다.

관련 문제