|
|
  |
компиляция драйвера под Arm |
|
|
|
Apr 14 2008, 06:47
|
Группа: Новичок
Сообщений: 12
Регистрация: 11-04-08
Пользователь №: 36 679

|
такая проблема - при попытке скомпилить драйвер под Arm выводятся ошибки типа /root/arm/buildroot/project_build_arm/M7-EK/linux-2.6.22.10/include/asm/arch/hardware.h:30:2: error: #error "Unsupported AT91 processor" /root/arm/buildroot/project_build_arm/M7-EK/linux-2.6.22.10/include/asm/arch/io.h:36: error: AT91_BASE_SYS undeclared (first use in this function) ссылки в asm и arch - правельные сам драйвер: Код #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h>
#define DEVICE_NAME "u2dev" // Device name as it appears in /proc/devices #define MAJOR_NUM 253
int init_module(void); void cleanup_module(void);
int init_module(void) { printk("This is PKV/U3 driver.\n");
return 0; }
// ----------------------------------------------------------------------
void cleanup_module(void) { } как видите - простейший вариант make-файл: Код TARGET ?= TARGET = arm-linux
PREFIX ?= PREFIX = /root/arm/buildroot/build_arm/staging_dir/usr
ARCH ?= ARCH=arm
etcdir = ${PREFIX}/etc sbindir = ${PREFIX}/sbin usrbindir = ${PREFIX}/usr/bin usrsbindir = ${PREFIX}/usr/sbin
CROSS_COMPILE ?= CROSS_COMPILE = ${TARGET}-
CC = $(CROSS_COMPILE)gcc LD = $(CROSS_COMPILE)gcc AR = $(CROSS_COMPILE)ar
RANLIB = $(CROSS_COMPILE)ranlib
INCLUDE = -I/root/arm/buildroot/project_build_arm/M7-EK/linux-2.6.22.10/include -isystem /root/arm/buildroot/project_build_arm/M7-EK/linux-2.6.22.10/include CFLAGS += -Wall -D_FILE_OFFSET_BITS=64 -DMODULE -D__KERNEL__ WARNINGS = -Wstrict-prototypes -Wsign-compare -Wshadow \ -Wchar-subscripts -Wmissing-declarations -Wnested-externs \ -Wpointer-arith -Wcast-align -Wsign-compare -Wmissing-prototypes CFLAGS += $(WARNINGS) CFLAGS += $(INCLUDE) LDFLAGS += -Wl,-warn-common,--as-needed OPTFLAGS = -O CFLAGS += $(OPTFLAGS) u2dev.o: u2dev.c $(CC) $(CFLAGS) -c u2dev.c clean: rm -f *.o и .sh файл Код export TARGET=arm-linux export PREFIX=/root/arm/buildroot/build_arm/staging_dir/usr export ARCH=arm export CROSS_COMPILE=${TARGET}- export PATH=$PATH:${PREFIX}/bin если кто сталкивался или знает как это точно сделать - жду помощи
|
|
|
|
|
Apr 14 2008, 07:51
|
Группа: Новичок
Сообщений: 12
Регистрация: 11-04-08
Пользователь №: 36 679

|
спасибо помогло, только появилась еще вот такая ошибка
/root/arm/buildroot/project_build_arm/M7-EK/linux-2.6.22.10/include/linux/rwsem.h:24:65: error: asm/rwsem.h: No such file or directory
в директориях других архитектур этот файл может как присутствовать так и нет, что делать чтобы исправить?
Сообщение отредактировал user113 - Apr 14 2008, 07:54
|
|
|
|
|
Apr 14 2008, 08:43
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(user113 @ Apr 14 2008, 10:51)  в директориях других архитектур этот файл может как присутствовать так и нет, что делать чтобы исправить? Читать исходники. Искать, в каких местах этот файл включается, смотреть вокруг - не обрамлено ли это место каким-нибудь #ifdef, смотреть, где определяется аргумент этого #ifdef, искать в гугле. Может там в комплекте шел какой-нибудь скрипт configure, который умеет настраивать все нужные параметры?.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 14 2008, 13:42
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(user113 @ Apr 14 2008, 09:47)  такая проблема - при попытке скомпилить драйвер под Arm выводятся ошибки типа Так Вы пытаетесь скомпилировать модуль ядра используя какой-то левый Makefile. Этот Makefile годится для приложений но не для модулей ядра. Посмотрите хотя-бы linux/drivers/hid/Makefile И запускать его надо примерно так: Код make -C /path/to/linux/kernel/source/tree M=`pwd` Или так Код make -C /path/to/linux/kernel/source/tree SUBDIRS=/path/to/module/source/tree modules И читайте linux/Documentation/kbuild
Сообщение отредактировал amw - Apr 14 2008, 13:48
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Apr 16 2008, 05:30
|
Группа: Новичок
Сообщений: 12
Регистрация: 11-04-08
Пользователь №: 36 679

|
Цитата Так Вы пытаетесь скомпилировать модуль ядра используя какой-то левый Makefile. Этот Makefile годится для приложений но не для модулей ядра. он годится и для модулей, если компилировать обычным gcc под х86, то все правильно компилиться и работает (именно как драйвер) Цитата Посмотрите хотя-бы linux/drivers/hid/Makefile посмотрел, если не ошибаюся он предназначен для сборки драйвера в ядро, мнеже нужно узнать как правильно откомпилировать исходные после добавления -D с правильными константами - файл откомпилился, но на arm'e при попытки insmod'a выдыется Illegal instraction может у кого есть примеры make-ов для драйверов на arm, или кто точно знает как сделать?
|
|
|
|
|
Apr 16 2008, 06:23
|
Местный
  
Группа: Участник
Сообщений: 406
Регистрация: 1-03-06
Пользователь №: 14 821

|
Цитата(user113 @ Apr 16 2008, 07:30)  после добавления -D с правильными константами - файл откомпилился, но на arm'e при попытки insmod'a выдыется Illegal instraction может у кого есть примеры make-ов для драйверов на arm, или кто точно знает как сделать? Makefile Код obj-m += my_driver.o modul-objs := my_driver.o make -C /driver_path/ SUBDIRS=$PWD modules
|
|
|
|
|
Apr 16 2008, 07:17
|
Группа: Новичок
Сообщений: 12
Регистрация: 11-04-08
Пользователь №: 36 679

|
2 andron86 driver_path - это путь к ядру или к .с моего драйвера? если к ядру то, если перед make'ом выполнить sh-ник, приведенный выше, то компилиться, появляется несколько файлов в том числе my_driver.ko, как я понял именно его нужно на arm'e инсмодить? но все равно не работает, ни .o, ни .ko при insmod my_driver.ko пишет Illegal instruction, и еще т.к. ядро собрано в минимальной конфигурации все средства разработки в нем отсутствуют - при insmod требуется наличие в системе gcc и или чегото подобного?
|
|
|
|
|
Apr 16 2008, 07:42
|
Местный
  
Группа: Участник
Сообщений: 406
Регистрация: 1-03-06
Пользователь №: 14 821

|
Цитата(user113 @ Apr 16 2008, 09:17)  2 andron86 driver_path - это путь к ядру или к .с моего драйвера? звиняюсь, к исходникам ядра. >>при insmod требуется наличие в системе gcc и или чегото подобного? требуется insmod
|
|
|
|
|
Apr 17 2008, 07:55
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(user113 @ Apr 16 2008, 08:30)  может у кого есть примеры make-ов для драйверов на arm, или кто точно знает как сделать? Вот, вчера отослать не получилось.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|