Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Сборка модуля под ядро  (Прочитано 10194 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« : 09-02-2007 05:58 » 

Сборка модуля под ядро проходит без ошибок.

Но при загрузке модуля командой:
insmod ./chardev.o

Выдает следующую ошибку:
./chardev.o: ./chardev.o: unresolved symbol register_chrdev_Rfbdfd528

Подскажите, как бороться с этим?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 09-02-2007 06:10 » 

Serg79, depmod сделал?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 09-02-2007 06:41 » 

Serg79, depmod сделал?
Делал, не помогло, сообщение об ошибке идентичное. Функция register_chrdev находиться в самом ядре.

План действий был такой:
1 - установил (с CD) исходники ядра из которых собиралось ядро дистрибутива (думаю, что те самые Улыбаюсь )
2 - загрузил файл конфигурации ядра из /boot/.config
3 - собрал ядро (модули не стал собирать)

Собрал свой тестовый модуль командой:
make -C /usr/src/linux SUBDIRS=$PWD modules
Сборка происходит без ошибок.

Вот исходный текст вызывающий register_chrdev:
Код:
int init_module(void)
{
    number = register_chrdev(0,DEVICE_NAME,&fops);
    if( number < 0 ) {
        printk("Registering the character device failed with %d\n",number);
        return Major;
    }
    ...
    return 0;
}

Что самое интересно, все остальные связи разрешаються без проблем, даже unregister_chrdev.

Вначале думал, что исходное ядро в системе собранно другой версией GCC, пересобирал ядро версиями: 2.95, 2.96, 3.3, не помогло, эффект тот же. Кстати, я заметил такую вешь, адреса функций при этом не меняються.

Я думаю, может они поверх этого ядра еще какие то патчи накладывали и поэтому эта функция сдвинулась.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 09-02-2007 07:38 » new

Суффикс "_Rfbdfd528" указывает на включенный контроль версии сборки.

Ядро собирать было не нужно - модули собираются по заголовкам.
Переконфигурация (если ты ее делал) изменит версию и модуль будет не совместим.
Попробуй еще раз скопировать конфиг и собрать модуль.
Т.к. в модуле используются пути типа <linux/...>, то в /usr/include/linux должны лежать правильные заголовки (от твоего ядра) и конфиг.
Дистрибутивы, совместимые с RH, обычно ставят заголовки отдельно от кода ядра, но если ядро меняешь ядро, то и заголовки надо поменять или заменить директории linux и asm в /usr/include на симлинки к соотв. директориям в исходниках.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines