
Devkit 8000용 Linux 장치 드라이버를 빌드하려고 합니다. 다음과 같은 오류 메시지가 나타납니다.
그 지시를 따르려고 할 때 정말 이해가 안 되는 예/아니요 질문을 많이 받게 됩니다. 결국 저는 25개의 서로 다른 프로세서(?) 중에서 하나를 선택하게 되었습니다.
내 메이크파일은 다음과 같습니다.
ifeq ($(KERNELRELEASE),)
KERNELDIR = ~/sources/linux-3.2.6
PWD := $(shell pwd)
modules:
$(MAKE) ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- -C $(KERNELDIR) M=$(PWD) modules
.PHONY: modules clean
else
# called from kernel build system: just declare what our modules are
obj-m := LED_timer.o
endif
내 코드 자체는 아직 관련성이 없다고 생각합니다. 게다가알다 내 소스코드에 버그가 가득하다는 걸 보고 싶지 않으실 텐데요, 하하.
답변1
사용 중인 소스를 어디서 구했는지는 밝히지 않았지만 분명히 잘못된 소스가 있습니다 .config
. 프로세서 유형 등 다양한 옵션을 설정하는 데 사용됩니다. 이러한 옵션은 문자 그대로 수백 가지가 있으며 서로 복잡한 종속성을 갖고 있습니다(예: 선택한 프로세서가 다른 선택 사항에 영향을 미칩니다).
바닐라 소스에는 들어 있지 않습니다 .config
. 이를 제공하거나 생성해야 합니다. 이전 버전의 것이므로 업데이트해야 하는 make oldconfig
경우에 사용됩니다 . 때로는 이 프로세스를 완전히 자동화할 수 없어 기본적으로 CLI 인터페이스를 사용하는 가 .config
실행되는 경우도 있습니다 . 구성 없이 make config
시도하는 경우에도 이런 일이 발생할 수 있습니다 .make oldconfig
make menuconfig
이것이 무엇인지에 대한 더 나은 관점을 얻으려면 더 많은 그래픽을 살펴봐야 합니다 .
그러나 아무것도 없는 상태에서 시작하여 자신에게 맞는 구성을 얻으려고 노력하는 것은 자신이 무엇을 하고 있는지 알지 않는 한 불가능할 것입니다. 이상적으로는 실행 중인 커널을 생성하는 데 사용된 커널부터 시작하는 것이 좋습니다. 단지 모듈을 구축하는 경우 특히 그렇습니다. 실제 커널을 빌드할 필요는 없지만 모듈을 컴파일하려면 해당 모듈이 사용될 커널이 어떻게 컴파일되었는지 알아야 합니다.
/proc/config.gz
바라건대, 대상 시스템에서 이를 찾을 수 있기를 바랍니다 . 이것은 디스크에 있는 파일이 아니며, 이를 검색하려면 시스템이 실행 중이어야 합니다. 압축되어 있어서 그렇죠
gunzip config.gz
mv config .config
해야합니다. 이를 소스 트리에 복사하고 실행하여 make menuconfig
빌드하려는 모듈에 대한 지침을 추가하세요.
존재하지 않는 경우 사용된 구성을 추적해야 합니다. 또한 모듈을 빌드하는 경우 정확히 동일한 커널 버전을 사용해야 한다는 점에 유의하세요.
여기일반적인 개요도움이 될 수도 있는 컴파일 과정 중 #2와 3을 먼저 읽어보세요.
답변2
먼저 make mrproper
.
그 후 새로 실행하십시오 make menuconfig
. 원하지 않는 항목을 반드시 선택하면 .config
생성되지 않습니다.