2011-12-18 3 views
4

학술 프로젝트의 경우 kernel/ 디렉토리에 exit.cfork.c과 같은 디렉토리에 소스 파일 (myfile.c)을 추가하려고합니다. myfile.c에 정의 된 함수에 "정의되지 않은 참조"링크 오류가 발생하여 빌드 시스템이 자동으로 새 파일을 선택하는 것으로 나타나지 않습니다. 어떻게이 파일을 통합 할 수 있습니까?커널 : 커널 빌드를위한 새로운 소스 파일을 추가하는 방법은 무엇입니까?

답변

5

해당 개체 파일을 kernel/Makefile에 추가해야합니다. 당신은 당신의 코드에 대한 구성 변수가있는 경우에, 당신은 사용한다 :

obj-$(CONFIG_ZERO_STIMULUS_FEATURE) += zerostimulus.o 

당신이 구성 변수없이 코드를 작성하는 경우, 당신은 단지 obj-y 변수에 추가 할 것입니다 :

obj-y += zerostimulus.o 

구성 변수가 내장되어 있거나 모듈로 구축되었거나 꺼져있는 경우 구성 변수가 y, m 또는 n으로 확장됩니다. 그런 다음 obj-y, obj-m 변수가 작성됩니다.

2

맞아요!

그냥 부록 : 커널을 구축하기 전에 실행 "make menuconfig"당신이 (빌드 인 것로드 가능한 모듈로 사용됩니다 커널 이미지 (Y), 어떤 기능 m를 설정할 수 있다는 사실을 알고) 활성화되지 않을 것입니다 (n).

새 기능으로 설정할 수 있도록하려면 새 파일의 같은 폴더에있는 Kconfig 파일을 편집하면됩니다. 여기에 "CONFIG_"

을 접두사를 추가하지 마십시오 :

config ZERO_STIMULUS_FEATURE 
    tristate "My new feature" 
    default m 
    ---help--- 
     This is my brand new feature 
     Here's a multi-line description 

일반적인 실수는 대신 "config ZERO_STIMULUS_FEATURE"의 "config CONFIG_ZERO_STIMULUS_FEATURE"을 설정하는 것입니다 : 귀하의 경우에는 "linux-x.y.z/kernel/Kconfig는"

이 예입니다

기능을 모듈로로드 할 수없는 경우 "tristate"대신 "bool"키워드를 사용해야합니다. 다른 Kconfig 파일을 살펴보면 종속성을 설정하는 것이 얼마나 쉬운 지 알 수 있습니다.

감사합니다. /Angel

관련 문제