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

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

29.02.2024, 22:33. Показов 5572. Ответов 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 / 4355 / 453
Регистрация: 12.06.2008
Сообщений: 12,457
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 / 4355 / 453
Регистрация: 12.06.2008
Сообщений: 12,457
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
Ответ Создать тему
Новые блоги и статьи
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru