Тот же Makefile преуспел в Ubuntu 10.04 LTS, но потерпел неудачу в Angstrom на Beagle Board - PullRequest
0 голосов
/ 22 сентября 2011

Я пытался скомпилировать chardev.c из этого учебника , используя следующее Makefile:

obj-m   := chardev.o
KDIR    := /lib/modules/$(shell uname -r)/build
PWD     := $(shell pwd)
default :
    $(MAKE) -C $(KDIR) M=$(PWD) modules

Я получил правильный вывод, и он работает нормально, пока я make в Ubuntu 10.04 LTC:

make -C /lib/modules/2.6.32-33-generic-pae/build M=/home/noge/Desktop/driver-            tutorial/IOCTL_example/ioctl_eclipse modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-33-generic-pae'
  Building modules, stage 2.
  MODPOST 1 modules
  LD [M]  /home/noge/Desktop/driver-tutorial/IOCTL_example/ioctl_eclipse/chardev.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-33-generic-pae'

Однако, когда я передаю те же файлы на BeagleBoard , который работает под управлением Angstrom и выполняет make CROSS_COMPILE=arm-angstrom-linux-gnueabi-, я получаю следующую ошибку:

root@beagleboard:~/Desktop/noge/C-tutorials/hello_world# make CROSS_COMPILE=
arm-angstrom-linux-gnueabi-                                                     
make -C /lib/modules/2.6.32/build M=/home/root/Desktop/noge/C-tutorials/hels
make[1]: Entering directory `/usr/src/linux-2.6.32/2.6_kernel'                  
Makefile:1448: *** mixed implicit and normal rules.  Stop.                      
make[1]: Leaving directory `/usr/src/linux-2.6.32/2.6_kernel'                   
make: *** [default] Error 2  

Я не уверен, что это причина, но я заметил, что версия make отличается для Ubuntu и Angstrom:

Angstrom's version:
GNU Make 3.82                                                                   
Built for arm-angstrom-linux-gnueabi

Ubuntu's version:
GNU Make 3.81
This program built for i486-pc-linux-gnu

Короче, почему ошибка при выполнении make в Beagle Board под управлением Anstrom?

Спасибо за любую помощь ..!

Обновление: Содержимое Makefile возле строки 1448:

1447    # Modules
1448    / %/: prepare scripts FORCE
1449    $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
1450    $(build)=$(build-dir)
1451    %.ko: prepare scripts FORCE
1452    $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1)   \
1453    $(build)=$(build-dir) $(@:.ko=.o)
1454    $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost

Я проверил версию своего ядра и получил: Linux beagleboard 2.6.32 #3 PREEMPT Thu Jun 23 09:56:19 CEST 2011 armv7l GNU/Linux, но источник ядра, полученный от здесь , имеет версию 2.6.22.18.

Возможно ли получить неправильный исходный код ядра, который вызывает это?

1 Ответ

0 голосов
/ 22 сентября 2011

Я вполне уверен, что ваш Makefile здесь не виноват, но может быть коллизия имени правила.Что находится в строке 1448 /usr/src/linux-2.6.32/2.6_kernel/Makefile?

...