Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сборка модуля [kernel] 
:(
    Опции темы
Vicul
Дата 17.1.2011, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 27.4.2009

Репутация: нет
Всего: нет



Не получается запустить модуль Hello World  с учебника. Посмотрите, что неправильно делаю

1. Ядро для SUSE 11.2  у меня  по uname:

Linux linux-srv 2.6.31.14-0.6-default #1 SMP 2010-12-10 11:18:32 +0100 i686 i686 i386 GNU/Linux

2. т.к. дерева дистрибутива   в usr/src не оказалось, скачал все c kernel.org - linux-2.6.31.14.tar.bz2.

3. развернул исходники в /home/temp/linux, там же запустил - make modules-prepare

4. в /home/temp создал Makefile

Код

obj-m := hello.o


5. Скопировал исходник hello.c
Код

#include <linux/init.h>
#include <linux/module.h>

static int hello_init(void)
{
    printk(KERN_ALERT "Hello, world\n");
    return 0;
}
static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);


MODULE_LICENSE("GPL");



5. Запускаю make 

 make -C /home/temp/linux SUBDIRS=$PWD modules

получаю модуль hello.ko

make: Entering directory `/home/temp/linux'
  CC [M]  /home/temp/hello.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/temp/hello.mod.o
  LD [M]  /home/temp/hello.ko
make: Leaving directory `/home/temp/linux'

6. Запускаю его и получаю ошибку

insmod hello.ko
insmod: error inserting 'hello.ko': -1 Invalid module format


Где хомутнул?


PM MAIL   Вверх
MAKCim
Дата 17.1.2011, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



посмотрите сначала, что пишется в /var/log/messages

Добавлено через 1 минуту и 18 секунд
хм

Цитата(Vicul @  17.1.2011,  11:19 Найти цитируемый пост)
2. т.к. дерева дистрибутива   в usr/src не оказалось, скачал все c kernel.org - linux-2.6.31.14.tar.bz2.

нельзя
у suse свои патчи, накладываемые на ванильное ядро

установите через yast пакет kernel-sources


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Vicul
Дата 17.1.2011, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 27.4.2009

Репутация: нет
Всего: нет



Цитата

установите через yast пакет kernel-sources 


спасибо сейчас попробую
PM MAIL   Вверх
Vicul
Дата 17.1.2011, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 27.4.2009

Репутация: нет
Всего: нет



скачнул kernel-source, перенес  в рабочий каталог, там запустил 

make oldconfig && make prepare

Запускаю make, получаю ошибку

Цитата

linux-srv:/home/temp # make -C /home/temp/linux SUBDIRS=$PWD modules
make: Entering directory `/home/temp/linux'

  WARNING: Symbol version dump /home/temp/linux/Module.symvers
           is missing; modules will have no dependencies and modversions.

  CC [M]  /home/temp/hello.o
  Building modules, stage 2.
  MODPOST 1 modules
/bin/sh: scripts/mod/modpost: Нет такого файла или каталога
make[1]: *** [__modpost] Ошибка 127
make: *** [modules] Ошибка 2
make: Leaving directory `/home/temp/linux'



PM MAIL   Вверх
Vicul
Дата 17.1.2011, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 27.4.2009

Репутация: нет
Всего: нет



модуль собрался, после того как в дереве прогнал следующие команды 

Код

make oldconfig && make prepare
make modules-prepare
  

Но сам модуль попрежнему выдает ошибку

Цитата

linux-srv:/home/temp # insmod hello.ko
insmod: error inserting 'hello.ko': -1 Invalid module format
 
PM MAIL   Вверх
null56
Дата 17.1.2011, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 4
Всего: 12



ты поставил исходники от той же версии ядра, что у тебя и запущено?
PM MAIL   Вверх
Vicul
Дата 17.1.2011, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 27.4.2009

Репутация: нет
Всего: нет



ставил через Yast

2.6.31.14-0.6.1 


по uname:

Linux linux-srv 2.6.31.14-0.6-default #1 SMP 2010-12-10 11:18:32 +0100 i686 i686 i386 GNU/Linux


Это сообщение отредактировал(а) Vicul - 17.1.2011, 17:13
PM MAIL   Вверх
null56
Дата 17.1.2011, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 4
Всего: 12



1) MAKCim, тебя просил сообщение dmesg глянуть, что пишет по поводу загрузки, какие ошибки
2) прогрипуй свой конфиг ядра на параметры
Цитата

CONFIG_MODULES
CONFIG_MODVERSIONS

PM MAIL   Вверх
fish9370
Дата 18.1.2011, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 2
Всего: 1



и modinfo выведи..


--------------------
undefined
PM MAIL WWW ICQ   Вверх
Vicul
Дата 18.1.2011, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 27.4.2009

Репутация: нет
Всего: нет



1) MAKCim, тебя просил сообщение dmesg глянуть, что пишет по поводу загрузки, какие ошибки

Цитата

Jan 18 16:39:40 linux-srv kernel: [ 2617.618602] hello: no symbol version for module_layout


2)прогрипуй свой конфиг ядра на параметры

CONFIG_MODULES=y
CONFIG_MODVERSIONS=y

3)modinfo

Цитата

linux-srv:/home/temp # modinfo hello.ko
filename:       hello.ko
license:        Dual BSD/GPL
srcversion:     BC5737CE5ECC73BE492AD3B
depends:        
vermagic:       2.6.31.14-0.6-default SMP mod_unload modversions 586TSC 


Это сообщение отредактировал(а) Vicul - 18.1.2011, 18:05
PM MAIL   Вверх
MAKCim
Дата 18.1.2011, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Vicul
возьми config из /boot и кинь в /usr/src/linux под именем .config

потом начни собирать ядро
make

как только пойдет компиляция, через CTRL+C выруби процесс

и попробуй заново скомпилировать моудль


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
null56
Дата 18.1.2011, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 4
Всего: 12



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

MAKCim, может ему лучше полностью сделать make bzImage && make modules? без установки обоих

Добавлено через 9 минут и 44 секунды
еще принято, но не обязывает указывать префиксы перед функциями загрузки и выгрузки модуля
Код

static int __init hello_init(void)
//...
static void __exit hello_exit(void)

но это не решит твоей проблемы, это я так к слову
PM MAIL   Вверх
MAKCim
Дата 18.1.2011, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(null56 @  18.1.2011,  19:32 Найти цитируемый пост)
может ему лучше полностью сделать make bzImage && make modules? без установки обоих

нет
тут важно выполнение начальных скриптов до компиляции


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Vicul
Дата 19.1.2011, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 27.4.2009

Репутация: нет
Всего: нет



Вообщем такая фигня, при компиляции модуля make ругается на отсутсутствие файл Module.symvers в дереве. Этот файл создается при сборке ядра,  которой у меня и не могло быть. 
Вообщем, нашел я этот файл в каталогах и перебросил в корень  дерева, все заработало. 

Всем спасибо! 

Это сообщение отредактировал(а) Vicul - 19.1.2011, 11:37
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0920 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.