Как узнать, какой CONFIG_XXX соответствует модулю? - PullRequest
0 голосов
/ 23 апреля 2020

Есть ли команда или некоторые инструменты, которые могут помочь вам получить соответствующие параметры CONFIG_XXX для включения модуля. Например, если я хочу включить модуль nvme, какой CONFIG_XXX должен быть y или m? Я знаю, что есть некоторые документы, в которых может быть конфиг nvme. Но я хочу знать, есть ли команда или инструмент, которые могут помочь вам получить CONFIG —— XXX, только если вы наберете команду.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

если я хочу включить модуль nvme, какой CONFIG_XXX должен быть y или m?

Насколько я знаю, не существует документации или единой команды, которая бы сообщала о Указывает c символ конфигурации, который создает модуль.
Однако Makefile , который фактически определяет сборку рассматриваемого модуля, является единственным авторитетным источником этой информации.
Как правило, соответствующий Makefile будет находиться в подкаталоге (или родительском каталоге) в качестве исходного модуля.

Если вы не уверены, где находится исходный модуль, вы можете найти все Makefile файлов в исходном коде ядра для условной сборки .o объектного файла:

$ find . -name Makefile | xargs grep nvme.o
./drivers/nvme/host/Makefile:obj-$(CONFIG_BLK_DEV_NVME)     += nvme.o
... <irrelevant search results>
$ 

Таким образом, ответ будет CONFIG_BLK_DEV_NVME .
Примечание что подкаталог с соответствующим Makefile также будет иметь файл Kconfig , который описывает только что идентифицированный вами символ конфигурации.


Вместо того, чтобы вручную редактировать файл .config , используйте команду make menuconfig.
Использование menuconfig гарантирует, что ваша конфигурация будет соответствовать всем зависимостям, и вызовет все авто -selections правильно.

Вы можете использовать функцию поиска (просто введите символ sla sh, / и имя конфигурации), чтобы получить текст справки, который поможет вам найти расположение приглашения конфигурации.

Текст справки и состояние CONFIG_BLK_DEV_NVME может выглядеть следующим образом:

 Symbol: BLK_DEV_NVME [=n]     
 Type  : tristate          
 Prompt: NVM Express block device    
   Location:                   
     -> Device Drivers            
 (1)   -> NVME Support         
   Defined at drivers/nvme/host/Kconfig:4         
   Depends on: PCI [=n] && BLOCK [=y]        
   Selects: NVME_CORE [=n]       
   Selected by [n]:              
   - NVM [=n] && BLOCK [=y] && PCI [=n]    

Текущее состояние / состояние каждой указанной конфигурации указывается в квадратных скобках и знаком равенства.

Строка Depends on: указывает, что оба CONFIG_PCI и CONFIG_BLOCK должны быть включены, чтобы приглашение CONFIG_BLK_DEV_NVME было даже видимым.
Возможно, вам придется использовать возможность поиска, чтобы преобразовать эти другие имена CONFIG_xxx в их приглашения меню и местоположения.

Строка Selects: указывает другие записи конфигурации, которые будут автоматически включены, если выбран этот элемент конфигурации.

Строка (и) Selected by [x]: указывает другие записи конфигурации это может автоматически включить этот элемент конфигурации. В этом случае логическое выражение указывает, что при включении трех других записей конфигурации эта конфигурация также включается автоматически.

0 голосов
/ 23 апреля 2020

Вы можете искать опции в интерактивном меню конфигурации ядра, но сначала вам нужно создать меню с помощью make menuconfig, затем набрать /, за которым следует искомый термин. За каждым Symbol: в результатах поиска следует имя параметра без префикса CONFIG_. Он также показывает расположение опции в дереве меню.

Некоторые из опций имеют три состояния: y - функция будет встроена в образ ядра, m - функция должна находиться в загружаемый модуль, n - функция отключена.

Вам необходимо добавить CONFIG_BLK_DEV_NVME=m (либо отредактировать .config, либо использовать make menuconfig), чтобы включить поддержку блочных устройств nvmeNnM в качестве загружаемых модуль.

...