<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>LXF115:DrBrown2 - История изменений</title>
		<link>http://wiki2.linuxformat.ru/index.php?title=LXF115:DrBrown2&amp;action=history</link>
		<description>История изменений этой страницы в вики</description>
		<language>ru</language>
		<generator>MediaWiki 1.11.1</generator>
		<lastBuildDate>Wed, 13 May 2026 23:57:56 GMT</lastBuildDate>
		<item>
			<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF115:DrBrown2&amp;diff=10128&amp;oldid=prev</link>
			<description>&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Файловая система-призрак==&lt;br /&gt;
&lt;br /&gt;
: ''Sysfs'' Загадочные файлы в каталоге '''/sys''' и их роль в поддержке ''udev''.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF115_51_1.jpg|300px]] ''udev'' сличает строки '''/sys''' с правилами из '''rules.d''' и выполняет соответствующее&lt;br /&gt;
действие, создавая файлы в '''/dev'''.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Файловая система ''sysfs'' (как и ''procfs'') – одна из тех штук, которые я обычно называю плодом воображения ядра. Точкой монтирования для нее всегда служит каталог '''/sys''', а ее основная задача – это предоставление доступа к структурам данных ядра, в частности, топологии оборудования (шинам&lt;br /&gt;
и устройствам) компьютера. ''Sysfs'' лежит под уровнем виртуальной файловой системы ''VFS'' (Virtual File System), чья задача&lt;br /&gt;
состоит в отображении файлов независимо от их физической&lt;br /&gt;
реализации.&lt;br /&gt;
&lt;br /&gt;
Иерархия файловой системы ''sysfs'' очень близка к внутренней иерархии объектов ядра (''kobjects''), которые населяют ее.&lt;br /&gt;
Подкаталоги верхнего уровня в '''/sys''', такие как '''block, bus, devices, fs, modules''' и '''power''', представляют собой основные подсистемы,&lt;br /&gt;
зарегистрированные в ''sysfs''.&lt;br /&gt;
&lt;br /&gt;
Забравшись вовнутрь этого запутанного лабиринта директорий, вы рано или поздно достигнете файлов, представляющих&lt;br /&gt;
атрибуты объектов ядра. Многие из них содержат простые численные значения, например, в своей системе я могу просмотреть&lt;br /&gt;
размеры разделов диска таким образом:&lt;br /&gt;
&lt;br /&gt;
  $ cd /sys/block/sda&lt;br /&gt;
  $ for f in sda*/size; do echo -n $f : ; cat $f ; done&lt;br /&gt;
  sda1/size :240912&lt;br /&gt;
  sda2/size :20971520&lt;br /&gt;
  sda3/size :317241328&lt;br /&gt;
  sda4/size :2&lt;br /&gt;
  sda5/size :15647247&lt;br /&gt;
  sda6/size :271032552&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что эти эксперименты проводились на Ubuntu 8.04 с ядром версии 2.6.24. В других дистрибутивах, особенно с другой версией ядра, вывод команды будет немного отличаться от приведенного выше.&lt;br /&gt;
&lt;br /&gt;
Вот другой пример: покопавшись в каталоге '''modules''', вы найдете подкаталог '''parameters''' для каждого загруженного модуля. Каждый&lt;br /&gt;
файл в этом каталоге определяет параметр, переданный модулю&lt;br /&gt;
во время его загрузки. Например, параметры моего драйвера беспроводной сетевой карты таковы:&lt;br /&gt;
&lt;br /&gt;
  $ cd /sys/module/iwl4965/parameters&lt;br /&gt;
  $ ls&lt;br /&gt;
  antenna debug disable disable_hw_scan hwcrypto qos_enable queues_num&lt;br /&gt;
&lt;br /&gt;
Чтобы узнать значение одного из этих параметров, просмотрите содержимое его файла:&lt;br /&gt;
&lt;br /&gt;
  $ cat queues_num&lt;br /&gt;
  16&lt;br /&gt;
&lt;br /&gt;
Узнать, что означают параметры, поможет команда ''modinfo'':&lt;br /&gt;
&lt;br /&gt;
  $ modinfo iwl4965 | grep parm:&lt;br /&gt;
  parm: antenna:select antenna (1=Main, 2=Aux, default 0  [both]) (int)&lt;br /&gt;
  parm: disable:manually disable the radio (default 0 [radio on]) (int)&lt;br /&gt;
  parm: hwcrypto:using hardware crypto engine (default 0 [software])&lt;br /&gt;
  parm: debug:debug output mask (int)&lt;br /&gt;
  parm: disable_hw_scan:disable hardware scanning (default 0) (int)&lt;br /&gt;
  parm: queues_num:number of hw queues. (int)&lt;br /&gt;
  parm: qos_enable:enable all QoS functionality (int)&lt;br /&gt;
&lt;br /&gt;
===Хорошо, и что с этим делать?===&lt;br /&gt;
&lt;br /&gt;
Одно из главных назначений '''/sys''' – предоставить информацию&lt;br /&gt;
об оборудовании подсистеме ''udev'', ответственной за добавление&lt;br /&gt;
файлов устройств в каталог '''/dev''', когда ядро находит новое оборудование. Например, если вставить USB-флэшку, ее параметры&lt;br /&gt;
появятся в файле в каталоге '''/sys/bus/usb/devices'''. Они сравниваются с правилами, которые ''udev'' считывает из каталога '''/etc/udev/rules.d'''.&lt;br /&gt;
&lt;br /&gt;
Командой ''udevinfo'' удобно «шерстить» содержимое каталога '''/sys''' в поисках параметров, пригодных для формирования правил&lt;br /&gt;
''udev''. Вот фрагмент данных, относящихся к USB-флэшке:&lt;br /&gt;
&lt;br /&gt;
 $ udevinfo --attribute-walk--path /sys/bus/usb/devices/7-1/&lt;br /&gt;
&lt;br /&gt;
''Udevinfo'' начинает с устройства, определенного в '''--path''', и затем прогуливается по цепочке родительских устройств.&lt;br /&gt;
Для каждого найденного устройства выводится список всех возможных атрибутов в&lt;br /&gt;
формате правил ''udev''. Правило можно составить из атрибутов устройства и атрибутов одного родительского устройства.&lt;br /&gt;
&lt;br /&gt;
 looking at device ‘/devices/pci0000:00/0000:00:1d.7/usb7/7-1’:&lt;br /&gt;
 ATTR{manufacturer}==”SanDisk Corporation”&lt;br /&gt;
 ATTR{product}==”Cruzer Mini”&lt;br /&gt;
 ATTR{serial}==”SNDKB770F40861406506”&lt;br /&gt;
 looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb7’:&lt;br /&gt;
 KERNELS==”usb7”&lt;br /&gt;
 SUBSYSTEMS==”usb”&lt;br /&gt;
&lt;br /&gt;
На основе этой информации можно легко построить правило ''udev'', определяющее, что должно произойти, когда ядро находит&lt;br /&gt;
это устройство. Чисто ради эксперимента я добавил такую строку в файл '''/etc/udev/rules.d/60-symlinks.rules''':&lt;br /&gt;
&lt;br /&gt;
 SUBSYSTEMS==”usb”, ATTRS{product}==”Cruzer Mini”,&lt;br /&gt;
 SYMLINK+=”cruzer”&lt;br /&gt;
&lt;br /&gt;
Теперь при подключении устройства ''udev'' автоматически смонтирует его (об этом позаботятся другие правила ''udev'') и создаст символьную ссылку '''/dev/cruzer'''.&lt;/div&gt;</description>
			<pubDate>Wed, 28 Apr 2010 11:58:24 GMT</pubDate>			<dc:creator>Crazy Rebel</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF115:DrBrown2</comments>		</item>
	</channel>
</rss>