
Я пытаюсь создать драйвер устройства Linux для Devkit 8000. Я получаю следующее сообщение об ошибке:
Когда я пытаюсь следовать его указаниям, мне задают кучу вопросов типа "да/нет", которые я не совсем понимаю. В конце концов, мне приходится выбирать между 25 различными процессорами(?):
Вот мой 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
Я не думаю, что мой код сам по себе актуален, плюс язнатьчто мой исходный код полон ошибок, вам лучше этого не видеть, хаха.
решение1
Вы не сказали, откуда взяли используемый вами источник, но, очевидно, .config
в нем есть недопустимый элемент. Он используется для установки различных параметров, таких как тип процессора. Существуют буквально сотни таких параметров со сложными зависимостями друг от друга (например, выбор процессора повлияет на другие доступные вам варианты).
В исходном коде vanilla нет .config
; вам нужно либо предоставить, либо создать его. make oldconfig
используется, когда .config
из предыдущей версии и должен быть обновлен. Иногда этот процесс не может быть полностью автоматизирован, и в итоге вы в основном запускаете make config
, который использует интерфейс CLI; это также может произойти, если вы попробуете make oldconfig
без конфигурации.
Вам следует взглянуть на более наглядное изображение, make menuconfig
чтобы получить лучшее представление о том, о чем идет речь.
Однако начинать с нуля и пытаться получить конфигурацию, которая будет работать для вас, будет невозможно, если вы не знаете, что делаете. В идеале, вам следует начать с той, которая использовалась для создания вашего работающего ядра. Это особенно верно, если вы просто собираете модуль; хотя вам не нужно собирать само ядро, чтобы скомпилировать модуль, необходимо знать, как было скомпилировано ядро, для которого он будет использоваться.
Надеюсь, вы сможете найти это в /proc/config.gz
целевой системе. Это не файл на диске, система должна быть запущена, чтобы его извлечь. Он сжат gzip, поэтому
gunzip config.gz
mv config .config
Должно подойти. Скопируйте это в исходное дерево и запустите, make menuconfig
чтобы добавить инструкции для модуля, который вы хотите собрать.
Если его нет, вам придется отследить использовавшуюся конфигурацию. Обратите внимание, что при сборке модуля вам необходимо использовать точно такую же версию ядра.
Вотобщий обзорпроцесса компиляции, который также может быть полезен, сначала прочтите пункты 2 и 3.
решение2
Сначала нам нужно очистить старую конфигурацию, например make mrproper
.
После этого заново запустите make menuconfig
. Если вы выбрали нежелательные элементы, определенно, .config
не будут созданы.