<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bappoy&#039;s blog &#187; driver</title>
	<atom:link href="http://bappoy.pp.ru/tag/driver/feed" rel="self" type="application/rss+xml" />
	<link>http://bappoy.pp.ru</link>
	<description>Линуксоид на велосипеде с моторчиком</description>
	<lastBuildDate>Mon, 06 Sep 2010 14:00:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Linux kernel: построение списка совместимости устройств для своего ядра</title>
		<link>http://bappoy.pp.ru/2008/01/30/linux-building-hcl.html</link>
		<comments>http://bappoy.pp.ru/2008/01/30/linux-building-hcl.html#comments</comments>
		<pubDate>Wed, 30 Jan 2008 17:48:51 +0000</pubDate>
		<dc:creator>bappoy</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[driver]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://bappoy.pp.ru/2008/01/30/linux-building-hcl/</guid>
		<description><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fbappoy.pp.ru%2F2008%2F01%2F30%2Flinux-building-hcl.html"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fbappoy.pp.ru%2F2008%2F01%2F30%2Flinux-building-hcl.html" height="61" width="51" /></a></div><p>В <a href="http://bappoy.pp.ru/2008/01/29/linux-hw-compat/"> предыдущей заметке</a> был рассмотрен способ ручного определения совместимости драйвера с железом. Однако в случае, когда необходимо получить список полный всех устройств, с которым может работать наше многажды пропатченное и перекроенное ядро, лазить руками по каждому драйверу и смотреть, какие PCI и USB ids в него зашиты, очень неудобно.</p>
<p>На наше счастье, кое-кто (итальянец Giacomo Catenazzi) уже озаботился этой проблемой и в какой-то степени её решил. Встречайте: <a href="http://cateee.net/lkddb/index.html">Linux Kernel Driver Database (LKDDb)</a>. Основная цель этого проекта, цитирую: &laquo;попытка построения понятной пользователю базы данных устройств и протоколов, известных ядру linux. База данных включает в себя цифровые идентификаторы железа, опции конфигурации ядра, необходимые для включения модуля в ядро, и названия модулей, получающихся на выходе. База составляется на основе исходников ядра и поэтому всегда актуальна&raquo;</p>
<p>На сайте представлен <a href="http://cateee.net/lkddb/web-lkddb/">пример</a> того, что получается в результате работы этого скрипта. Для каждой опции ядра указывается, поддержка каких PCI IDs добавляется в систему с включением этой опции, как называется результирующий модуль и от какой опции зависит. Например, <a href="http://cateee.net/lkddb/web-lkddb/SATA_NV.html">вот</a> страница, посвящённая упоминавшемуся в прошлой заметке драйверу sata_nv.</p>
<p>Но нас в первую очередь интересует собственно база данных, lkddb.list &#8211; текстовый файл относительно простого для парсинга <a href="http://cateee.net/lkddb/format.html">формата</a>, на основе которого и строится работа программы. Разобраться в формате не составляет никакого труда. Приведу лишь пример записей для неоднократно здесь упоминавшегося драйвера sata_nv:</p>
<blockquote><p><code>lkddb   module  libata  "NVIDIA SATA support"   :: CONFIG_SCSI_SATA_NV  :: drivers/scsi/Kconfig<br />
lkddb   module  sata_nv "NVIDIA SATA support"   :: CONFIG_SCSI_SATA_NV  :: drivers/scsi/Kconfig<br />
lkddb   pci     10de .... .... .... 0101..      :: CONFIG_SCSI_SATA_NV CONFIG_SCSI      :: drivers/scsi/sata_nv.c<br />
lkddb   pci     10de .... .... .... 0104..      :: CONFIG_SCSI_SATA_NV CONFIG_SCSI      :: drivers/scsi/sata_nv.c<br />
lkddb   pci     10de 0036 .... .... ......      :: CONFIG_SCSI_SATA_NV CONFIG_SCSI      :: drivers/scsi/sata_nv.c<br />
lkddb   pci     10de 003e .... .... ......      :: CONFIG_SCSI_SATA_NV CONFIG_SCSI      :: drivers/scsi/sata_nv.c<br />
lkddb   pci     10de 0054 .... .... ......      :: CONFIG_SCSI_SATA_NV CONFIG_SCSI      :: drivers/scsi/sata_nv.c<br />
lkddb   pci     10de 0055 .... .... ......      :: CONFIG_SCSI_SATA_NV CONFIG_SCSI      :: drivers/scsi/sata_nv.c<br />
lkddb   pci     10de 008e .... .... ......      :: CONFIG_SCSI_SATA_NV CONFIG_SCSI      :: drivers/scsi/sata_nv.c<br />
lkddb   pci     10de 00e3 .... .... ......      :: CONFIG_SCSI_SATA_NV CONFIG_SCSI      :: drivers/scsi/sata_nv.c<br />
lkddb   pci     10de 00ee .... .... ......      :: CONFIG_SCSI_SATA_NV CONFIG_SCSI      :: drivers/scsi/sata_nv.c<br />
lkddb   pci     10de 0266 .... .... ......      :: CONFIG_SCSI_SATA_NV CONFIG_SCSI      :: drivers/scsi/sata_nv.c<br />
lkddb   pci     10de 0267 .... .... ......      :: CONFIG_SCSI_SATA_NV CONFIG_SCSI      :: drivers/scsi/sata_nv.c<br />
lkddb   pci     10de 037e .... .... ......      :: CONFIG_SCSI_SATA_NV CONFIG_SCSI      :: drivers/scsi/sata_nv.c<br />
lkddb   pci     10de 037f .... .... ......      :: CONFIG_SCSI_SATA_NV CONFIG_SCSI      :: drivers/scsi/sata_nv.c</code></p></blockquote>
<p>Все строки в этом файле начинаются с lkddb; далее следует тип записи: <code>pci</code>, <code>usb</code>, <code>ieee1394</code>, <code>eisa</code>, <code>pcmcia</code> и т.д. для устройств, <code>i2c</code>, <code>platform</code>, <code>fs</code> или <code>module</code> для различной информации, связанной с самим ядром. Далее для pci-устройств идут device id, vendor id, device class; затем, через разделитель &laquo;::&raquo;, опция ядра, которую нужно включить для того, чтобы данный модуль скомпилировался, а также опции, от которой зависит данная опция; и, наконец, файл, в котором был найден данный pci id.</p>
<p><code>lkddb.list</code> может быть сгенерирован с помощью <a href="http://cateee.net/sources/lkddb-sources/">генератора</a>, который, собственно, и является ядром программы. Нужно скачать последнюю версию, распаковать, указать в Makefile путь к исходникам своего ядра; для экономии 500 килобайт трафика можно в этот же каталог скопировать из<code> /usr/share/hwdata</code> файлы <code>pci.ids</code> и <code>usb.ids</code>, после чего выполнить команду make <strike>откинуться на спинку кресла</strike> и подождать две-три минуты, пока парсятся немаленькие исходники и генерируется БД. Возможно, потребуется еще кое-что подпилить напильником, в зависимости от ситуации.</p>
<p>После дюжины экранов отладочных сообщений будет создан нужный нам файл <code>lkddb.list</code> и, в качестве бонуса, около 35 мегабайт описаний модулей в формате HTML в папке <code>web-lkddb</code>. До создания HCL остаётся полтора шага, не составляющих проблемы для знакомых с основами shell-программирования &#8212; из конфигурационного файла ядра нужно извлечь список всех включённых опций и для каждой скопировать информацию из <code>lkddb.list</code>, попутно преобразовав PCI ID устройства (в процессе работы скриптов преобразованного в более читаемую форму) к человекочитаемому виду.</p>
<p><a href="http://feeds.feedburner.com/bappoy" target="_blank">Следите за обновлениями :)</a></p>
]]></description>
		<wfw:commentRss>http://bappoy.pp.ru/2008/01/30/linux-building-hcl.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
