Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274

Запуск функции из модуля ядра

29.02.2024, 22:33. Показов 5237. Ответов 44
Метки api (Все метки)

Студворк — интернет-сервис помощи студентам
привет форум. знает кто-нибудь самый простой способ запустить функцию из пользовательского пространства F(), в коде модуля ядра?


C++
1
 void F(){std::cout << "hi" ;};

codeMy_module:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kmod.h>
 
MODULE_LICENSE( "GPL" );
 
static int __init mod_entry_func( void ){                 ;    }
 
 
static void __exit mod_exit_func( void ) { ;       }
 
module_init( mod_entry_func );
module_exit( mod_exit_func );
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.02.2024, 22:33
Ответы с готовыми решениями:

запуск модуля из модуля (Sub test() CommandBars(1).Enabled = False load module2.test1 End Sub)
Sub test() CommandBars(1).Enabled = False load module2.test1 End Subвот что-то типа такого и не воркает.

Подключение модуля ядра
Здравствуйте. Необходимо подключить отдельно собранный модуль (usbserial) в рабочую систему. Исходники ядра на котором работает система...

Разработка модуля ядра Linux
В Linux'е не шибко спец, однако есть такая задача: разработать модуль ядра... Вот, к примеру, простой hello world (NASM), однако как его...

44
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
07.03.2024, 12:38  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Azathtot Посмотреть сообщение
В чем разница-то?
в полуправде





исходники ядра есть есть и ссылка на них. спрашивать как вы получили эти команды смысла нет, потому что опять скажите так что нужно будет дофантазировать. вобще для новичков я напишу что пытался make -n но это не дало результатов.
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
07.03.2024, 12:48
Цитата Сообщение от pcmax Посмотреть сообщение
спрашивать как вы получили эти команды смысла нет,
Эм...а вы внимательно читали мои посты?
А вообще, на самом деле получить это строки нет ничего сложного. СОздайте Makefile, KConfig, сбилдите модуль через make и изучите файлы *.cmd
Могу даже приложить эти файлы
KConfig
Code
1
2
config MM
    tristate "My Module"
Makefile
Code
1
2
3
4
MODULE_NAME := MM
 
obj-m += $(MODULE_NAME).o
$(MODULE_NAME)-objs += module.o
0
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
07.03.2024, 23:42
Лучший ответ Сообщение было отмечено easybudda как решение

Решение

pcmax, вам показали рабочий вариант, а вы хамите. Вот вам вариант с примером, с которого вы можете начать свою задачу...
Makefile:
Code
1
2
3
4
5
6
7
8
9
obj-m += my_test_module.o
 
PWD := $(CURDIR)
 
all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
 
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Не забывайте, что в Makefile отступы делаются именно табуляцией, а не пробелами.

my_test_module.c:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <linux/init.h>
#include <linux/miscdevice.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/printk.h>
 
static ssize_t my_test_module_read(struct file *file, char __user *buffer,
                   size_t count, loff_t *ppos)
{
    char buf[] = "obl`w\x1fy`mtc`\0379(\t";
    ssize_t ret;
    int i;
 
    if (count < sizeof(buf))
        return -EINVAL;
 
    if (*ppos)
        return 0;
 
    for (i = 0; i < sizeof(buf); i++)
        buf[i]++;
 
    ret = copy_to_user(buffer, buf, sizeof(buf));
    *ppos += sizeof(buf);
 
    return sizeof(buf);
}
 
static long my_test_module_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
{
    printk("ioctls are not supported yet\n");
 
    return -ENOTTY;
}
 
static const struct file_operations my_test_module_fops = {
    .owner      = THIS_MODULE,
    .read       = my_test_module_read,
    .unlocked_ioctl = my_test_module_ioctl,
    .llseek     = no_llseek,
};
 
static struct miscdevice my_test_module_misc = {
    .fops       = &my_test_module_fops,
    .minor      = MISC_DYNAMIC_MINOR,
    .mode       = 0444,
    .name       = "my_test_module",
};
 
module_misc_device(my_test_module_misc);
 
MODULE_LICENSE("GPL");
Для сборки просто запустите:
Bash
1
make
Для операционной системы должны быть установлены хедеры ядра, что бы можно было собирать модули. Например, у меня на Manjaro это пакет linux66-headers

Для загрузки модуля:
Bash
1
sudo insmod my_test_module.ko
Для проверки:
Bash
1
cat /dev/my_test_module
Для выгрузки модуля из памяти:
Bash
1
rmmod my_test_module
0
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
08.03.2024, 00:17  [ТС]
Humanoid,

То он может сразу идти топиться/вешаться/стреляться. Потому что так с головой не дружить - непростительно.

вот это адресовали мне и я получается хам?

за ваш пример спасибо, но так я и сам могу. это я непросил. я думаю нам лучше не продолжать эту тему. если кому-то будет интересно , он сможет воспользоваться предоставленными примерами. мне тема в таком русле
Code
1
cc -nostdinc -isystem путь к include gcc -I /usr/local/bin/DMD/arch  -I /usr/local/bin/DMD/linux -DMODULE  -DKBUILD_BASENAME='"имя модуля"' -DKBUILD_MODNAME='"имя модуля"' -c -o module.o module.c
ну типа показали куда копать.
такая тема , мягко сказать не полезна. давайте не будет все валить на меня как всегда. просто разойдемся и все. я насильно никого в эту тему не тянул. наминусовали под 90, обвинили в хакерстве, наплели дичь и я же крайний. идите с исусом вобщем. всего вам хорошего.
0
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
08.03.2024, 12:57
Цитата Сообщение от pcmax Посмотреть сообщение
вот это адресовали мне и я получается хам?
Извиняюсь, там была долгая переписка и я её не читал. Значит вы оба молодцы

Цитата Сообщение от pcmax Посмотреть сообщение
это я непросил
Вы так сформулировали задачу, что непонятно, что именно вам нужно. Я решил, что вам надо из user-space вызвать kernel-space'вскую функцию. Для этого проще всего было бы использовать ioctl.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.03.2024, 12:57
Помогаю со студенческими работами здесь

Логгирование работы модуля ядра
Необходимо вести логгирование работы модуля (назовём его test) в раздел /sys/module/test/stat/volumes. Каким образом это можно осуществить?...

Динамическое подключение модуля ядра
Доброго времени суток. Для выполнения лабораторной работы, необходимо подключить драйвер устройства командой kldload Нахожу устройство...

make модуля ядра needed help)
Всем привет. Начал учить написание модулей для ядра и как ни странно сталкнулся со сложностями). Читаю: программирование модулей ядра...

Компиляция и подключение модуля ядра linux
Привет форумчане! Может быть кто-то уже знает правильный workflow для сабжа? Немного контекста: - поставил Ubuntu Server 22.04 LTS ...

Написание модуля ядра под ардуину
Доброго времени суток. Предстала передо мной недавно задача - написать модуль ядра Linux(на данный момент 3.2), который станет драйвером...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru