Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Модули ядра Linux
Назад Вперед

Сборка модуля

Для сборки созданного модуля используем скрипт сборки Makefile, который будет с минимальными изменениями повторятся при сборке всех модулей ядра:

Makefile :

	CURRENT = $(shell uname -r) 
	KDIR = /lib/modules/$(CURRENT)/build 
	PWD = $(shell pwd) 
	DEST = /lib/modules/$(CURRENT)/misc 

	TARGET = hello_printk 
	obj-m      := $(TARGET).o 

	default:
		$(MAKE) -C $(KDIR) M=$(PWD) modules 

	clean:
	       @rm -f *.o .*.cmd .*.flags *.mod.c *.order
	       @rm -f .*.*.cmd *.symvers *~ *.*~ TODO.*
	       @rm -fR .tmp*
	       @rm -rf .tmp_versions

- цель сборки clean — присутствует в таком и неизменном виде практически во всех далее приводимых файлах сценариев сборки (Makefile), и не будет там далее показываться.

Делаем сборку модуля:

$ make

	make -C /lib/modules/2.6.32.9-70.fc12.i686.PAE/build M=/home/olej/2011_WORK/Linux-kernel/examples 
	make[1]: Entering directory `/usr/src/kernels/2.6.32.9-70.fc12.i686.PAE' 
	  CC [M] /home/olej/2011_WORK/Linux-kernel/examples/own-modules/1/hello_printk.o
	  Building modules, stage 2. 
	  MODPOST 1 modules 
	  CC     /home/olej/2011_WORK/Linux-kernel/examples/own-modules/1/hello_printk.mod.o
	  LD [M] /home/olej/2011_WORK/Linux-kernel/examples/own-modules/1/hello_printk.ko
	make[1]: Leaving directory `/usr/src/kernels/2.6.32.9-70.fc12.i686.PAE' 

На этом модуль создан. Начиная с ядер 2.6 расширение файлов модулей сменено с *.o на *.ko:

$ ls *.ko

hello_printk.ko

Как мы детально рассмотрим далее, форматом модуля является обычный объектный ELF формат, но дополненный в таблице внешних имён некоторыми дополнительными именами, такими как : __mod_author5, __mod_license4, __mod_srcversion23, __module_depends, __mod_vermagic5, ... - которые определяются специальными модульными макросами.


Предыдущий раздел: Оглавление Следующий раздел:
Наш первый модуль ядра   Загрузка и исполнение