Управління конфігураційними параметрами

У попередніх розділах розглядалася компіляція модуля управління вудкою за умови, що встановлений конфігураційний параметр CONFIG_FISHING_POLE Конфігураційні параметри розглядалися в попередніх главах, а тепер давайте розглянемо додавання нового параметра в продовження прикладу модуля управління вудкою

Завдяки новій системі компіляції ядра kbuild, яка зявилася в серії ядер 26, додавання нового конфігураційного параметра є дуже простою справою Все, що необхідно зробити, – Це додати новий запис у файл Kconf ig, який відповідає за конфігурацію дерева вихідних кодів ядра Для драйверів цей файл зазвичай знаходиться в тому ж каталозі, в якому знаходиться і вихідний код Якщо код драйвера вудки знаходиться в каталозі drivers / char /, то необхідно використовувати файл drivers / char / Kconfig

Якщо був створений новий каталог і є бажання, щоб файл конфігурації перебував у цьому новому каталозі, то необхідно на нього послатися з існуючого файлу Kconf ig Це можна зробити шляхом додавання рядка

source Tdrivers/char/fishing/Kconfig

в існуючий файл Kconfig, скажімо в файл drivers / char / Kconfig

Конфігураційні запису у файлі Kconfig додаються дуже просто Для модуля управління вудкою цей запис може виглядати наступним чином

config FISHING_POLE

tristate &quotFish Master XL support&quot defaultn

help

If you say Y here, support for the Fish Master XL 2000 Titanium with computer interface will be compiled into the kernel

and accessible via

device node You can also say M here and the driver will be built as a

module named fishingko If unsure, say N

Перва я рядків а визначає, який конфігураційний ї парамет р створюється Зверніть увагу, що префікс CONFIG_ вказувати не потрібно, він додається автоматично

Другий рядок вказує на те, що параметр може мати три стани (tristate), які відповідають таким значенням: статична компіляція в ядро ​​(Y), компіляція в якості модуля (М) або компілювати драйвер взагалі (N) Для того щоб заборонити компіляцію коду, який відповідає конфігураційному параметру, як модуль (припустимо, що цей параметр визначає не драйвер а просто деяку додаткову функцію) необхідно вказати ТИП параметра boo l замість tristate Текст в лапках, який слід після цієї директиви, визначає назву конфігураційного параметра і буде відображатися різними утилітами конфігурації

Третій рядок дозволяє вказати значення цього параметра за замовчуванням, який відповідає в даному випадку забороні компіляції

Директива hel p вказує на те, що інша частина тексту буде інтерпретуватися як опис даного модуля Різні конфігураційні утиліти можуть при необхідності відображати цей текст Так як цей текст призначений для користувачів і розробників, які будуть компілювати ядро, то він повинен бути коротким і ясним Звичайні користувача, швидше за все, не будуть компілювати ядро, а сіли будуть, то тоді вони повинні розуміти, що в цьому описі сказано

Існують також і інші директиви файлу конфігурації Директива depend s вказує на конфігураційні параметри, які повинні бути встановлені перед тим, як може бути встановлений поточний параметр Якщо залежності не будуть задоволені, то поточний параметр буде заборонений Наприклад, можна вказати наступну директиву

depends on FISH_TANK

При цьому поточний модуль не буде вирішений, поки не буде дозволений модуль, відповідний конфігураційному параметру CONFIG_FISH_TANK

Директива selec t аналогічна директиві depends, з а винятком того, що вона примусово включає зазначений конфігураційний параметр, якщо включається поточна конфігураційна опція Її не потрібно використовувати так само часто, як директиву depends, тому що вона включає інші конфігураційні опції Використовувати її так само просто

select BAIT

У цьому випадку конфігураційний параметр CONFIG_BAIT автоматично активізується при включенні конфігураційного параметра CONFIG_FISHING_POLE

Як для директиви select, так і для директиви depend s можна вказувати декілька параметрів за допомогою оператора && У директиві depend s за допомогою знака оклику перед параметром можна вказати вимогу, що деякий конфігураційний параметр НЕ повинен бути встановлений Наприклад, наступна запис вказує, що для компіляції поточного драйвера необхідно, щоб був встановлений конфігураційний параметр CONFIG_DUMB_DRIVERS і не був встановлений параметр CONFIG_NO_FISHING_ALLOWED

depends on DUMB_DRIVERS &amp&amp NO_FISHING_ALLOWED

Після директив tristate і boo l можна вказати директиву if, що дозволяє зробити відповідний параметр залежним від іншого конфігураційного параметра Якщо умова не виконується, то конфігураційний параметр не тільки забороняється, але й не буде відображатися утилітами конфігурації Наприклад, наступний рядок вказує, що функція Deep Sea Mode буде доступна, тільки якщо дозволений конфігураційний параметр CONFIG_OKEAN

bool TDeep Sea ModeY if OCEAN

Директива if також може бути вказана після директиви default, що означає, що значення за замовчуванням буде встановлено, тільки якщо виконується умова, вказане в директиві if

Система конфігурації експортує кілька метапараметров, щоб спростити процес конфігурації Параметр CONFIG_EMBEDDED встановлюється тільки тоді, коли користувач вказує, що він хоче бачити вагу параметри, що відповідають за заборону деяких ключових позможность ядра (зазвичай з метою збереження памяті на вбудовуваних системах) Параметр CONFIG_BROKEN_ON_SMP використовується, щоб вказати, що драйвер не розрахований на системи із симетричною багатопроцесорної Зазвичай цей параметр не встановлюється, при цьому від користувача потрібно, щоб він сам переконався в можливості компіляції драйвера для SMP Нові драйвери цей прапор використовувати не повинні

Параметр CONFIG_EXPERIMENTAL використовується для вказівки експериментальних або не дуже добре оттестировать можливостей За умовчанням цей параметр відключений, що вимагає від користувача особисто переконатися в ступені ризику при дозволі компіляції того чи іншого драйвера

Джерело: Лав, Роберт Розробка ядра Linux, 2-е видання : Пер з англ – М: ТОВ «ІД Вільямс »2006 – 448 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*