<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF115%3ADrBrown2</id>
		<title>LXF115:DrBrown2 - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF115%3ADrBrown2"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF115:DrBrown2&amp;action=history"/>
		<updated>2026-05-13T03:53:18Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF115:DrBrown2&amp;diff=10128&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF115:DrBrown2&amp;diff=10128&amp;oldid=prev"/>
				<updated>2010-04-28T11:58:24Z</updated>
		
		<summary type="html">&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;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>