[d-kernel] kernel policy (final?)
Alexander Bokovoy
=?iso-8859-1?q?a=2Ebokovoy_=CE=C1_sam-solutions=2Enet?=
Вт Май 13 19:30:04 MSD 2003
On Tue, May 13, 2003 at 07:04:50PM +0400, Dmitry V. Levin wrote:
> При наличии /usr/include/linux-default/include следует использовать его,
> если все остальные методы не прошли.
Согласен.
Теперь еще одно предложение для Policy. Касается оно дополнительных
модулей, не входящих в основное ядро. Идея исходит от RedHat и мне она
видится здравой. Я ее немного развил и вот что получилось:
1. Все дополнительные модули, не входящие в основное ядро, размещаются в
linux/drivers/addon/<имя модуля>/
2. Каждый такой модуль содержит дополнительный файл
linux/drivers/addon/<имя модуля>/Config.in.in с необходимой
строчкой для linux/drivers/addon/Config.in, например:
*** linux/drivers/addon/iscsi-cisco/Config.in.in:
-->8---------------------------------------->8------------------------------------->8------
dep_tristate ' iSCSI support (scsi-over-network), from CISCO' CONFIG_SCSI_ISCSI_CISCO $CONFIG_SCSI m
--8<----------------------------------------8<-------------------------------------8<------
Также, каждый модуль имеет свой собственный Makefile. Например, для
приведенного выше iscsi-cisco он может быть таким:
*** linux/drivers/addon/iscsi-cisco/Makefile:
-->8---------------------------------------->8------------------------------------->8------
#
# Makefile for the Cisco iSCSI client
#
# Note! Dependencies are done automagically by 'make dep', which also
# removes any old dependencies. DON'T put your own dependencies here
# unless it's something special (ie not a .c file).
#
# Note 2! The CFLAGS definitions are now in the main makefile...
O_TARGET := iscsi_mod.o
EXTRA_CFLAGS := -I../../scsi -DLINUX
ifeq ($(wildcard $(TOPDIR)/kernel/ksyms.c),$(TOPDIR)/kernel/ksyms.c)
# check for the presence of certain kernel symbols, and compile accordingly
SET_USER_NICE:=$(shell grep '^[ \t]*EXPORT_SYMBOL(set_user_nice)' $(TOPDIR)/kernel/ksyms.c 2>/dev/null )
ifneq ($(SET_USER_NICE),)
EXTRA_FLAGS += -DHAS_SET_USER_NICE=1
endif
REPARENT_TO_INIT:=$(shell grep '^[ \t]*EXPORT_SYMBOL(reparent_to_init)' $(TOPDIR)/kernel/ksyms.c 2>/dev/null )
ifneq ($(REPARENT_TO_INIT),)
EXTRA_FLAGS += -DHAS_REPARENT_TO_INIT=1
endif
endif
obj-y := iscsi.o iscsi-probe.o iscsi-login.o iscsiAuthClient.o iscsiAuthClientGlue.o md5.o iscsi-crc.o
obj-m := $(O_TARGET)
include $(TOPDIR)/Rules.make
--8<----------------------------------------8<-------------------------------------8<------
Понятное дело, что Makefile у каждого будет такой Makefile различаться,
важно, что каждый модуль будет собираться по стандартной ядерной схеме.
3. Небольшой скрипт будет проходить по подкаталогам первого уровня в
linux/drivers/addon/ и генерировать
linux/drivers/addon/{Config.in,Makefile} следующего содержания:
*** linux/drivers/addon/Config.in:
-->8---------------------------------------->8------------------------------------->8------
#
# device driver configuration for add-on drivers
#
mainmenu_option next_comment
comment 'Additional device driver support'
<СЮДА ВСТАВЛЯЮТСЯ Config.in.in из поддиректорий>
endmenu
--8<----------------------------------------8<-------------------------------------8<------
*** linux/drivers/addon/Makefile:
-->8---------------------------------------->8------------------------------------->8------
# File: drivers/addon/Makefile
#
# Makefile for the device drivers that are not in the main tree but added
# to the Red Hat linux kernel
#
obj-y :=
obj-m :=
obj-n :=
obj- :=
mod-subdirs := <СПИСОК КАТАЛОГОВ>
O_TARGET := addon.o
# All of the (potential) objects that export symbols.
# This list comes from 'grep -l EXPORT_SYMBOL *.[hc]'.
export-objs :=
list-multi :=
<СЮДА ВСТАВЛЯЕТСЯ СТРОКИ С ПЕРЕЧИСЛЕНИЕМ КАТАЛОГОВ ВИДА:>
subdir-$(CONFIG_SCSI_ISCSI_CISCO) += iscsi-cisco
include $(TOPDIR)/Rules.make
clean:
rm -f core *.o *.a *.s *~
--8<----------------------------------------8<-------------------------------------8<------
4. linux/drivers/addon/Config.in включается в linux/arch/<АРХИТЕКТУРА>/config.in
5. linux/drivers/addon добавляется в список поддерживаемых в процессе
сборки целей в linux/drivers/Makefile (subdir-y += addon).
Преимущества схемы:
- централизованное управление всеми добавками через "Additional
device drivers support" в системе конфигурации ядра
- легкость интеграции -- для большинства незатрагивающих другие
подсистемы ядра модулей не надо ничего патчить, только приложить
два тривиальных Config.in.in и Makefile
- автоматизация процесса интеграции модулей -- не нужно патчить
соответствующие Config.in и Makefile в подсистемах ядра
--
/ Alexander Bokovoy
---
I like your game but we have to change the rules.
Подробная информация о списке рассылки devel-kernel