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

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

29.02.2024, 22:33. Показов 5028. Ответов 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
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
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
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
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
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru