Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274

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

29.02.2024, 22:33. Показов 5438. Ответов 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
11560 / 4354 / 453
Регистрация: 12.06.2008
Сообщений: 12,456
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
11560 / 4354 / 453
Регистрация: 12.06.2008
Сообщений: 12,456
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru