Помогите с make файлом для модуля ядра (ядро 2.6) в 2.4 make выглядел так --------------------------------------- all: aaa.o CC=gcc MODCFLAGS := -Wall -isystem /lib/modules/$(shell uname -r)/build/include -DMODULE -D__KERNEL__ -DLINUX bbb.o: bbb.c /lib/modules/$(shell uname -r)/build/include/linux/version.h $(CC) $(MODCFLAGS) -c bbb.c aaa.o: bbb.o ccc.o ld -r -o aaa.o bbb.o ccc.o clean: rm -f aaa.o bbb.o ---------------------------------------- объектник ccc.o существует и сделан насмом, в 2.6 процесс мэйка поменялся и вроде как надо пользовать вроде того что ниже(возможно что то напутал), чтоб учитывались текущие настройки ядра, вот и не понятно как в модуль с линковать сторонний объектник, Памажите, заранее спасибо. ----------------------------------------------------------- ifneq ($(KERNELRELEASE),) obj-y := aaa.o obj-m += aaa.o else KDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules clean: rm -f bbb.o bbb.ko aaa.ko endif ----------------------------------------------
в принципе тебе никто не мешает: 1) взять какой-нибудь ccc.mod.c (в *.mod.c находится объявление и инициализация структуры module для этого модуля), подправить его под свои нужды, скомпилить ручками и линковать со своими *.o как обычно 2) подлинковать его уже к готовому *.ko (получится, если функции инициализации модуля находятся не в нем(ccc.o) а если и в нем, то не вызываются напрямую как init_module()/cleanup_module()).
2 int_0dh 2) пробывал в ручную прилинковать, линкуется, но когда делаю insmod говорит -1 Unknown symbol in module функция(та которая отдельно компилилась nasmом) косвенно вызывается из init_module вариант 1) по подробнее можешь раписать на примере?
У тебя есть 2 файла: aaa_base.c и ccc.o. Последний - это уже заранее скомпилирован nasm'ом ccc.asm Тогда 1) mv ccc.o ccc.o_shipped 2) Makefile должен быть вида ifneq ($(KERNELRELEASE,)) obj-m := aaa.o aaa-y := aaa_base.o ccc.o else ... ну, далее, всё как у тебя. Получишь модуль aaa.ko Имхо, было бы проще сразу компилировать ccc.asm в процессе создания aaa.ko Для этого просто немного подправить Makefile надо. Документацию к kbuild смотри в Documentation/kbuild в исходниках ядра.
после компиляции ядра обычно остается фигова туча файлов *.mod.c выглядят они как ...... struct module __this_module __attribute__((section(".gnu.linkonce.this_module"))) = { .name = __stringify(KBUILD_MODNAME), .init = init_module, .exit = cleanup_module, }; тебе нужно отредактировать эту структурку (например поле name - так его будут звать в ядре и так он будет виден по cat /proc/modules) далее ты компилируешь его как обычно cc -Wall -O2 -D__KERNEL__ -DMODULE -I /usr/src/linux-<some.number.here>/include -c ccc.mod.c а далее ты компилишь также все остальное и линкуешь ld -r -melf_i386 ccc.mod.o ccc.o aaa.o bbb.o -o aaa.ko
2 Bert в документации к kbuild не написано как заменить ассемблер Gas на другой переменная AS=nasm некатит + obj-m := aaa.o aaa-y := aaa_base.o ccc.o нужно писать obj-m := aaa.o aaa-objs := aaa_base.o ccc.o
Рак мозга какой-то. Способностей моих явно не хватает. Чето я так с этим гемором и не справился, нарно быстрее будет под Gas переписать ассемблерный код. Всем спаисб.