powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Какой самый простой способ написать функцию работающую в kernel-space в Linux?
6 сообщений из 6, страница 1 из 1
Какой самый простой способ написать функцию работающую в kernel-space в Linux?
    #38833159
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какой самый простой способ написать функцию работающую в kernel-space в Linux, например, собственную реализацию mmap()?
Куда её положить, и как её вызвать, чтобы она вызвалась именно в kernel-space? Т.е. hello world для kernel-space.
...
Рейтинг: 0 / 0
Какой самый простой способ написать функцию работающую в kernel-space в Linux?
    #38833596
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткин,

Краткий ответ - простого способа нет :)

Чуть подробнее:

Юзерспейс не может напрямую вызывать функции в контексте ядра.

mmap - это просто обертка в glibc над соответствующим syscall.
В принципе, все явные переходы в ядро производятся через механизм syscall.
У вас есть 3 варианта.
1) Добавить свой syscall который отображается в вашу функцию, и написать к нему обертку для юзерспейса
2) Использовать существующий syscall в котором задействуются обработчики событий для вызова вашей функции в качестве обработчика.
3) Если чисто для hello world, то напишите простейший модуль ядра в функции инициализации которого вызывайте ваш код. Запуск через insmod :)
1 требует патчировать ядро, соответственно вообще довольно сложно тестировать.
2 можно сделать с помощью модуля (например модуль экспортирует виртуальный файл, и файловые операции с ним мэпятся на ваши функции)
3 - простейший способ но чисто академический
...
Рейтинг: 0 / 0
Какой самый простой способ написать функцию работающую в kernel-space в Linux?
    #38833600
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include <linux/module.h>
#include <linux/kernel.h>

static int __init hello_init(void)
{

    printk(KERN_INFO "Hello world\n");
    return 0;
}

static void __exit hello_exit(void)
{
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");



Сообщения смотреть в dmesg :)
...
Рейтинг: 0 / 0
Какой самый простой способ написать функцию работающую в kernel-space в Linux?
    #38833646
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВася Уткин,

Краткий ответ - простого способа нет :)
...как же тяжело жить вам там, в вашем линуксе ;))
...
Рейтинг: 0 / 0
Какой самый простой способ написать функцию работающую в kernel-space в Linux?
    #38833650
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include <linux/module.h>
#include <linux/kernel.h>

static int __init hello_init(void)
{

    printk(KERN_INFO "Hello world\n");
    return 0;
}

static void __exit hello_exit(void)
{
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");



Сообщения смотреть в dmesg :)
Спасибо!
А собирать по обычному?
Makefilekernel_helloworld: main.o
gcc -lm -O3 -o kernel_helloworld main.o

main.o : main.c
gcc = gcc -O3 -c main.c
...
Рейтинг: 0 / 0
Какой самый простой способ написать функцию работающую в kernel-space в Linux?
    #38833692
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychкак же тяжело жить вам там, в вашем линуксе ;))
Это еще не тяжело.
См. ниже :)
А вообще, можно подумать в Винде проще это сделать :)

Вася УткинА собирать по обычному?
Ага, щазз

Makefile:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
obj-m += kernel_helloworld.o

kernel_helloworld-objs = \
  main.o \


TARGET=kernel_helloworld.ko

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean



И на компе должно быть скомпилировано ядро из исходников либо установлен пакет kernel-devel
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Какой самый простой способ написать функцию работающую в kernel-space в Linux?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]