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

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

29.02.2024, 22:33. Показов 5850. Ответов 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
11561 / 4356 / 453
Регистрация: 12.06.2008
Сообщений: 12,458
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
11561 / 4356 / 453
Регистрация: 12.06.2008
Сообщений: 12,458
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
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru