[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