Введение в dev fs (Daniel Robbins)
Загрузка Linux с помощью NT Loader (КУБыч)
Как заставить работать TBтюнер GoTview 7135 под Linux
Руководство по "продвинутым" файловым системам, часть 4
Первоисточник : http://www-106.ibm.com/developerworks/library/l-fs4.html
Введение в devfs
Daniel Robbins (drobbins@gentoo.org) President/CEO,
Gentoo Technologies, Inc. September 2001
С выходом релиза 2.4 Linux появилась возможность использования
filesystem с новыми свойствами, таких как Reiserfs, XFS, GFS и других. Эти
filesystems еще не достаточно опробованы и имеются вопросы, что именно они
могут делать, насколько они хороши и насколько оправдано их использование в
промышленной Linux среде. В этой статье Daniel объясняет назначение и
преимущества использования devfs, файловой системы управления устройствами и
подготавливает к пониманию своей следующей статьи, где будет рассказано об
оптимальной установке devfs на вашей системе.
Презентация devfs
Устройства, устройства повсюду.
Devfs, или Device Filesystem, разработана с единственной целью предоставления
нового (более "нормального") способа управления всеми блочными и символьными
устройствами, заполнившими каталог /dev. Вероятно, вам известно, что обычное
/dev дерево содержит сотни блочных и символьных специальных файлов-устройств,
которые располагаются на корневой файловой системе. Каждый такой специальный
файл доступен для user-space процессов и обеспечивает легкость взаимодействия с
kernel devices. Выполняя операции с такими специальными файлами, X server
способен обращаться к video hardware, fsck способен выполнять filesystem
checks, а lpd передает данные через параллельный порт на принтер и
т.д.
Фактически, одна из "приятных" черт Linux и Unix заключается в том, что
devices не скрыты за некоторым непонятным и специфическим API, а сосуществуют на
файловой системе рядом с "нормальными" файлами, каталогами и символическими
ссылками. Поскольку символьные и блочные devices отображаются в привычное
filesystem namespace, имеется дополнительная возможность более простого
взаимодействия с hardware через стандартные Unix команды, например
cat или dd. И это не просто фокус. "Стандартное"
взаимодействие более выразительно и способствует быстрому освоению нового
оборудования.
Проблемы управления.
В то время как сама идея отображения устройств как специальных файлов хороша,
следует заметить, что обычные Linux системы управляют ими далеко не оптимальным
и громоздким способом. В наши дни в Linux поддерживается много самого разного
hardware. При "классическом" подходе это означает, что в каталоге /dev "обитают"
сотни специальных файлов для "презентации" соответствующих hardware. Большинство
таких специальных файлов "dont even map" на реально существующее на вашей
машине устройство (но в каталоге /dev такой специальный файл все равно должен
присутствовать на случай добавления нового hardware/drivers). Такой подход
вносит много путаницы.
Только одного такого аргумента достаточно, чтобы осознать необходимость
"перестройки" каталога /dev, конечно, при соблюдении принципа "обратной
совместимости". Чтобы хорошо понять, как именно devfs решает большинство проблем
связанных с "классическим" каталогом /dev, посмотрим на devfs с позиции
разработки нового драйвера для устройства.
Внутренняя организация device management
Чтобы получить ясное представление о devfs, давайте разберемся, как devfs
меняет традиционный подход для случая добавления нового драйвера. Традиционный
(без devfs) kernel-based device driver "прописывает" устройство в остальной
части системы через системные вызовы register_blkdev() или
register_chrdev() (зависит от того, регистрируется блочное или
символьное устройство).
Major номер (unsigned 8-bit integer) передается как параметр либо
register_blkdev(), либо register_chrdev(). После
регистрации устройства ядро знает, что этот конкретный major номер соответствует
конкретному драйверу для устройства, которое выполнило вызов
register_???dev().
Вопрос, а какой major номер разработчик драйвера должен использовать для
передачи с запросом register_???dev()? Проблемы нет, если developer
драйвера не планирует его использования "внешним миром". В этом случае сгодится
любой major номер, лишь бы он не конфликтовал с другими major номерами,
используемыми в конкретном частном случае. Как альтернатива, разработчик может
"динамически" ассигновать major номер перед register_???dev().
Однако, "по большому счету", такое решение приемлемо только в случае, если
драйвер не предназначен для широкого использования.
Получение номера.
Если developer хочет предложить свой драйвер для широкого использования (а
большинство Linux developers имеет тенденцию делать именно так), то
использование major номера "от балды" или даже вариант с его динамическим
ассигнованием "не пройдет". В таких случаях разработчик драйвера должен войти в
контакт с Linux kernel developers и получить для своего специфического
устройства "официальный" major номер. После этого, для всех Linux пользователей
это устройство (и только оно) будет связано с таким major номером.
Важно иметь "официальный" major номер, так как для взаимодействия с этим
специфическим устройством, администратор должен в каталоге /dev создать
специальный файл. Когда device node (специальный файл) создается, он должен
получить тот же major, как зарегистрирован во внутренних структурах ядра. После
этого, когда пользовательский процесс выполняет операцию над файлом-устройством,
ядро знает, с каким драйвером нужно связаться. Иначе, mapping от специального
файла на kernel driver сделано по major номером, а не по именам устройств. Такое
"непонимание" device name - особенность non-devfs систем.
Как только device driver получает официальный major, он может использоваться
публично, а device node можно включать в дерево /dev разных дистрибутивов через
официальный сценарий /dev/MAKEDEV. Такой сценарий помогает
суперпользователю автоматизировать процесс создания device nodes с правильными
major и minor номерами, правами и владельцами.
Традиционные проблемы.
К сожалению, при таком подходе имеется много проблем. У разработчика драйвера
появляется "головная боль" от необходимости согласования действий с kernel
developers для получения "официального" major. То же относится к самим kernel
developers. Возникает потребность отслеживания процедуры ассигнования всех major
номеров. Во многом это похоже на проблемы системного администратора при
использовании статического ассигнования IP адресов в локальной сети, когда сеть
начинает "разрастаться". Точно так же, как системный администратор может
"разрубить узел", воспользовавшись DHCP, можно было бы использовать подобный
подход для регистрации devices.
Проблема не только в этом. Linux подошел к границе, когда все "официальные"
major и minor номера будут исчерпаны. Конечно, можно просто увеличить
разрядность номеров, но при этом станет еще сложнее отслеживать уникальность
major для драйверов. Имеется и более радикальный способ решения проблемы. Это
переход на devfs.
Подход devfs. devfs_register()
Имеется быстрое описание того, как devfs функционирует и снимает многие
проблемы. После правильного конфигурирования devfs, что подразумевает добавление
поддержки devfs в ядро и выполнение множества достаточно хитрых изменений в
сценариях запуска, суперпользователь перезагружает систему. Стартует ядро и
device drivers начинают регистрировать свои устройства для остальной части
системы. Если это non-devfs система, как и ранее, выполняются системные вызовы
register_blkdev() и register_chrdev() (вместе с
сопровождающими вызовы major номерами). Однако, если enabled devfs, то device
drivers для регистрации своих устройств используют новый, улучшенный kernel
call, называемый devfs_register().
Об этом devfs_register() вызове можно много рассказать. Хотя
можно указать major и minor номера для обратной совместимости, жесткого
требования, делать именно так, не существует. Вместо этого вызов
devfs_register() передает path на устройство как параметр, и именно
так оно впоследствии появиться под /dev. Например, драйвер устройства foo
регистрирует свое устройство в devfs. При этом драйвер передает параметр
foo0 с вызовом devfs_register(), сообщая ядру, что в корне
devfs namespace должен быть создан новый файл-устройство foo0. В ответ на
вызов devfs_register() добавляется foo0 device node к корню devfs
namespace и запись о том, что этот новый foo0 node должен отобразится на foo
device driver в ядре.
Devfs в действии.
После того, как все device drivers стартовали и зарегистрировали
соответствующие им устройства в ядре, ядро запускает /sbin/init и
начинается отработка сценариев системной инициализации. На ранней фазе процесса
начальной загрузки (еще до filesystem checks), из rc scripts монтируется devfs
filesystem к точке /dev, которая содержит representation для devfs namespace.
После такого монтирования ко всем зарегистрированным устройствам (например,
/dev/foo0) можно обращаться как на обычной non-devfs системе. Отличие в
том, что при обращении к устройствам, kernel maps на соответствующий device
driver devfs отрабатываются по именам устройств, а не по major
номерам.
Красота такого подхода в том, что все требующиеся device nodes (и ничего
лишнего) создаются автоматически ядром. Соответственно, отпадает необходимость в
погоне за последним сценарием MAKEDEV (так как все
зарегистрированные устройства сами "по волшебству" появляются в /dev). Еще сие
означает, что каталог /dev не загроможден сотнями "фиктивных" device nodes.
Фактически, используя devfs, можно зайти в /dev и узнать, какие устройства у вас
"реально" присутствуют. Например, если у вас laptop с поддержкой "горячей"
замены hardware, то устройства будут появляться и исчезать в /dev по мере того,
как вы вставляете или удаляете PC Cards. Это делает devfs очень "чистым" и
"функциональным" после всего того, что когда-то было.
Красота devfs
Devfs делает многие вещи проще. Рассмотрим старт Linux bootable CD-ROM,
который состоит из boot loader, initrd, ядра и loopback filesystem на CD. Когда
BIOS передает управление CD, boot loader грузит ядро и initrd, а затем стартует
/linuxrc script из "развернувшегося" initrd. Первоочередная задача
/linuxrc заключается в том, чтобы смонтировать CD таким образом,
чтобы loopback filesystem могла самостоятельно mounted и accessed.
Без devfs сценарий /linuxrc должен опробовать множество
специальных файлов в /dev, которые либо "представляют", либо "не представляют"
реальное hardware в системе. Например, /linuxrc должен
просканировать /dev/hdc, /dev/scd0, /dev/hdb и прочие для обнаружения
"живого" устройства CD-ROM. По мере сканирования будут впустую опробованы
несколько "фиктивных" device nodes.
В том случае, если используется devfs, сценарий /linuxrc просто
заходит в /dev/cdroms, в котором находятся все специальные файлы,
ассоциированные с "реальными" для данной машины CD-ROM, причем независимо,
IDE или SCSI. Благодаря такому devfs соглашению, выбор очень
конкретный; в подкаталоге перечислены только активные устройства, а
"исследующему коду" даже не требуется знать о подробностях основного CDROM,
например, сидит он на IDE channel или использует SCSI ID. Фактически, это уже
другое достоинство devfs. Как будет видно из следующей статьи этого цикла, devfs
имеет совершенно иные, заданные по умолчанию местоположения для устройств в
/dev.
Если необходимо обратится к конкретному блочному устройству (диск, partition,
CD-ROM и т.д), доступ можно сделать через несколько специальных файлов.
Например, на моем сервере имеется единственный SCSI CD-ROM. При devfs enabled, я
могу работать с ним переместившись либо в /dev/cdroms/cdrom0, либо в
/dev/scsi/host0/bus0/target4/lun0/cd. При этом доступ произойдет к одному
и тому же устройству. Просто у меня есть выбор, через какой именно файл я это
сделаю. Кроме этого, как альтернатива, к своему CD-ROM я могу получить доступ "в
старом стиле" как /dev/sr0, если мне так хочется и инсталлирована удобная
и небольшая программка devfsd. Версии devfsd меняются
очень быстро, но, в общем, это программа, которая заботится об "обратной
совместимости" специальных файлов и позволяет настраивать /dev разными
способами. Программа devfsd будет рассмотрена в следующей статье
при описании процесса перехода на devfs в вашей системе. А теперь некоторые
ресурсы по devfs:
Resources
Читайте другие статьи этой серии от Daniel Robbins:
Презентация ReiserFS. (Часть 1)
Использование ReiserFS в Linux 2.4. (Часть
2)
Презентация tmpfs и bind mounts. (Часть 3)
Презентация devfs. (Часть 4)
Установка devfs. (Часть 5)
Переход на devfs (с использованием init
wrapper). (Часть 6)
Презентация ext3. (Часть 7)
Неожиданности от ext3. (Часть 8)
Презентация XFS. (Часть 9)
Развертывание XFS. (Часть 10)
Совершенствование файловых систем. (Часть
11)
OReillys Linux
Device Drivers, 2nd Edition is a truly excellent book and a great resource
for those who would like to learn more about device registration, and Linux
device driver programming in general.
Be sure to read Richard Goochs (creator of Linux devfs) Linux Devfs
FAQ. Its complete, verbose, and up-to-date. What more could you ask for?
Theres a devfs mailing list available. To subscribe, send an email to majordomo@oss.sgi.com with the word
subscribe in the body of the message. Devfs list archives are available
at http://oss.sgi.com/projects/devfs/archive/.
You may also want to visit Richard Goochs main page;
it contains devfs as well as other neat things.
Linux Weekly News is a great resource for
keeping up with the latest kernel developments.
Browse more Linux
resources on developerWorks.
Browse more Open
source resources on developerWorks.
About the author Residing in Albuquerque, New Mexico, Daniel Robbins is the
President/CEO of Gentoo Technologies, Inc., and the creator of Gentoo Linux, an advanced Linux for the PC,
and the Portage system, a next-generation ports system for Linux. He has
also served as a contributing author for the Macmillan books Caldera
OpenLinux Unleashed, SuSE Linux Unleashed, and Samba
Unleashed. Daniel has been involved with computers in some fashion since the
second grade, when he was first exposed to the Logo programming language as well
as a potentially dangerous dose of Pac Man. This probably explains why he has
since served as a Lead Graphic Artist at SONY Electronic
Publishing/Psygnosis. Daniel enjoys spending time with his wife, Mary, and
his new baby daughter, Hadassah. You can contact Daniel at drobbins@gentoo.org.
Перевод: Владимир Холманов
www.dkws.org.ua
Различные операционные системы 11-09-2006 На предстоящей неделе Microsoft выпускает закрытую бета-версию Service Pack 2 для Vista 28-10-2008 Различные операционные системы На предстоящей неделе корпорация Microsoft выпустит первую закрытую бета-версию пакета обновлений Service Pack 2 для операционной системы Windows Vista. В пакете SP2 заявлено множество нововведений, в том числе встроенная поддержка работы с форматом Blu-ray.Майк Нэш, руководитель отдела разработки Windows, напомнил, что с прошлого года Microsoft начала выводить клиентские и серверные версии своих ОС на единый и синхронный цикл выхода основных нов...
Информация, необходимой для устранения проблемы синего экрана Windows XP 22-08-2008 Различные операционные системы Операционная система Windows XP славится своим умением зависать по самым разным поводам и с самыми разными результатами. Иногда решить проблему можно просто завершением неотвечающего приложения или перезагрузкой, но в некоторых случаях это может привести к сбою всей системы. Microsoft называет такие сбои «стоп-ошибками» (Stop errors), потому что в подобных случаях система перестает реагировать на действия пользователя. При возникновении стоп-ошиб...
Microsoft тратит 300млн. долларов на раскрутку Windows Vista 22-08-2008 Различные операционные системы Корпорация Microsoft готова инвестировать $300 млн на PR-камапнию для Windows Vista. По мнению ведущих маркетологов, этой суммы должно с лихвой хватить для поднятия имиджа операционной системы, которая оказалась не совсем удачной для Microsoft. В основном вся критика по поводу данной ОС сводилась к трем факторам:1. Проблемы с совместимостью оборудования и программного обеспечения;2. Проблемы обеспечения безопасности;3. Потеря производительности.С...
Microsoft выпускает новую Windows XP для работы на ноутбуках OLPC XO 28-07-2008 Различные операционные системы В рамках ранее объявленного сотрудничества между некоммерческим фондом One Laptop Per Child (OLPC) и Microsoft было достигнуто соглашение о выпуске специализированной версии WindowsXP, предназначенной для работы на "стодолларовых" детских ноутбуках XO. Об этом сообщил Джеймс Уцшнайдер, менеджер Microsoft по развивающимся рынкам.Спецверсия Windows XP будет иметь драйверы для загрузки ОС с карты памяти SD, а также получит принципи...
Навигационная система "хлебные крошки" (breadcrumb) как замена кнопке "Вверх" в Vista 18-06-2008 Различные операционные системы Как вам уже, наверное, известно, я нахожусь в постоянном поиске полезных гаджетов и утилит типа PowerToy, расширяющих возможности операционной системы Windows Vista. Во время недавней охоты я наткнулся на ряд программ, разработанных для добавления в интерфейс проводника Vista кнопки «Вверх» (Up).Кнопка «Вверх»Неудивительно, что появилось множество утилит для добавления кнопки «Вверх» в интерфейс Проводника Vista — мы привыкли пользоваться ей для ... |