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

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

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

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

mmap - это просто обертка в glibc над соответствующим syscall.
В принципе, все явные переходы в ядро производятся через механизм syscall.
У вас есть 3 варианта.
1) Добавить свой syscall который отображается в вашу функцию, и написать к нему обертку для юзерспейса
2) Использовать существующий syscall в котором задействуются обработчики событий для вызова вашей функции в качестве обработчика.
3) Если чисто для hello world, то напишите простейший модуль ядра в функции инициализации которого вызывайте ваш код. Запуск через insmod :)
1 требует патчировать ядро, соответственно вообще довольно сложно тестировать.
2 можно сделать с помощью модуля (например модуль экспортирует виртуальный файл, и файловые операции с ним мэпятся на ваши функции)
3 - простейший способ но чисто академический
...
Рейтинг: 0 / 0
14.12.2014, 20:49
    #38833600
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой самый простой способ написать функцию работающую в kernel-space в Linux?
Код: 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
14.12.2014, 23:02
    #38833646
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой самый простой способ написать функцию работающую в kernel-space в Linux?
Anatoly MoskovskyВася Уткин,

Краткий ответ - простого способа нет :)
...как же тяжело жить вам там, в вашем линуксе ;))
...
Рейтинг: 0 / 0
14.12.2014, 23:15
    #38833650
Вася Уткин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой самый простой способ написать функцию работающую в kernel-space в Linux?
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
15.12.2014, 02:49
    #38833692
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой самый простой способ написать функцию работающую в kernel-space в Linux?
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
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Какой самый простой способ написать функцию работающую в kernel-space в Linux? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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