Библиотека сайта rus-linux.net
Цилюрик О.И. Модули ядра 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, ... - которые определяются специальными модульными макросами.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Наш первый модуль ядра | Загрузка и исполнение |