#linux #ассемблер #ядро
В Linux'е не шибко спец, однако есть такая задача: разработать модуль ядра... Вот, к примеру, простой hello world (NASM), однако как его собрать и запустить? Именно как модуль ядра! BITS 32 GLOBAL main EXTERN printk SECTION .data Hello db 'Hello world!',0 SECTION .text main: push Hello call printk add esp,4 ret После компиляции nasm'ом gcc собирать его отказывается, говоря, что понятия не имеет ни о каком printk. Что нужно сделать, чтобы собрать и запустить этот код именно как модуль ядра? upd 05.06.2017: Создал несколько файлов, однако это всё не работает. Где косяки и как их поправить – не знаю... :(( Может, кто помочь с этим? module.c #include// Необходим для любого модуля ядра extern void MyProc(void); int init_module(void) { MyProc(); return 0; } void cleanup_module(void) { } main.asm BITS 32 GLOBAL MyProc EXTERN printk SECTION .data Hello db 'Hello word!',0 SECTION .text MyProc: push Hello call printk add esp,4 ret makefile obj-m += test.o test-objs := module.o main.o $(KBUILD_EXTMOD)/main.o: main.asm nasm -f elf -o $@ $^ compile.sh make -C /usr/src/linux-headers-`uname -r` SUBDIRS=$PWD modules Что не так? Хотя... вроде заработало... Только теперь непонятно как это запустить... Пишу sudo insmod test.ko – в ответ тишина. Где Hello world! ? Файла /var/log/messages у меня нет вообще...
Ответы
Ответ 1
как его собрать и запустить? Именно как модуль ядра! Основное отличие сборки любого приложения для адресного пространства пользователя от сборки модуля для адресного пространства ядра, заключается в том, что приложение - самостоятельная сущность, а модуль - работает под управлением ядра. Из этого следует, что для компиляции модуля Вам нужно иметь исходные тексты (как минимум - заголовки) ядра, а для его компоновки (т.е. получения файла *.ko) необходимы объектные коды самого ядра. Существует определённая технология сборки самого ядра и его модулей. С ней вкратце можно ознакомиться вот здесь: Разработка модулей ядра Linux (Алексей Соловьев) Более профессионально всё изложено вот здесь: Разработка модулей ядра Linux (Олег Цилюрик) (цикл статей на IBM developerWorks) Но там 36 глав... Вам для разбега хватит и первой главы: Разработка модулей ядра Linux: Часть 1. Первые шаги И хотел бы заметить, что ядро почти на 100% написано на С. На ассемблере пишут только те части ядра, которые существенно зависят от архитектуры. Например - функции работы с регистрами устройств ввода/вывода в драйверах.
Комментариев нет:
Отправить комментарий