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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с вызовом clone() из модуля, implicit declaration of function 'clone' 
V
    Опции темы
RasenHerz
Дата 30.3.2008, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вот код с комментариями (основную часть не имеющую отношения к делу опустил):
Код

#include <linux/kernel.h>
#include <linux/module.h>
#include <asm/current.h>
#include <asm/thread_info.h>
#include <linux/sched.h>
#include <linux/unistd.h>
#include <linux/mm.h>

#define STACKSIZE 4096 //4 Кб должно хватить, т.к. после создания процесса он будет замещен

typedef void (*CH_CALL)(void*);
typedef void** CH_STACK;
typedef void* CH_DATA;

pid_t my_mod_create_child(CH_CALL, CH_DATA, int);
int my_mod_child_fn(CH_DATA);

int init_module(){
  my_mod_create_child((CH_CALL)&my_mod_child_fn, 0, STACKSIZE);
  return 0;
}

void cleanup_module(void){
}

pid_t my_mod_create_child(CH_CALL call_adr, CH_DATA data, int stack_size)
{
  CH_STACK stack = (CH_STACK)kmalloc(stack_size,GFP_KERNEL); //выделяю в ядре память для стека этого процесса.
  if(!stack) return -1;
  stack = (stack_size + (char*)stack);
  if(clone(call_adr, stack, SIGCHLD, data) < 0) return -1; //вот тут то и вся проблема: компилятор выдает "implicit declaration of function 'clone'"
                                                           //хотя все заголовочные файлы подключены, думаю здесь какая-то заморочка как с malloc
                                                           //(напоминаю, функция malloc заменена на kmalloc в ядрах версии >= 2.6)
  return 0;
}

MODULE_LICENSE("GPL");


совсем не пойму, почему компилятор не может найти ф-цию clone()! такая же ерунда и с exec(). вроде подключил все необходимые заголовочные файлы. может кто сталкивался с такой проблемой?
PM MAIL   Вверх
kirjanov
Дата 30.3.2008, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2006
Где: Dark wood of erro r

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



Насколько мне известно, (поправте если что), в ядре для создания процессов используется функция do_fork, которая вызывается из функций sys_fork, sys_vfork и sys_clone. Для создания  котекста процесса в ядре существуют аппаратно-зависимый интерфейс в виде функции:
Код

int kernel_thread (int (*fn)(void *), void * arg, unsigned long flags);

То же дело обстоит с функцией exec и соответствующим ей вызовом sys_execve.
PM MAIL   Вверх
MAKCim
Дата 30.3.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(kirjanov @  30.3.2008,  19:16 Найти цитируемый пост)
аппаратно-зависимый интерфейс в виде функции:

есть еще более обобщенная функция kthread_create() из kernel/kthread.c
которая позволяет кроме всего прочего присвоить символьный идентификатор порожденному процессу и связать его с определенным процессором 
Цитата(kirjanov @  30.3.2008,  19:16 Найти цитируемый пост)
То же дело обстоит с функцией exec и соответствующим ей вызовом sys_execve. 

да, do_execve()
но т. к она (так же как и do_fork()) не экспортируется, отобразить исполняемый файл/библиотеку не удасться


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

PM MAIL   Вверх
kirjanov
Дата 30.3.2008, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2006
Где: Dark wood of erro r

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



Цитата

но т. к она (так же как и do_fork()) не экспортируется

Что и не удивительно  smile 
PM MAIL   Вверх
MAKCim
Дата 30.3.2008, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(kirjanov @  30.3.2008,  20:13 Найти цитируемый пост)
Что и не удивительно

почему?


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

PM MAIL   Вверх
kirjanov
Дата 30.3.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2006
Где: Dark wood of erro r

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



Мое мнение, что эта функция относится в кухне подсистемы управления процессам, и не должна использоваться загружаемыми модулями.  
PM MAIL   Вверх
MAKCim
Дата 30.3.2008, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(kirjanov @  30.3.2008,  20:40 Найти цитируемый пост)
Мое мнение, что эта функция относится в кухне подсистемы управления процессам, и не должна использоваться загружаемыми модулями.   

именно по поводу do_fork() не согласен
она позволила бы более гибко создавать процессы
kernel_thread() и kthread_create() довольно абстрактны


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

PM MAIL   Вверх
RasenHerz
Дата 31.3.2008, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а в каком заголовочном файле декларирована sys_clone()??? в linux/shed.h ее нет...
PM MAIL   Вверх
MAKCim
Дата 31.3.2008, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



RasenHerz
arch/<arch>/kernel/process.c
asm/unistd.h


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

PM MAIL   Вверх
kirjanov
Дата 31.3.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 22.1.2006
Где: Dark wood of erro r

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



RasenHerz
я не открываю Америку, но в директории с исходным кодом можно, например, набирать grep -nr "some text to search" . Помогает  smile 
PM MAIL   Вверх
RasenHerz
Дата 1.4.2008, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



кто ж знал что она не в *.h файле )))
PM MAIL   Вверх
MAKCim
Дата 1.4.2008, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(RasenHerz @  1.4.2008,  06:27 Найти цитируемый пост)
кто ж знал что она не в *.h файле ))) 

объявление в .h файле

Добавлено через 44 секунды
RasenHerz
рекомендую ознакомиться с этой системой


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

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


Новичок



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

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



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

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

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


 




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


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

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