LINUX.ORG.RU

Вопрос о ядре

 , ,


2

2

Допустим, имеется конфиг ядра, где почти всё выключено от разработчика дистрибутива. Нужно включить модули к железу определённого компа. Речь не идёт об универсальной конфигурации, где всё включено. Это я и сам умею. Вопрос в следующем, как вы определяете оборудование своего компа в конфиге ядра? Интересуют методы. Как связать выводы консольных команд об оборудовании с названиями подключаемых модулей в .config ядра? Поделитесь опытом.


Можешь посмотреть, какие модули загружены при работающем полном ядре (lsmod). Ну и включить соответствующие модули в конфиг.

hotpil ★★★★
()

Не знаю, как там у других, но я бы на вашем месте банально «загуглил» «начинку» компьютера, там же нашёл названия нужных модулей и добавил в «конфиг».

Korchevatel ★★★★★
()
Ответ на: комментарий от Korchevatel

Пробовал, но «начинку» гугл не признаёт…

cdrw
() автор топика

lspci + dmesg + загрузка с ядром allmodconfig и последующим изучением выхлопа lsmod

В дальнейшем - modprobe configs ; zcat /proc/config.gz > .config ; make oldconfig

ananas ★★★★★
()

Грузишься с ядром, которое поддерживает твое железо, копируешь конфиг рабочего ядра и дальше make localyesconfig или localmodconfig по вкусу на модули.

TalkingMudcrab
()
Ответ на: комментарий от cdrw

Честно говоря, я уже подзабыл. Ядро компилил один раз очень давно чисто для прикола. Насколько я помню, там был ncurses интерфейс для конфигурирования и проблем с поиском модулей у меня не было. Я делал, как написано в арчвики. Посмотри там статью про компиляние ядра.

hotpil ★★★★
()
Ответ на: комментарий от hotpil

А как понять, что это именно тот модуль, который мне нужен? Названия то не соответствуют. Путём догадок я пробовал, но это же избыточно - включать всё, что похоже на правду. Просто хочу узнать метод, как народ этого добивается.

cdrw
() автор топика

Для PCI, PCIe, USB идентификаторы устройств можно получить утилитами lspci и lsusb. По идентификаторам в сорцах ядра найти нужные драйверы, а потом в скриптах сборки найти, какими опциями включаются нужные драйверы.

lspci -nnv показывает потенциально подходящие для устройства модули. Но она вроде берёт из modules.alias.bin, так что на системе без нужных модулей она не поймёт, какой модуль нужен.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Для PCI, PCIe, USB идентификаторы устройств можно получить утилитами lspci и lsusb.

Я про названия модулей в конфиге ядра. Как их связать с идентификаторами?

cdrw
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Нет, он сам ядро тырит по умолчанию…

cdrw
() автор топика
Ответ на: комментарий от cdrw

Как их связать с идентификаторами?

По идентификаторам в сорцах ядра найти нужные драйверы, а потом в скриптах сборки найти, какими опциями включаются нужные драйверы.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

По идентификаторам в сорцах ядра найти нужные драйверы

Интересно. А как это на деле воспроизвести, поподробнее можно?

cdrw
() автор топика
Ответ на: комментарий от cdrw

Обычно я знаю какое у меня оборудование, либо информацию об этом можно найти. Язык знать особо не нужно, там названия чипсетов пишут.

grem ★★★★★
()
Ответ на: комментарий от cdrw

Ну, например, Ethernet контроллер 8086:15b7. lspci говорит, что это «Intel Corporation Ethernet Connection (2) I219-LM». Ищешь в ядре число 0x15b7. В drivers/net/ethernet/intel/e1000e/hw.h есть строчка:

92:#define E1000_DEV_ID_PCH_SPT_I219_LM2		0x15B7	/* SPT-H PCH */

которая очень похожа на то, что нужно. Дальше ищешь, где в коде встречается E1000_DEV_ID_PCH_SPT_I219_LM2. Находится в drivers/net/ethernet/intel/e1000e/netdev.c, в массиве элементов типа struct pci_device_id. Ну очень похоже на идентификатор. Дальше видишь, что в Makefile рядом с netdev.c написано, что netdev.o является частью модуля e1000e, сборка которого управляется опцией CONFIG_E1000E. Дальше ищешь в ближайшем Kconfig (он может может быть на несколько уровней выше) строчку «config E1000E», и находишь:

config E1000E
        tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
        depends on PCI && (!SPARC32 || BROKEN)
        select CRC32
        imply PTP_1588_CLOCK
        ---help---
          This driver supports the PCI-Express Intel(R) PRO/1000 gigabit
          ethernet family of adapters. For PCI or PCI-X e1000 adapters,
          use the regular e1000 driver For more information on how to
          identify your adapter, go to the Adapter & Driver ID Guide that
          can be located at:
          
          <http://support.intel.com>
          
          To compile this driver as a module, choose M here. The module
          will be called e1000e.

i-rinat ★★★★★
()
Ответ на: комментарий от cdrw
 "make localmodconfig" Create a config based on current config and
                           loaded modules (lsmod). Disables any module
                           option that is not needed for the loaded modules.

                           To create a localmodconfig for another machine,
                           store the lsmod of that machine into a file
                           and pass it in as a LSMOD parameter.

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/README?...

Samsky
()
Ответ на: комментарий от cdrw

Но самым юзер-френдли способом будет взять откуда-нибудь из Debian уже собранное ядро, вытащить из пакета файл modules.alias и поискать в нём.

Для 8086:15b7 нужно искать pci:v00008086d000015b7. Там сразу видно, что нужен модуль e1000e.

i-rinat ★★★★★
()
Ответ на: комментарий от Samsky

Лол. Написано же, что у него нет собранных модулей под железо. lsmod не покажет модули, которых нет. Потому что lsmod показывает загруженные модули, а модули, которых нет, загрузить нельзя.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

А что мешает загрузиться с флешки с «универсальным» ядром, выхлоп lsmod сохранить в файл, и скормить через LSMOD на целевой машине?

Samsky
()
Ответ на: комментарий от Samsky

Слишком просто же. Ему же надо выпендриться какими-то бесполезными знаниями на форуме, а то все забудут какой он умный (нет).

anonymous
()
Ответ на: комментарий от i-rinat

Во! уже один метод обнаружен! Преогромнейшее спасибо!

cdrw
() автор топика
Ответ на: комментарий от anonymous

Если б тут можно было бы поставить лайк, я бы лайкнул)))

anonymous
()
Ответ на: комментарий от Samsky

И что это даст? Досказывайте, не надо делать загадочное лицо. Надо только прочесть начало темы и не умничать…

cdrw
() автор топика
Ответ на: комментарий от cdrw

Это даст конфиг только с необходимыми загружеными модулями целевой машины, остальные модули будут отключены в конфиге.

Samsky
()
Последнее исправление: Samsky (всего исправлений: 1)
Ответ на: комментарий от cdrw

И что это даст?

Выше по нитке написано, что это даст — возможность выполнить «make localmodconfig» в системе, где еще не собраны желаемые модули, и затем собрать только необходимое.

bormant ★★★★★
()
Ответ на: комментарий от cdrw

Знаешь, иногда ты вроде хочешь помочь тупенькому и даже пытаешься, объясняешь ему, но в конце концов тупость так надоедает, что ты сдаешься. Вот и тут так.

anonymous
()
Ответ на: комментарий от anonymous

Так ты тупой, и на вопрос ответить не умеешь. Но выпендрился, захотел быть заметным. А по теме сможешь ответить?

Ладно, тема закрыта, всё равно толку нету…

cdrw
() автор топика
Ответ на: комментарий от cdrw

Тебе уже ответили и не один раз. Что ты не понял или не захотел понять - твоя проблема. Если не в состоянии переварить пережованный материал, может тебе не надо пытаться в умственную деятельность? Работа руками тоже работа.

anonymous
()
Ответ на: комментарий от cdrw

прочтите мой первый коммент, и обратите внимание на то, после чего надо изучать выхлоп lsmod, и как следствие, смотреть lspci -k или изучать modules.alias на предмет соответствия модулей различному оборудованию

ananas ★★★★★
()
Ответ на: комментарий от ananas

Ещё раз прочтите вопрос топика. Как связать выхлоп утилит на предмет соответствия записей в конфиге ядра? Я непонятно выразился? Например,видеоплата nVidea… Как её найти в конфиге? Вопрос уже риторический. Это можно найти в инете. Я спрашивал про МЕТОДЫ и КАК? Ну неужели непонятно?

cdrw
() автор топика
Ответ на: комментарий от cdrw

Задай себе вопрос: ты хочешь решить задачу или просто, чтобы тебе ответили на бесполезный вопрос? Если первое, то ответов дано более, чем достаточно. Сделать ядро с дровами только под твое работающее железо очень просто.

anonymous
()
Ответ на: комментарий от cdrw

сетевые устройства, например, обычно находятся в разделах device drivers - network

grem ★★★★★
()
Ответ на: комментарий от cdrw

ты идиот? или не умеешь читать? или не способен погуглить, что делает make allmodconfig? так забей тогда, рано тебе еще свои ядра собирать

ananas ★★★★★
()
Ответ на: комментарий от cdrw

Примеры!!!

Простой пример. Завести тачпад на ноуте завязаном на каком нибудь baytrail. И одними аппаратными идентификаторами и соотвествием их модулям не обойтись. Потому что они также имеют зависимости (а это могут быть протоколы, интерфейсы и т.д), то есть модуль просто не поднимется или даже не соберется, если не включишь все зависимости. Плюс включение дополнительных протоколов по которым работают девайсы.

Возращаюсь к тачпаду. Обрати внимание на depends и select ну и сноску на i2c_hid и usbhid. И тут понимаешь что помимо hid необходимо копаться с опциями конфигураций i2c, smbus и т.д. Ну и протоколы типа elantech и т.д.

https://github.com/torvalds/linux/blob/master/drivers/hid/Kconfig


config HID_RMI
	tristate "Synaptics RMI4 device support"
	depends on HID
	select RMI4_CORE
	select RMI4_F03
	select RMI4_F11
	select RMI4_F12
	select RMI4_F30
	help
	Support for Synaptics RMI4 touchpads.
	Say Y here if you have a Synaptics RMI4 touchpads over i2c-hid or usbhid
	and want support for its special functionalities.

Ладно идем дальше i2c, опять таки depends и select

https://github.com/torvalds/linux/blob/master/drivers/i2c/busses/Kconfig

config I2C_I801
	tristate "Intel 82801 (ICH/PCH)"
	depends on PCI
	select CHECK_SIGNATURE if X86 && DMI
	select I2C_SMBUS
	help
	  If you say yes to this option, support will be included for the Intel
	  801 family of mainboard I2C interfaces.  Specifically, the following
	  versions of the chipset are supported:
	    82801AA
	    82801AB
	    82801BA
	    82801CA/CAM
	    82801DB
	    82801EB/ER (ICH5/ICH5R)
	    6300ESB
	    ICH6
	    ICH7
	    ESB2
	    ICH8
	    ICH9
	    EP80579 (Tolapai)
	    ICH10
	    5/3400 Series (PCH)
	    6 Series (PCH)
	    Patsburg (PCH)
	    DH89xxCC (PCH)
	    Panther Point (PCH)
	    Lynx Point (PCH)
	    Avoton (SOC)
	    Wellsburg (PCH)
	    Coleto Creek (PCH)
	    Wildcat Point (PCH)
	    BayTrail (SOC)
	    Braswell (SOC)
	    Sunrise Point (PCH)
	    Kaby Lake (PCH)
	    DNV (SOC)
	    Broxton (SOC)
	    Lewisburg (PCH)
	    Gemini Lake (SOC)
	    Cannon Lake (PCH)
	    Cedar Fork (PCH)
	    Ice Lake (PCH)
	    Comet Lake (PCH)
	    Elkhart Lake (PCH)
	    Tiger Lake (PCH)
	    Jasper Lake (SOC)
	    Emmitsburg (PCH)

	  This driver can also be built as a module.  If so, the module
	  will be called i2c-i801.

Но и это еще не все. Тачпад не заведется пока нет поддержки Designware i2c адаптера и AXP288, ну и конечно же и там свои depends и select которые необходимо удовлетворить.

config I2C_DESIGNWARE_PLATFORM
	tristate "Synopsys DesignWare Platform"
	depends on (ACPI && COMMON_CLK) || !ACPI
	select I2C_DESIGNWARE_CORE
	select MFD_SYSCON if MIPS_BAIKAL_T1
	help
	  If you say yes to this option, support will be included for the
	  Synopsys DesignWare I2C adapter.

	  This driver can also be built as a module.  If so, the module
	  will be called i2c-designware-platform.

config I2C_DESIGNWARE_BAYTRAIL
	bool "Intel Baytrail I2C semaphore support"
	depends on ACPI
	depends on I2C_DESIGNWARE_PLATFORM
	depends on (I2C_DESIGNWARE_PLATFORM=m && IOSF_MBI) || \
		   (I2C_DESIGNWARE_PLATFORM=y && IOSF_MBI=y)
	help
	  This driver enables managed host access to the PMIC I2C bus on select
	  Intel BayTrail platforms using the X-Powers AXP288 PMIC. It allows
	  the host to request uninterrupted access to the PMIC's I2C bus from
	  the platform firmware controlling it. You should say Y if running on
	  a BayTrail system using the AXP288.

config I2C_DESIGNWARE_PCI
	tristate "Synopsys DesignWare PCI"
	depends on PCI
	select I2C_DESIGNWARE_CORE
	help
	  If you say yes to this option, support will be included for the
	  Synopsys DesignWare I2C adapter. Only master mode is supported.

	  This driver can also be built as a module.  If so, the module
	  will be called i2c-designware-pci.

И это только поддержка тачпада, причем возможно я что-то упустил. Тебе и вправду хочется ковыряться со всем этим, если все это можно получить через localmodconfig?

Samsky
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.