From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Tue, 13 May 2003 18:30:04 +0300 From: Alexander Bokovoy To: devel-kernel@altlinux.ru Subject: Re: [d-kernel] kernel policy (final?) Message-ID: <20030513153004.GA11776@sam-solutions.net> References: <87y91cj9z5.fsf@velvet.po.cs.msu.su> <20030513144121.GB12183@basalt.office.altlinux.org> <20030513150450.GA12432@basalt.office.altlinux.org> Mime-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20030513150450.GA12432@basalt.office.altlinux.org> Sender: devel-kernel-admin@altlinux.ru Errors-To: devel-kernel-admin@altlinux.ru X-BeenThere: devel-kernel@altlinux.ru X-Mailman-Version: 2.0.9 Precedence: bulk Reply-To: devel-kernel@altlinux.ru List-Unsubscribe: , List-Id: ALT Linux kernel packages development List-Post: List-Help: List-Subscribe: , List-Archive: Archived-At: List-Archive: List-Post: 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.