<?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; hardware</title>
	<atom:link href="http://bappoy.pp.ru/tag/hardware/feed" rel="self" type="application/rss+xml" />
	<link>http://bappoy.pp.ru</link>
	<description>Линуксоид на велосипеде с моторчиком</description>
	<lastBuildDate>Fri, 02 Dec 2011 11:44:47 +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>Линус Торвальдс о Eee PC</title>
		<link>http://bappoy.pp.ru/2010/01/29/linus-about-eeepc.html</link>
		<comments>http://bappoy.pp.ru/2010/01/29/linus-about-eeepc.html#comments</comments>
		<pubDate>Fri, 29 Jan 2010 11:49:40 +0000</pubDate>
		<dc:creator>bappoy</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[asus eee pc]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[linus]]></category>

		<guid isPermaLink="false">http://bappoy.pp.ru/?p=915</guid>
		<description><![CDATA[<p>В предыдущем посте — <a href="http://bappoy.pp.ru/2010/01/29/linus-about-embroidery.html">небольшая история</a> о том, как в Linux была улучшена поддержка устройств экстра-маленького размера благодаря покупки Линусом Торвальдсом вышивальной машинки :) В <a href="http://article.gmane.org/gmane.linux.utilities.util-linux-ng/2888">письме Линуса</a> в рассылку util-linux-ng@kernel.org было упомянуто, что для управления этой машинкой он использует Eee PC с Fedora 12 на борту. Как <a href="http://bappoy.pp.ru/2008/05/06/eee-first-impressions.html">пользователь Eee PC 701g</a> с почти двухлетним стажем, я заинтересовался и написал Линусу письмо с несколькими вопросами о его опыте использования этих компьютеров. Получилось мини-интервью, которое и предлагается вашему вниманию.</p>
<p><strong>Q: Какие модели Eee PC Вы используете?</strong><br />
A: У меня их две штуки: 701 и 901.</p>
<p>Q: Это основной компьютер или один из дополнительных?<br />
A: Нет, конечно же, это не основной компьютер. Atom тормозной как грех. Я считаю, что процессоры с прямым выполнением команд (in-order execution) — преступление против человечности, и я уверен в том, что если Intel не предпримет значительных шагов (т.е. сделает Atom <a href="http://en.wikipedia.org/wiki/Out-of-order_execution">out-of-order</a>), ARM Cortex A9 захватит рынок low-end машин.</p>
<p>У меня есть пара нетбуков, потому что я люблю маленькие компьютеры и использую их в поездках. Но они никогда не могли бы служить основными машинами для разработки или чем-то вроде этого.</p>
<p>701 слишком мелкий для того, чтобы быть полезным. Экран крошечный и у него непозволительно маленькое разрешение. Клавиатуру едва можно использовать. 901 намного лучше и мог бы быть неплохим помощником в поездках, но разрешение тоже слишком маленькое (9 дюймов нормально, но 1024&#215;600 юзабельно только для смартфонов, а для лэптопов подошло бы как минимум 1366&#215;768, как мне кажется)</p>
<p>Поэтому я не использую ни один из них ни для чего, кроме тестирования. 901 используется моей женой для её вышивальной машинки, и для такого, обычного использования он подходит очень хорошо.</p>
<p>ВНИМАНИЕ! Наверно, следует заметить, что мои требования могут быть завышенными по сравнению с требованиями многих других людей. Моя основная машина — Nehalem 3.2 GHz c 6 GB RAM и двумя быстрыми SSD-дисками от Intel. Поэтому мои представления о том, какая производительность может считаться &laquo;приемлемой&raquo;, могут не совпадать с представлениями других.</p>
<p><strong>Q: какие задачи Eee PC помогает Вам выполнять?</strong><br />
A: Сейчас 701 работает тестовым стендом для совершенно различных вещей — я держу его поблизости в основном как  32-битный x86-стенд (все мои основные машины — x86-64, поэтому, если мне нужно проверить, что 32 бита еще работают, я использую 701).</p>
<p>901 я иногда использовал в поездках как лэптоп, и в основном он меня удовлетворял, но, откровенно говоря, существуют нормальные ноутбуки, которые намного-намного-намного лучше.</p>
<p>Например, я немного поигрался с машинами, основанными на CULV Core 2 Duo (вместо Atom) с экраном 1366&#215;768 и внезапно обнаружил, что может быть намного более мощная <em>(чем eeepc — прим.пер.)</em> сборка. Она больше по размерам (10 дюймов), потребляет больше энергии, но оно того стоит.</p>
<p><strong>Q: приобрели ли Вы эти нетбуки самостоятельно или они были подарены?</strong><br />
A: Оба Eee PC были подарены. 10&#8243; CULV Core2 было самым достойным приобретением, на которое я потратил свои деньги.</p>
<p><strong>Q: сколько времени Вы проводите перед этим нетбуком? Достаточен ли его размер для Вас?</strong><br />
A: См. выше. 701 и близко не стоял. 901 вполне пригоден к использованию, и если бы у него не было такое маленькое разрешение, он мог бы быть неплохим помощником в путешествиях.</p>
<p><strong>Q: производились ли какие-нибудь аппаратные модификации?</strong><br />
A: в оба добавил памяти, вроде сейчас в обоих по 2 Гб (возможно, 701 был с 512 мегабайтами, и я проапгрейдил до гигабайта, слишком лениво проверять). И еще в оба добавил ПЗУ: в 701 — быструю SD-карточку (понятие &laquo;быстрая&raquo; тут весьма относительно, но для SD-карточки неплохой результат), в 901 — Mini-PCI SSD.</p>
<p>Мне нравятся high-end SSD (например, <a href="http://torvalds-family.blogspot.com/2008/10/so-i-got-one-of-new-intel-ssds.html">интеловские замены жестким дискам</a>), но те, что используются в low-end нетбуках, страдают от ужасающе отвратительной скорости записи. Поэтому SSD в этих нетбуках, как правило, медленнее, чем реальные диски.</p>
<p><strong>Q: и еще один, более общий вопрос. Как Ваше рабочее время распределено между кодированием и административной/политической/социальной деятельностью?</strong><br />
A: Сейчас кодирую очень мало. Практически всё время занято обсуждениями с другими разработчиками и внесением их изменений в ядро.</p>
]]></description>
		<wfw:commentRss>http://bappoy.pp.ru/2010/01/29/linus-about-eeepc.html/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Thinkpad X61s и альтернативные Mini PCI Express-адаптеры</title>
		<link>http://bappoy.pp.ru/2008/12/23/thinkpad-x61s-mini-pcie.html</link>
		<comments>http://bappoy.pp.ru/2008/12/23/thinkpad-x61s-mini-pcie.html#comments</comments>
		<pubDate>Tue, 23 Dec 2008 13:34:19 +0000</pubDate>
		<dc:creator>bappoy</dc:creator>
				<category><![CDATA[work]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[рабочие будни]]></category>

		<guid isPermaLink="false">http://bappoy.pp.ru/?p=464</guid>
		<description><![CDATA[<p>Клиенты прислали свой ноутбук Lenovo Thinkpad X61s для специфической настройки. Перед отправкой они воткнули туда свежеприобретённый Mini PCIe-адаптер Intel PRO Wireless 3945ABG, но проверить его толком не успели за недостатком времени. Когда я включил этот ноутбук, он вообще отказался загружаться с хамской формулировкой:</p>
<pre>1802: Unauthorized network card is plugged in - Power off and remove the miniPCI network card.</pre>
<p>Расследование этого факта привело на страницу <a href="http://www.thinkwiki.org/wiki/Problem_with_unauthorized_MiniPCI_network_card">Problem with unauthorized MiniPCI network card</a>, откуда я узнал, что в биосе ноутбуков Thinkpad &laquo;зашит&raquo; белый список PCI-ID&#8217;ов Mini PCIe-устройств, явно разрешённых к использованию, все остальные устройства запрещены. Все разрешённые устройства выпущены под маркой Lenovo и стоят в полтора-два раза дороже, чем их немаркированные аналоги. Как <a href="http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&#038;lndocid=MIGR-69757">разъясняет</a> справочный центр Lenovo, это вызвано тем, что во избежание порчи эфира сочетание карты и антенны должно быть сертифицировано FCC (североамериканская федеральная комиссия по связи) или аналогичной организацией в других странах, и Lenovo не может гарантировать, что какой попало адаптер будет соответствовать этим требованиям. Поэтому официальный совет по избавлению от этой ошибки: выкиньте свой адаптер и купите правильный втридорога.<br />
<!--more--><br />
Неофициальные способы обойти хитрых IBM-овцев перечислены на вышеупомянутой странице. Вариантов несколько: добавить PCI ID устройства в bios, модифицировать PCI ID на самом устройстве (речь идёт о subvendor id), использовать несколько вариантов программ для изменения пары байтов в биосе, отключающих проверку по белому списку&#8230; В итоге сработало простое перетыкание адптера в соседний слот: видимо, проверка PCI ID работает только для одного слота.</p>
<p>После перетыкания ноутбук включился, но на этом приключения не кончились :) Выяснилось, что при любом состоянии переключателя wifi в логи выводится сообщение, подобное следующему:</p>
<pre>Dec 20 20:20:56 hostname kernel: ipw3945: Radio Frequency Kill Switch is On:
Dec 20 20:20:56 hostname kernel: Kill switch must be turned off for wireless networking to work.</pre>
<p>При этом в файле <code>/sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.0/rf_kill</code> содержится число 2, что означает &laquo;залочено железом&raquo;. Т.е. карточка считает, что wifi выключен и отказывается работать, и никакие хоткеи, включающие wifi, тут не помогут.</p>
<p>Решение в виде грязного хака нашлось на той же странице: необходимо чем-нибудь заклеить 20 контакт карточки бумажкой, чтобы она не получала сигналов о состоянии переключателя wifi, которые, видимо, не доставляются во второй слот. Действительно, судя по <a href="http://www.interfacebus.com/Mini_PCI_Express_Bus.html#b">распиновке Mini PCI express</a>, 20 пин зарезервирован и вполне может использоваться для сигнализации о включении/выключении функциональности wifi.</p>
<p>Мы заклеили этот 20 контакт кусочком первой попавшейся липкой бумажки, и всё прекрасно работает. Надолго ли?..</p>
<p><strong>Upd.</strong> Пока писал, забыл, чего сказать-то хотел :) Мораль сей басни такова: подумайте дважды, прежде чем Thinkpad брать — готовы ли вы модные рюшечки поменять на понятные, но нервирующие заносы производителя и потенциально обрести проблемы на пустом месте?</p>
]]></description>
		<wfw:commentRss>http://bappoy.pp.ru/2008/12/23/thinkpad-x61s-mini-pcie.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<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[<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>
		<item>
		<title>Linux kernel: определение совместимости драйвера с устройством</title>
		<link>http://bappoy.pp.ru/2008/01/29/linux-hw-compat.html</link>
		<comments>http://bappoy.pp.ru/2008/01/29/linux-hw-compat.html#comments</comments>
		<pubDate>Tue, 29 Jan 2008 13:12:20 +0000</pubDate>
		<dc:creator>bappoy</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[drivers]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://bappoy.pp.ru/2008/01/29/linux-hw-compat/</guid>
		<description><![CDATA[<p>Иногда бывает необходимо определить, поддерживает ли имеющийся драйвер некое устройство. Например, когда планируется установка новой сетевой карты на работающий сервер или запуск специально собранного ядра на сервере с новейшим RAID-контроллером.</p>
<p>Как обычно, имеется несколько способов решения.</p>
<p><strong>Способ первый: списки совместимости железа (HCL, hardware compatible lists).</strong></p>
<p>Если используется родное ядро дистрибутива, то достаточно зайти на сайт производителя используемого дистрибутива Linux и найти там Hardware Compatibility List. Ещё производители серверного железа пишут, с какими ОС совместимы их устройства и иногда даже выкладывают драйвера с исходниками. Если с производителем оборудования повезло, то можно просто скачать и собрать последнюю версию драйвера.</p>
<p>Можно обратиться к <a href="http://tldp.org/HOWTO/Hardware-HOWTO/">Linux Hardware Compatibility HOWTO</a>, но на данный момент (январь 2008) последняя дата обновления этого документа &#8212; 22 мая 2007 года, т.е. по меркам развития технологий очень давно. Ещё я не нашёл там ни одного контроллера Serial ATA, которые в последнее время очень распространены. Тем не менее, если интересующее вас устройство присутствует в этом документе, то оно наверняка поддерживается вашим ядром.</p>
<p>Существует несколько десятков сайтов, имеющих своей целью собрать абсолютно всю информацию о совместимости различного железа с Linux. Как правило, информация на таких сайтах добавляется посетителями и имеет формат &laquo;такая-то штука заработала под таким-то ядром в такой-то ОС после таких-то манипуляций с modprobe.conf&raquo; и может быть неверной или устаревшей. Примером такого сайта может являться <a href="http://www.linux-on-laptops.com/">Linux on laptops</a>, содержащий список ссылок на статьи и заметки на тему установки различных дистрибутивов Linux на ноутбуки.</p>
<p><strong>Способ второй:  ручная проверка PCI IDs.</strong></p>
<p>Вышеописанный метод гугления может лишь дать представление о том, поддерживается ли данное устройство вообще. Ответ на вопрос &laquo;поддерживается ли данный девайс данным ядром&raquo; можете дать только вы сами :)</p>
<p>Каждое устройство, подключаемое через шину PCI, имеет 8-байтный код, называемый PCI ID (и еще 8 байт, называемые Vendor ID, но нас они не интересуют). Первые четыре байта означают производителя, оставшиеся &#8212; собственно код устройства. Существует единый список известных кодов устройств <a href="http://pciids.sourceforge.net">http://pciids.sourceforge.net</a>, используемый, в частности, командой lspci для отображения читабельного писка установленного оборудования (однако факт включения устройства в этот список вовсе не означает, что оно поддерживается Linux&#8217;ом :))</p>
<p>Драйвера Linux &laquo;подцепляют&raquo; железо по его PCI ID; список совместимых с данным драйвером девайсов &laquo;зашит&raquo; в структуре pci_device_id,  Например, в драйвере sata_nv версии 0.09 из ядра 2.6.15 эта структура выглядит таким образом:</p>
<blockquote><p><code>static const struct pci_device_id nv_pci_tbl[] = {<br />
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, NFORCE2 },<br />
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, NFORCE3 },<br />
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, NFORCE3 },<br />
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA,PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 },<br />
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 },<br />
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 },<br />
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 },<br />
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },<br />
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },<br />
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },<br />
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },<br />
{ PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE&lt;&lt;8, 0xffff00, GENERIC },<br />
{ PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_RAID&lt;&lt;8, 0xffff00, GENERIC },<br />
{ 0, }<br />
};</code></p></blockquote>
<p>Поскольку драйвер sata_nv входит в состав ядра, то константы <code>PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA</code>, <code>PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA</code> и т.д. определены в файле <code>/usr/src/linux/include/linux/pci_ids.h</code>. Если же драйвер был скачан с сайта производителя, то необходимые константы могут быть переопределены в коде самого драйвера, grep вам в помощь :) Комбинируя значения этих констант со значением <code>PCI_VENDOR_ID_NVIDIA</code>, определённой в том же <code>pci_ids.h</code>, можно получить полный PCI ID устройства.</p>
<p>Эту же информацию можно извлечь из уже скомпилированного драйвера с помощью команды <code>modinfo sata_nv</code>, которая также выдаст список PCI IDs устройств, поддерживаемых данным драйвером. Есть еще файл <code>/lib/modules/`uname -r`/modules.pcimap</code>, содержащий сводную информацию о том, какие pci ids и vendor ids к какому модулю относятся, но в более подходящем для парсинга формате.Но в случае, если драйвер &laquo;вкомпилен&raquo; в ядро (например, в конфиге ядра (<code>/usr/src/linux/.config</code> или /proc/config.gz) указано <code>CONFIG_SCSI_SATA_NV=y</code>), то из скомпилированного ядра вытащить этот список очень проблематично . Хотя, наверно, как-то можно. Мне кажется, что проще залезть в исходники, надеясь, что в интересующей вас части они не изменились со времени последней компиляции.</p>
<p>Собственно определение совместимости драйвера с устройством состоит из двух этапов:</p>
<ol>
<li>выяснение PCI ID данного контроллера. Можно поискать его название, указанное в прилагаемой документации или на чипсете, в файле <code>/usr/share/hwinfo/pci.ids</code> (не забывайте его периодически обновлять с сайта <a href="http://pciids.sourceforge.net">http://pciids.sourceforge.net.</a>) или на сайте производителя устройства. Если устройство уже подключено, то поможет команда <code>lspci -nn</code></li>
<li>проверка вхождения этого PCI ID в драйвер. Тут можно либо лезть в исходники драйвера, как описано выше, либо воспользоваться командой <code>modinfo driver_name</code>.</li>
</ol>
<p>Однако следует помнить, что возможна ситуация, когда драйвер подцепляет устройство, но работает с ним некорректно. Тут уж ничего не попишешь, нужно искать решение в другом месте.</p>
<p>Бонус для тех, кто дочитал до этого места. Если у вас есть устройство, при загрузке оно почему-то не подцепляется автоматически и вы не знаете, какой драйвер с ним работает, вам поможет сервис <a href="http://kmuto.jp/debian/hcl">Debian GNU/Linux device driver check page</a> (никогда не устану ссылаться на эту страницу!). Он принимает вывод команды <code>lspci -n</code> и сообщает, какие драйвера подходят для имеющихся устройств. Можно просто указать PCI ID и это сработает.</p>
]]></description>
		<wfw:commentRss>http://bappoy.pp.ru/2008/01/29/linux-hw-compat.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

