crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

Zaca
  опции профиля:
сообщение 22.3.2012, 15:43
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 22.3.2012
Пользователь №: 3281

Спасибо сказали: 0 раз(а)




Репутация:   0  


Linux 2.6
QT Creator 2.4.1

При использовании Makefile
KERNEL=$(shell if [ "`uname -r | grep 2.6.`" = "" ]; then echo "2" ; else echo "2.6"; fi)
ifeq ($(KERNEL),2.6) #kernel 2.6
obj-m := driver_I.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
endif


получаю на выходе модуль driver_I.ko, который я могу вставлять в ядро.

Хотела для этих целей (линковать, компилировать) использовать IDE QT4

Создаю проект (простой проект нра языке С), собираю - на выходе стопицот ошибок.

Подскажите, что не так делаю? Спасибо.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V   1 2 >  
Начать новую тему
Ответов (1 - 18)
RazrFalcon
  опции профиля:
сообщение 22.3.2012, 15:53
Сообщение #2


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Каких ошибок
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 22.3.2012, 19:42
Сообщение #3


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


не знаю насчёт Qt Creator'а, но когда при компиляции модуля ядра вылазит куча ошибок - это обычно банальное отсутствие в системе заголовков нужного ядра.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zaca
  опции профиля:
сообщение 23.3.2012, 7:33
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 22.3.2012
Пользователь №: 3281

Спасибо сказали: 0 раз(а)




Репутация:   0  


ну естессно - первый десяток ненайденные инклюды и пошло-поехало...

Впыталась поставить в файл проекта INCLUDEPATH, началась проблема с поиском путей в этих найднных "h"-файлах.

Определяла переменные QTDIR, PATH, LD_LIBRARY_PATH - безтолку

Не пойму - надо что-то еще настроить? Сама идея, для работы с драйвером, QT использовать, не противоречит виликой идее чучхе?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 23.3.2012, 7:57
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


Цитата(Zaca @ 23.3.2012, 13:33) *
ну естессно - первый десяток ненайденные инклюды и пошло-поехало...

Впыталась поставить в файл проекта INCLUDEPATH, началась проблема с поиском путей в этих найднных "h"-файлах.

Определяла переменные QTDIR, PATH, LD_LIBRARY_PATH - безтолку

Не пойму - надо что-то еще настроить? Сама идея, для работы с драйвером, QT использовать, не противоречит виликой идее чучхе?

не противоречит конечно, для людей любящих забивать гвозди микроскопом. А загадочность этого явления невозможно определить не зная как написан текст и не имея хотя бы начальных текстов ошибок. Как любят говорить в фидо серьезные дядьки, телепаты в отпуске
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zaca
  опции профиля:
сообщение 23.3.2012, 13:12
Сообщение #6


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 22.3.2012
Пользователь №: 3281

Спасибо сказали: 0 раз(а)




Репутация:   0  


Это без INCLUDEPATH


kmk.c:4:28: error: linux/autoconf.h: No such file or directory
kmk.c:5:26: error: linux/module.h: No such file or directory
kmk.c:6:22: error: linux/mm.h: No such file or directory
kmk.c:7:24: error: linux/slab.h: No such file or directory
kmk.c:8:27: error: linux/vmalloc.h: No such file or directory
kmk.c:9:25: error: linux/delay.h: No such file or directory
kmk.c:10:29: error: linux/interrupt.h: No such file or directory
kmk.c:11:29: error: linux/selection.h: No such file or directory
kmk.c:12:24: error: linux/init.h: No such file or directory
kmk.c:13:28: error: linux/smp_lock.h: No such file or directory
kmk.c:14:28: error: linux/spinlock.h: No such file or directory
kmk.c:15:20: error: asm/io.h: No such file or directory
kmk.c:16:25: error: asm/uaccess.h: No such file or directory
kmk.c:19:27: error: linux/cpumask.h: No such file or directory
kmk.c:20:28: error: linux/pci-aspm.h: No such file or directory
In file included from ../kmk_proj/kmk.c:33:
/usr/src/linux-2.6.27.7-9/drivers/staging/rt2860/rt2860.h:57: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'rt2860_interrupt'
In file included from ../kmk_proj/kmk.c:36:
../kmk_proj/kmk.h:19: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'buf_KMK_test'
../kmk_proj/kmk.h:22: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'kmk_handler'
In file included from ../kmk_proj/kmk.c:37:
../kmk_proj/kmk_ou.h:11: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'buf_KMK_ou_CTRL'
In file included from ../kmk_proj/kmk.c:38:
../kmk_proj/kmk_ctrl.h:13: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'buf_KMK_ctrl_Inicial'
../kmk_proj/kmk.c:56: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'buf_ioctl'
../kmk_proj/kmk.c:63: error: expected specifier-qualifier-list before 'u32'
../kmk_proj/kmk.c:84: warning: 'struct file' declared inside parameter list
../kmk_proj/kmk.c:84: warning: its scope is only this definition or declaration, which is probably not what you want
../kmk_proj/kmk.c:84: warning: 'struct inode' declared inside parameter list
../kmk_proj/kmk.c: In function 'kmk_open':
../kmk_proj/kmk.c:88: warning: implicit declaration of function 'MINOR'
../kmk_proj/kmk.c:88: error: dereferencing pointer to incomplete type
../kmk_proj/kmk.c:89: error: dereferencing pointer to incomplete type
../kmk_proj/kmk.c:96: error: dereferencing pointer to incomplete type
../kmk_proj/kmk.c:99: warning: implicit declaration of function 'try_module_get'
../kmk_proj/kmk.c:99: error: 'THIS_MODULE' undeclared (first use in this function)
../kmk_proj/kmk.c:99: error: (Each undeclared identifier is reported only once
../kmk_proj/kmk.c:99: error: for each function it appears in.)
../kmk_proj/kmk.c: At top level:
../kmk_proj/kmk.c:105: warning: 'struct file' declared inside parameter list
../kmk_proj/kmk.c:105: warning: 'struct inode' declared inside parameter list
../kmk_proj/kmk.c: In function 'kmk_close':
../kmk_proj/kmk.c:108: error: dereferencing pointer to incomplete type
../kmk_proj/kmk.c:109: error: dereferencing pointer to incomplete type
../kmk_proj/kmk.c:114: error: dereferencing pointer to incomplete type
../kmk_proj/kmk.c:116: warning: implicit declaration of function 'module_put'
../kmk_proj/kmk.c:116: error: 'THIS_MODULE' undeclared (first use in this function)
../kmk_proj/kmk.c:117: warning: implicit declaration of function 'printk'
../kmk_proj/kmk.c: At top level:
../kmk_proj/kmk.c:122: warning: 'struct poll_table_struct' declared inside parameter list
../kmk_proj/kmk.c:122: warning: 'struct file' declared inside parameter list
../kmk_proj/kmk.c: In function 'kmk_poll':
../kmk_proj/kmk.c:127: error: dereferencing pointer to incomplete type
../kmk_proj/kmk.c:128: warning: implicit declaration of function 'poll_wait'
../kmk_proj/kmk.c:128: error: 'kmk_info' has no member named 'wait_trans_fin_queue'
../kmk_proj/kmk.c:130: error: 'kmk_info' has no member named 'trans_completed'
../kmk_proj/kmk.c:131: error: 'kmk_info' has no member named 'trans_completed'
../kmk_proj/kmk.c: At top level:
../kmk_proj/kmk.c:140: warning: 'struct file' declared inside parameter list
../kmk_proj/kmk.c:140: warning: 'struct inode' declared inside parameter list
../kmk_proj/kmk.c: In function 'kmk_ioctl':
../kmk_proj/kmk.c:143: error: 'u32' undeclared (first use in this function)
../kmk_proj/kmk.c:143: error: 'ADDR_RAM' undeclared (first use in this function)
../kmk_proj/kmk.c:143: error: 'ADDR_REG' undeclared (first use in this function)
../kmk_proj/kmk.c:143: warning: left-hand operand of comma expression has no effect
../kmk_proj/kmk.c:145: error: 'u16' undeclared (first use in this function)
../kmk_proj/kmk.c:145: error: expected ';' before 'REG'
../kmk_proj/kmk.c:149: error: dereferencing pointer to incomplete type
../kmk_proj/kmk.c:150: error: dereferencing pointer to incomplete type
../kmk_proj/kmk.c:155: warning: implicit declaration of function 'copy_from_user'
../kmk_proj/kmk.c:155: error: 'buf_ioctl' undeclared (first use in this function)
../kmk_proj/kmk.c:157: error: 'kmk_info' has no member named 'aperture1'
../kmk_proj/kmk.c:158: error: 'kmk_info' has no member named 'aperture2'
../kmk_proj/kmk.c:159: error: expected ')' before 'u16'
../kmk_proj/kmk.c:159: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:160: error: expected ')' before 'u16'
../kmk_proj/kmk.c:160: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:163: error: expected ')' before 'u16'
../kmk_proj/kmk.c:163: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:163: error: 'buf_KMK_test' undeclared (first use in this function)
../kmk_proj/kmk.c:164: error: expected ')' before 'u16'
../kmk_proj/kmk.c:164: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:165: error: expected ')' before 'u16'
../kmk_proj/kmk.c:165: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:166: error: expected ')' before 'u16'
../kmk_proj/kmk.c:166: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:167: error: expected ')' before 'u16'
../kmk_proj/kmk.c:167: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:168: error: 'kmk_info' has no member named 'comand'
../kmk_proj/kmk.c:170: error: 'kmk_info' has no member named 'trans_completed'
../kmk_proj/kmk.c:171: warning: implicit declaration of function 'up'
../kmk_proj/kmk.c:171: error: 'kmk_info' has no member named 'sem'
../kmk_proj/kmk.c:172: warning: implicit declaration of function 'interruptible_sleep_on'
../kmk_proj/kmk.c:172: error: 'kmk_info' has no member named 'wait_trans_fin_queue'
../kmk_proj/kmk.c:173: warning: implicit declaration of function 'down_interruptible'
../kmk_proj/kmk.c:173: error: 'kmk_info' has no member named 'sem'
../kmk_proj/kmk.c:174: error: 'ERESTARTSYS' undeclared (first use in this function)
../kmk_proj/kmk.c:176: error: 'kmk_info' has no member named 'sem'
../kmk_proj/kmk.c:177: error: 'kmk_info' has no member named 'trans_completed'
../kmk_proj/kmk.c:178: error: 'kmk_info' has no member named 'comand'
../kmk_proj/kmk.c:179: error: expected ')' before 'u16'
../kmk_proj/kmk.c:179: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:180: error: expected ')' before 'u16'
../kmk_proj/kmk.c:180: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:182: warning: implicit declaration of function 'copy_to_user'
../kmk_proj/kmk.c:187: error: 'kmk_info' has no member named 'aperture1'
../kmk_proj/kmk.c:188: error: 'kmk_info' has no member named 'aperture2'
../kmk_proj/kmk.c:189: error: expected ')' before 'u16'
../kmk_proj/kmk.c:189: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:190: error: expected ')' before 'u16'
../kmk_proj/kmk.c:190: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:192: error: expected ')' before 'u16'
../kmk_proj/kmk.c:192: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:192: error: 'buf_KMK_ctrl_Inicial' undeclared (first use in this function)
../kmk_proj/kmk.c:193: error: expected ')' before 'u16'
../kmk_proj/kmk.c:193: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:194: error: expected ')' before 'u16'
../kmk_proj/kmk.c:194: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:200: error: 'REG' undeclared (first use in this function)
../kmk_proj/kmk.c:201: error: 'DATA' undeclared (first use in this function)
../kmk_proj/kmk.c:202: error: 'kmk_info' has no member named 'aperture2'
../kmk_proj/kmk.c:203: error: expected ')' before 'u16'
../kmk_proj/kmk.c:203: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:210: error: 'kmk_info' has no member named 'aperture2'
../kmk_proj/kmk.c:211: error: expected ')' before 'u16'
../kmk_proj/kmk.c:211: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:218: error: 'kmk_info' has no member named 'aperture1'
../kmk_proj/kmk.c:224: error: expected ')' before 'u16'
../kmk_proj/kmk.c:224: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:229: error: 'kmk_info' has no member named 'aperture1'
../kmk_proj/kmk.c:233: error: expected ')' before 'u16'
../kmk_proj/kmk.c:233: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:245: error: 'kmk_info' has no member named 'aperture2'
../kmk_proj/kmk.c:246: error: 'kmk_info' has no member named 'comand'
../kmk_proj/kmk.c:247: error: expected ')' before 'u16'
../kmk_proj/kmk.c:247: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:252: error: 'kmk_info' has no member named 'aperture1'
../kmk_proj/kmk.c:253: error: 'kmk_info' has no member named 'aperture2'
../kmk_proj/kmk.c:254: error: expected ')' before 'u16'
../kmk_proj/kmk.c:254: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:255: error: expected ')' before 'u16'
../kmk_proj/kmk.c:255: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:257: error: expected ')' before 'u16'
../kmk_proj/kmk.c:257: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:258: error: expected ')' before 'u16'
../kmk_proj/kmk.c:258: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:259: error: expected ')' before 'u16'
../kmk_proj/kmk.c:259: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:260: error: expected ')' before 'u16'
../kmk_proj/kmk.c:260: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:263: error: expected ')' before 'u16'
../kmk_proj/kmk.c:263: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:263: error: 'buf_KMK_ou_CTRL' undeclared (first use in this function)
../kmk_proj/kmk.c:264: error: expected ')' before 'u16'
../kmk_proj/kmk.c:264: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:269: error: expected ')' before 'u16'
../kmk_proj/kmk.c:269: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:270: error: expected ')' before 'u16'
../kmk_proj/kmk.c:270: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:279: error: 'kmk_info' has no member named 'aperture1'
../kmk_proj/kmk.c:280: error: 'kmk_info' has no member named 'aperture2'
../kmk_proj/kmk.c:281: error: expected ')' before 'u16'
../kmk_proj/kmk.c:281: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:282: error: expected ')' before 'u16'
../kmk_proj/kmk.c:282: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:284: error: expected ')' before 'u16'
../kmk_proj/kmk.c:284: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c: At top level:
../kmk_proj/kmk.c:296: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'kmk_init'
../kmk_proj/kmk.c:375: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'kmk_handler'
../kmk_proj/kmk.c: In function 'kmk_cleanup':
../kmk_proj/kmk.c:395: error: 'struct kmk_info' has no member named 'next'
../kmk_proj/kmk.c:397: error: expected ')' before 'u16'
../kmk_proj/kmk.c:397: error: 'struct kmk_info' has no member named 'aperture2'
../kmk_proj/kmk.c:397: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:398: error: expected ')' before 'u16'
../kmk_proj/kmk.c:398: error: 'struct kmk_info' has no member named 'aperture2'
../kmk_proj/kmk.c:398: warning: type defaults to 'int' in declaration of 'type name'
../kmk_proj/kmk.c:400: error: 'struct kmk_info' has no member named 'aperture1'
../kmk_proj/kmk.c:401: warning: implicit declaration of function 'iounmap'
../kmk_proj/kmk.c:401: error: 'struct kmk_info' has no member named 'aperture1'
../kmk_proj/kmk.c:402: error: 'struct kmk_info' has no member named 'aperture2'
../kmk_proj/kmk.c:405: warning: implicit declaration of function 'pci_release_regions'
../kmk_proj/kmk.c:407: warning: implicit declaration of function 'free_irq'
../kmk_proj/kmk.c:407: error: dereferencing pointer to incomplete type
../kmk_proj/kmk.c:408: warning: implicit declaration of function 'kfree'


> env | grep QT
дает

QT_IM_MODULE=xim
QT_SYSTEM_DIR=/usr/share/desktop-data
QT_PLUGIN_PATH=/root/.kde4/lib/kde4/plugins/:/usr/lib/kde4/plugins/
QT_IM_SWITCHER=imsw-multi
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 23.3.2012, 14:31
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


значит так, все эти хедеры находятся по пути путь_к_текущему_ядру/include. Следовательно в проект следует добавить
INCLUDEPATH += "полный путь до текущего ядра/include"

у меня допустим это бы выглядело
INCLUDEPATH += "/usr/src/kernels/3.3.0-4.fc16.i686/include"


Сообщение отредактировал maint - 23.3.2012, 14:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zaca
  опции профиля:
сообщение 23.3.2012, 15:02
Сообщение #8


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 22.3.2012
Пользователь №: 3281

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(maint @ 23.3.2012, 14:31) *
значит так, все эти хедеры находятся по пути путь_к_текущему_ядру/include. Следовательно в проект следует добавить
INCLUDEPATH += "полный путь до текущего ядра/include"

у меня допустим это бы выглядело
INCLUDEPATH += "/usr/src/kernels/3.3.0-4.fc16.i686/include"


да, это я сделала, инклюды увиделись - но те ".h" файлы, на которые ссылаются эти - вылетают с той же проблемой...
и их там туча...
наверно можно же как-то настроить, чтобы эти файлы искались и в дирриктории и в поддиректории...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 23.3.2012, 15:15
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


Цитата(Zaca @ 23.3.2012, 21:02) *
Цитата(maint @ 23.3.2012, 14:31) *
значит так, все эти хедеры находятся по пути путь_к_текущему_ядру/include. Следовательно в проект следует добавить
INCLUDEPATH += "полный путь до текущего ядра/include"

у меня допустим это бы выглядело
INCLUDEPATH += "/usr/src/kernels/3.3.0-4.fc16.i686/include"


да, это я сделала, инклюды увиделись - но те ".h" файлы, на которые ссылаются эти - вылетают с той же проблемой...
и их там туча...
наверно можно же как-то настроить, чтобы эти файлы искались и в дирриктории и в поддиректории...

текст, текст начала программы. Только где хедеры, без всего текста, как в ошибках. Какая то элементарная ошибка в написании
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 23.3.2012, 16:33
Сообщение #10


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


тут дело не в инклюдах. а в том, что модуль ядра должен собираться в каталоге /lib/modules/<версия ядра>/build. это должен быть линк на сорцы ядра (или хотя бы хэдеры). также в каталоге /lib/modules/<версия ядра>/ должен быть линк sources - также на сорцы ядра или хэдеры.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zaca
  опции профиля:
сообщение 23.3.2012, 19:39
Сообщение #11


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 22.3.2012
Пользователь №: 3281

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 23.3.2012, 16:33) *
тут дело не в инклюдах. а в том, что модуль ядра должен собираться в каталоге /lib/modules/<версия ядра>/build. это должен быть линк на сорцы ядра (или хотя бы хэдеры). также в каталоге /lib/modules/<версия ядра>/ должен быть линк sources - также на сорцы ядра или хэдеры.

Спасибо, в понедельник попробую
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zaca
  опции профиля:
сообщение 26.3.2012, 10:35
Сообщение #12


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 22.3.2012
Пользователь №: 3281

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 23.3.2012, 16:33) *
тут дело не в инклюдах. а в том, что модуль ядра должен собираться в каталоге /lib/modules/<версия ядра>/build. это должен быть линк на сорцы ядра (или хотя бы хэдеры). также в каталоге /lib/modules/<версия ядра>/ должен быть линк sources - также на сорцы ядра или хэдеры.



Вроде все так и есть.

решила собрать ядро в каталоге /lib/modules/<версия ядра>/build

linux-awyp:/lib/modules/2.6.27.7-9-pae/build # make bzImage
make -C /usr/src/linux-2.6.27.7-9 O=/usr/src/linux-2.6.27.7-9-obj/i386/pae/. bzImage
Using /usr/src/linux-2.6.27.7-9 as source for kernel
GEN /usr/src/linux-2.6.27.7-9-obj/i386/pae/Makefile
CHK include/linux/version.h
CHK include/linux/utsrelease.h
CC arch/x86/kernel/asm-offsets.s
In file included from /usr/src/linux-2.6.27.7-9/include/linux/gfp.h:4,
from /usr/src/linux-2.6.27.7-9/include/linux/kmod.h:22,
from /usr/src/linux-2.6.27.7-9/include/linux/module.h:13,
from /usr/src/linux-2.6.27.7-9/include/linux/crypto.h:21,
from /usr/src/linux-2.6.27.7-9/arch/x86/kernel/asm-offsets_32.c:7,
from /usr/src/linux-2.6.27.7-9/arch/x86/kernel/asm-offsets.c:2:
/usr/src/linux-2.6.27.7-9/include/linux/mmzone.h:197:5: warning: "MAX_NR_ZONES" is not defined
In file included from /usr/src/linux-2.6.27.7-9/include/linux/gfp.h:4,
from /usr/src/linux-2.6.27.7-9/include/linux/kmod.h:22,
from /usr/src/linux-2.6.27.7-9/include/linux/module.h:13,
from /usr/src/linux-2.6.27.7-9/include/linux/crypto.h:21,
from /usr/src/linux-2.6.27.7-9/arch/x86/kernel/asm-offsets_32.c:7,
from /usr/src/linux-2.6.27.7-9/arch/x86/kernel/asm-offsets.c:2:
/usr/src/linux-2.6.27.7-9/include/linux/mmzone.h:221: error: ‘MAX_NR_ZONES’ undeclared here (not in a function)
make[3]: *** [arch/x86/kernel/asm-offsets.s] Error 1
make[2]: *** [prepare0] Error 2
make[1]: *** [sub-make] Error 2
make: *** [all] Error 2


завалила систему...(

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zaca
  опции профиля:
сообщение 27.3.2012, 7:52
Сообщение #13


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 22.3.2012
Пользователь №: 3281

Спасибо сказали: 0 раз(а)




Репутация:   0  


Что, больше нечего подсказать по этой теме?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 27.3.2012, 8:10
Сообщение #14


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


Цитата(Zaca @ 27.3.2012, 13:52) *
Что, больше нечего подсказать по этой теме?

трудно подсказать человеку, который на живой системе эксперименты проводит. К тому же без текстов и пр. Абстракция и телепатия не в ходу
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zaca
  опции профиля:
сообщение 28.3.2012, 14:53
Сообщение #15


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 22.3.2012
Пользователь №: 3281

Спасибо сказали: 0 раз(а)




Репутация:   0  


Беру популярный пример из инета:

"Сам код"
/*
 *  chardev.c: Создает символьное устройство, доступное только для чтения
 *  возвращает сообщение, с указанием количества произведенных попыток чтения из файла устройства
 */

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <asm/uaccess.h>        /* определение функции put_user */

/*  
 *  Прототипы функций, обычно их выносят в заголовочный файл (.h)
 */
int init_module(void);
void cleanup_module(void);
static int device_open(struct inode *, struct file *);
static int device_release(struct inode *, struct file *);
static ssize_t device_read(struct file *, char *, size_t, loff_t *);
static ssize_t device_write(struct file *, const char *, size_t, loff_t *);

#define SUCCESS 0
#define DEVICE_NAME "chardev"   /* Имя устройства, будет отображаться в /proc/devices   */
#define BUF_LEN 80                      /* Максимальная длина сообщения */

/* 
 * Глобальные переменные, объявлены как static, воизбежание конфликтов имен. 
 */

static int Major;             /* Старший номер устройства нашего драйвера */
static int Device_Open = 0;   /* Устройство открыто?  
                               * используется для предотвращения одновременного 
                               * обращения из нескольких процессов */
static char msg[BUF_LEN];     /* Здесь будет собираться текст сообщения */
static char *msg_Ptr;

static struct file_operations fops = {
  .read = device_read,
  .write = device_write,
  .open = device_open,
  .release = device_release
};

/*
 * Функции
 */

int init_module(void)
{
  Major = register_chrdev(0, DEVICE_NAME, &fops);

  if (Major < 0) {    
    printk("Registering the character device failed with %d\n",
            Major);
    return Major;
  }

  printk("<1>I was assigned major number %d.  To talk to\n", Major);
  printk("<1>the driver, create a dev file with\n");
  printk("'mknod /dev/chardev c %d 0'.\n", Major);
  printk("<1>Try various minor numbers.  Try to cat and echo to\n");
  printk("the device file.\n");
  printk("<1>Remove the device file and module when done.\n");

  return 0;
}

void cleanup_module(void)
{
  /* 
   * Отключение устройства 
   */
  //int ret = 
  unregister_chrdev(Major, DEVICE_NAME);
  //if (ret < 0)
    //printk("Error in unregister_chrdev: %d\n", ret);
}

/*
 * Обработчики
 */

/* 
 * Вызывается, когда процесс пытается открыть файл устройства, например командой
 * "cat /dev/chardev"
 */
static int device_open(struct inode *inode, struct file *file)
{
  static int counter = 0;
  if (Device_Open)
    return -EBUSY;
  Device_Open++;
  sprintf(msg, "I already told you %d times Hello world!\n", counter++);
  msg_Ptr = msg;
  try_module_get(THIS_MODULE);

  return SUCCESS;
}

/* 
 * Вызывается, когда процесс закрывает файл устройства.
 */
static int device_release(struct inode *inode, struct file *file)
{
  Device_Open--;                /* Теперь мы готовы обслужить другой процесс */

  /* 
   * Уменьшить счетчик обращений, иначе, после первой же удачной попытки открыть файл устройства,
   * вы никогда не сможете выгрузить модуль. 
   */
  module_put(THIS_MODULE);

  return 0;
}

/* 
 * Вызывается, когда процесс пытается прочитать уже открытый файл устройства
 */
static ssize_t device_read(struct file *filp, /* см. include/linux/fs.h   */
         char *buffer,                        /* буфер, куда надо положить данные */
         size_t length,                       /* размер буфера */
         loff_t * offset)
{
  /*
   * Количество байт, фактически записанных в буфер
   */
  int bytes_read = 0;

  /*
   * Если достигли конца сообщения, 
   * вернуть 0, как признак конца файла
   */
  if (*msg_Ptr == 0)
    return 0;

  /* 
   * Перемещение данных в буфер
   */
  while (length && *msg_Ptr) {

    /* 
     * Буфер находится в пространстве пользователя (в сегменте данных), 
     * а не в пространстве ядра, поэтому простое присваивание здесь недопустимо. 
     * Для того, чтобы скопировать данные, мы используем функцию put_user, 
     * которая перенесет данные из пространства ядра в пространство пользователя. 
     */
    put_user(*(msg_Ptr++), buffer++);

    length--;
    bytes_read++;
        }

  /* 
   * В большинстве своем, функции чтения возвращают количество байт, записанных в буфер.
   */
  return bytes_read;
}

/*  
 * Вызывается, когда процесс пытается записать в устройство, 
 * например так: echo "hi" > /dev/chardev
 */
static ssize_t
device_write(struct file *filp, const char *buff, size_t len, loff_t * off)
{
  printk("<1>Sorry, this operation isn't supported.\n");
  return -EINVAL;
}

Запуская Makefile - все нормально

в QT Creator

"Ход сборки с ошибками"
Цитата
15:43:10: Выполняется сборка проекта char_dev...
15:43:10: Запускается: «/opt/QtSDK/Desktop/Qt/4.8.0/gcc/bin/qmake» /opt/QtSDK/Project/char_dev/char_dev.pro -r -spec linux-g++
15:43:10: Процесс «/opt/QtSDK/Desktop/Qt/4.8.0/gcc/bin/qmake» завершился нормально.
15:43:10: Запускается: «/usr/bin/make» -w
make: Entering directory `/opt/QtSDK/Project/char_dev-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK_______'
Makefile:189: warning: overriding commands for target `chardev.o'
Makefile:186: warning: ignoring old commands for target `chardev.o'
gcc -c -pipe -O2 -Wall -W -I../../Desktop/Qt/4.8.0/gcc/mkspecs/linux-g++ -I../char_dev -I../char_dev -I. -o chardev.o ../char_dev/chardev.c
../char_dev/chardev.c:7:26: error: linux/module.h: No such file or directory
../char_dev/chardev.c:9:67: error: asm/uaccess.h: No such file or directory
../char_dev/chardev.c:16: warning: 'struct file' declared inside parameter list
../char_dev/chardev.c:16: warning: its scope is only this definition or declaration, which is probably not what you want
../char_dev/chardev.c:16: warning: 'struct inode' declared inside parameter list
../char_dev/chardev.c:17: warning: 'struct file' declared inside parameter list
../char_dev/chardev.c:17: warning: 'struct inode' declared inside parameter list
../char_dev/chardev.c:18: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'device_read'
../char_dev/chardev.c:19: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'device_write'
../char_dev/chardev.c:36: error: variable 'fops' has initializer but incomplete type
../char_dev/chardev.c:37: error: unknown field 'read' specified in initializer
../char_dev/chardev.c:37: error: 'device_read' undeclared here (not in a function)
../char_dev/chardev.c:37: warning: excess elements in struct initializer
../char_dev/chardev.c:37: warning: (near initialization for 'fops')
../char_dev/chardev.c:38: error: unknown field 'write' specified in initializer
../char_dev/chardev.c:38: error: 'device_write' undeclared here (not in a function)
../char_dev/chardev.c:38: warning: excess elements in struct initializer
../char_dev/chardev.c:38: warning: (near initialization for 'fops')
../char_dev/chardev.c:39: error: unknown field 'open' specified in initializer
../char_dev/chardev.c:39: warning: excess elements in struct initializer
../char_dev/chardev.c:39: warning: (near initialization for 'fops')
../char_dev/chardev.c:40: error: unknown field 'release' specified in initializer
../char_dev/chardev.c:41: warning: excess elements in struct initializer
../char_dev/chardev.c:41: warning: (near initialization for 'fops')
../char_dev/chardev.c: In function 'init_module':
../char_dev/chardev.c:49: warning: implicit declaration of function 'register_chrdev'
../char_dev/chardev.c:52: warning: implicit declaration of function 'printk'
../char_dev/chardev.c: In function 'cleanup_module':
../char_dev/chardev.c:74: warning: implicit declaration of function 'unregister_chrdev'
../char_dev/chardev.c: At top level:
../char_dev/chardev.c:87: warning: 'struct file' declared inside parameter list
../char_dev/chardev.c:87: warning: 'struct inode' declared inside parameter list
../char_dev/chardev.c:87: error: conflicting types for 'device_open'
../char_dev/chardev.c:16: error: previous declaration of 'device_open' was here
../char_dev/chardev.c: In function 'device_open':
../char_dev/chardev.c:91: error: 'EBUSY' undeclared (first use in this function)
../char_dev/chardev.c:91: error: (Each undeclared identifier is reported only once
../char_dev/chardev.c:91: error: for each function it appears in.)
../char_dev/chardev.c:93: warning: implicit declaration of function 'sprintf'
../char_dev/chardev.c:93: warning: incompatible implicit declaration of built-in function 'sprintf'
../char_dev/chardev.c:95: warning: implicit declaration of function 'try_module_get'
../char_dev/chardev.c:95: error: 'THIS_MODULE' undeclared (first use in this function)
../char_dev/chardev.c:87: warning: unused parameter 'inode'
../char_dev/chardev.c:87: warning: unused parameter 'file'
../char_dev/chardev.c: At top level:
../char_dev/chardev.c:103: warning: 'struct file' declared inside parameter list
../char_dev/chardev.c:103: warning: 'struct inode' declared inside parameter list
../char_dev/chardev.c:103: error: conflicting types for 'device_release'
../char_dev/chardev.c:17: error: previous declaration of 'device_release' was here
../char_dev/chardev.c: In function 'device_release':
../char_dev/chardev.c:111: warning: implicit declaration of function 'module_put'
../char_dev/chardev.c:111: error: 'THIS_MODULE' undeclared (first use in this function)
../char_dev/chardev.c:103: warning: unused parameter 'inode'
../char_dev/chardev.c:103: warning: unused parameter 'file'
../char_dev/chardev.c: At top level:
../char_dev/chardev.c:119: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'device_read'
../char_dev/chardev.c:164: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'device_write'
make: *** [chardev.o] Error 1
make: Leaving directory `/opt/QtSDK/Project/char_dev-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK_______'
15:43:10: Процесс «/usr/bin/make» завершился с кодом 2.
Возникла ошибка при сборке проекта char_dev (цель: Desktop)
Во время выполнения сборки на этапе «Сборка»


Как настроить работу в QT4?

Сообщение отредактировал ViGOur - 28.3.2012, 15:20
Причина редактирования: Учимся использовать тэг CODE, expand можно попробовать на следующем уроке. ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 28.3.2012, 21:38
Сообщение #16


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


конечно, вряд ли кто-то собирает модули ядра таким экзотическим образом и я с Qt вообще дел не имею, но как вариант: модуль ядра нужно собирать той же версией компилятора, которая использовалась для сборки самого ядра. не знаю, как это указать Qt Creator'у. можно просто линк g++ подменить.
а так, всё равно есть ощущение, что он тупо не находит нужные ему файлы, о чём сразу и сообщает. проверить, что юзер имеет доступ к каталогу сборки модулей. проверить, что линки build и sources в каталоге сборки указывают на место, где лежит сорц ядра (или хотя бы хэдеры). ещё возможно, Creator'у нужно как-то принудительно указать рабочий каталог. по ходу, он пытаетcя собрать модуль прямо там, где он лежит. в этом случае ничего не соберётся, естественно. но про настройки Qt Creator'а я ничего не знаю, увы.

Сообщение отредактировал Iron Bug - 28.3.2012, 21:39
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zaca
  опции профиля:
сообщение 29.3.2012, 9:22
Сообщение #17


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 22.3.2012
Пользователь №: 3281

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо за помощь.

Наверно действительно надо делать так, как советуют: в редакторе текст, компиляция Makefile.

Это, наверно, винда развратила - неистребимое желание иметь все в одном флаконе...)


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 29.3.2012, 10:57
Сообщение #18


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(Zaca @ 29.3.2012, 12:22) *
Наверно действительно надо делать так, как советуют: в редакторе текст, компиляция Makefile.

Это, наверно, винда развратила - неистребимое желание иметь все в одном флаконе...)

да как-то и под вендой драйвера из makefile'ов собираются. по крайней мере, мне не приходило в голову их собирать как-то иначе. возможно, что у студии сейчас есть какие-то приблуды для KMDF, но раньше ничего подобного точно не было и я как-то по привычке пишу файлы сборки для дров, что в венде, что в лине.

при сборке через makefile исключается возможность влияния лишних параметров типа переменных среды конкретной оболочки, всяких там хитрых путей поиска и т.п. а писать сам код можно где угодно, это кому как больше нравится.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuzulis
  опции профиля:
сообщение 29.3.2012, 20:11
Сообщение #19


Активный участник
***

Группа: Участник
Сообщений: 393
Регистрация: 29.6.2009
Пользователь №: 862

Спасибо сказали: 36 раз(а)




Репутация:   7  


Я все планирую создать плагин для QtCreator для сборки драйверов и всяких модулей ядра.
Но пока все как-то нет времени.
Если есть желание помочь - то ссылка на проект тут

https://gitorious.org/qt-creator-drivers-bu...-manager-plugin
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.6.2025, 6:18