
Estou tentando construir um driver de dispositivo Linux para um Devkit 8000. Estou recebendo a seguinte mensagem de erro:
Quando tento seguir suas instruções, recebo um monte de perguntas de sim/não que realmente não entendo. No final, posso escolher entre 25 processadores diferentes (?):
Aqui está meu makefile:
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
Não acho que meu código em si seja relevante ainda, além disso,saberque meu código-fonte está cheio de bugs, você não quer ver isso, haha.
Responder1
Você não disse onde conseguiu a fonte que está usando, mas evidentemente há algo inválido .config
nela. Isto é usado para definir várias opções, como o tipo de processador. Existem literalmente centenas dessas opções com dependências complexas entre si (por exemplo, o processador que você escolher afetará as outras opções que você terá).
A fonte de baunilha não .config
contém; você precisa fornecer ou criar um. make oldconfig
é usado quando .config
é de uma versão anterior e deve ser atualizado. Às vezes, esse processo não pode ser totalmente automatizado e você acaba basicamente executando o make config
, que usa uma interface CLI; isso também pode acontecer se você tentar make oldconfig
sem configuração.
Você deve olhar mais gráfico make menuconfig
para ter uma perspectiva melhor do que se trata.
No entanto, começar do nada e tentar obter uma configuração que funcione para você será impossível, a menos que você saiba o que está fazendo. Idealmente, você começaria com aquele usado para criar seu kernel em execução. Isto é especialmente verdadeiro se você estiver apenas construindo um módulo; embora você não precise construir o kernel real, para compilar o módulo, ele deve saber como o kernel para o qual ele será usado foi compilado.
Esperançosamente, você pode encontrar isso /proc/config.gz
no sistema de destino. Este não é um arquivo em disco, o sistema deve estar em execução para recuperá-lo. Está compactado então
gunzip config.gz
mv config .config
Deveria fazer isso. Copie isso em sua árvore de origem e execute make menuconfig
para adicionar instruções para o módulo que deseja construir.
Se isso não existir, você terá que rastrear a configuração que foi usada. Observe também que você precisa usar exatamente a mesma versão do kernel se estiver construindo um módulo.
Aqui estáuma visão geraldo processo de compilação, que também pode ser útil, leia primeiro os itens 2 e 3.
Responder2
Primeiro temos que limpar a configuração antiga, como make mrproper
.
Depois disso, execute recentemente make menuconfig
. Se você selecionou itens indesejados definitivamente, .config
eles não serão criados.