Спецкурс по Linux, весна 2007, 04 лекция (от 16 марта)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Предыдущая лекция | Следующая лекция

Авторский вариант: http://uneex.cs.msu.su/uneex/LecturesDistro2007/04_Drivers

[править] Тема: Как собирать ядро

Сегодня ГК не расскажет, как собирать ядро

Кто смотрел сайт, когда ГК собирал вопросы, он приписал вопрос зачем?

Вопрос аудитории: зачем собирать ядро

  • Чтобы было (Just for fun)
  • Жуки, ошибки в репозитории, распространяемом ядре (слово распространяемый — ядро распространяется в исходных кодах, смысл в том, что используя определённое ядро Линух, привязываются к сообществу, а внутри него распространяется бинарная версия ядра; был тихий скандал в прошлом году, когда из-за перегрева математика начинала ехать, и если на таком процессоре что-то собирать, то в результирующем коде появлялись ...)
  • Болезнь новых версий (желание собрать новое ядро; новость — есть такой эмулятор qemu, он отвечает тем же задачам, что и vmware, но опенсорс, ..., был модуль, который позволяет делать прямое выполнение, но он не gpl, но тут он выпустился под gpl, но это потому, что в 2.6.20 появилась поддержка виртуализации, в том числе аппаратной (kvm); желание собрать новое ядро не может быть продиктовано появлением новой железякой, только в очень редких случаях; гораздо чаще это требуется ради новых возможностей)
  • По требованию (как Вовочка не хотел школу идти, но надо, он же директор)

Есть ещё несколько вариантов, тут не упомянута та ситуация, когда появилось новое железо, и надо сделать его поддержку; более очевидный вариант, когда поставили линух на компьютер, а часть железа не работает, а в книжке написано "пересоберите ядро"

Почему не надо пересобирать ядро в случае, когда, например, не заработало железо. Это отдельная тема, не относящаяся к сборке ядра. Есть устоявшийся миф, что если какая-то железка не работает, то это из-за отсутствия драйвера.

Есть операционка, которая не работает с железкой, но с железкой приезжает дискета, на которой есть мифическая субстанция драйвер, он мифическим образом устанавливается и железка начинает работать. Тут очень много мифического.

Тёмные места:

  • Что такое драйвер
  • Что такое "устройство распозналось" (критерии бывают настолько разные...)
  • Что такео устройство (пож этим словом упоминается, особенно в unix-системах, практически всё; в unix-системах имеется два класса сущностекй, так именованых, которые друг к другу имеют мало отношения)

[править] Что такое устройство

В Linux это два типа сущностей:

  • Аппаратура компьютера (мышь, звуковая карта, контроллер PCI)
  • Специальный файл в каталоге /dev (файлы-дырки; это файлы, которые не файлы, в /dev лежат некые имена неких объектов, в них можно писать, из них можно читать, но это ниикакие не файлы, информация попадает не на диск, а это дырка, он через эту дырку получает доступ к ядру, а оно уже общается с устройством; например, /dev/mouse, пользователь тужда что-то пишет читает, а на самом деле эта информация проваливается в ядро, а это ядро управляет устройством мышь; в литературе обычно подразумевают под устройством именно это)

Почему совпадение — в линухе есть договорённость, что всё, что может быть представлено в виде файла, должно быть представлено в виде файла. Это позволяет всё унифицировать (интерфейс, пространство имён)

Отличие файла-дырки от обычного файла в том, что у него нет размера, а есть данные, которые привязаны к ядру, а так же поддерживаются с этими файлами не только файловые операции, но и операции управления. Есть системный вызов ioctl(), который позволяет управлять.

Устройство как аппарат (как прибор). Давайте классифицировать приборы по тому, насколько они распозноваемы со стороны компьютера, по тому, насколько ОС и компьютер могут разобраться, что это такое.

  • 0-й уровень. Нераспознаваемые устройства. Чем коврик для мышки отличается от колонок — они втыкаются в компьютер.
  • 1-й уровень. Когда определяется факт подключения. Колонки, COM-порт
  • 2-й уровень. Можно распознать его идентификатор (не факт, что все идентификаторы стандартизованы, необязательно, что они разные). Пример — PS/2 мыши и клавиатуры, DDC
  • 3-й уровень. USB, PCI. Не только абстрактный идентификатор, но и идентификатор производителя, устройста, категории (видеокарта, звуковая карта, хрен-знает-какая карта)

80 процентов мониторов из тех, которые поддерживают DDC, делают это правильно.

Чем больше уровень, тем больше мы от того, какие устройства, к формату обмена данных.

К чему такая классификация — в зависимости от уровня детализации, с которым распознаётся устройство, отличается понятие драйвера, ибо для уровня 0 оно это будет программа, которая будет бездумно лепить в то место, где оно может быть. Например, если это какая-то КОМ-мышь, то будет программа, которая анализирует траффик и пытается догадаться, что это за мышь (тут ещё драйвера нет, ибо нет спецификации устройства), потом, когда мы определим, что мышь 3-кнопочная с колёсиком, то эта программа будет драйвером. Это часто бывает в случае малофункциональных устройств.

Драйвер это то, после чего можно пользоваться устройством.


Не стоит думать, что есть такой плоский... Вот есть компьютер, и есть набор ряда устройств, от самого тупого, до самого не тупого. Если устройство тупое, то мы не сможем с ним работать, а если устройство USB, то начинается каскадирование. Если подключили USB-плеер, то он распознался. Это значит, что шина USB определила, что подключилось новое устройство. Это устройство сообщило, что это за устройство, как оно называется, может быть даже появился новый файл в /dev (появился драйвер уровня ядра). А чтобы работать с устройством, нужна специальная программа. Где драйвер? И там, и там.

Нет такой сущности под названием драйвер, которую можно показать, она может располагаться в любом месте.

Например — драйвер модема: есть текстовый файл, там написано, как положить трубку, как позвонить.

Нельзя ожидать, что драйвер это определённого вида штука, которая заставляет устройство работать, и с которой можно работать конкретным образом.

Драйвер может находиться где угодно, в том числе внутри приложения.

Особо тупые устройста могут вообще не имеют соответствия в /dev

Существует размазанное по всей системе представление о драйвере.

С точкой зрения ФС начиная с ядра 2.6 сделана поддержка даже не распознанных устройств, то есть если существует какой-то способ понять, что устройство подключено, то это будет отражено в /sys.

Каталог /sys отражает представления ядра о том, какие устройства к нему подключены, там написано, что думает ядро о структуре железа, аппаратуры компьютера. То есть, если вы подключили устройство, и в /sys ничего не появилось, то либо таракан в разъём попал, либо удалена поддержка на более высоком уровне (например, поддержка USB).

Почему частенько люди не хотят делать драйвер в виде модуля ядра: казалось бы, это очень удобно. Часто народ ленится, или не делает это из принципа, так как ядро работает в режиме супервизора, потому что при ошибке машина зависает — самая частая причина зависания Linux. Ещё его тяжело отлаживать. Разработка в userspace намного легче и безопаснее, чем kernelspace. Тем не менее, есть FUSE — эмулировать ФС на уровне пользовательской программы, то есть вы думаете, что смотрите каталог, а на самом деле выполняются некоторые процедуры для работы с устройством, например, так делают последние сименсовские телефоны.

Далее про видеокарты, про пропиетарные модули ядра, про фанатиков со специальной функцией, которая не давала их грузить, про то, как переписали детонатор и quaketest начал работать в три раза быстрее, что теперь вся эта война мозгов утихает и вместо этого гонка мегагерц и количества процессоров, про

[править] Кто виноват и что делать

Предположим, что устройство воткнули, а оно не заработало, как вы ожидаете

  • 0. Определитесь со своими ожиданиями
  • 1. Загляните в /sys до подключения к устройству и после
  • 2. Что-то есть на 12-й консоли
  • 3. Может не подгрузиться соответствующий модуль, потому что оно новое для udev
  • 4. Если нет модуля ядра...
  • 5. Погуглить, поискать в сети
  • 6. Если обнаружили, что есть такая проблема, а решения её нет, то либо заделаться разработчиком, либо подождать. Сейчас Линуз осваивает новое железо за месяц-два.
  • 7. Существует железо, которое не работает в Linux (win-модемы, но ситуация исправляется, win-принтеры, но ситуация улучшается, видеокарты, особенно ATI, где задержка по полгода, дешёвое железо, например пищащие ванночки для USB или кардридеры)

Недавно ГК подобрал на помойке мать и собрал из неё компьютер. Но её не зря выбросили на помойку — первая сверху PCI-плата, которая в неё воткнута, не распознавалась. Что было сделано:

Есть пальма, и есть программа, которая делает из Пальма USB-storage, но она падает, если лезть прямо к диску. Поэтому она падала везде, где ГК её втыкал. Дело оказалось в том (как выяснилось из 12 консоли), что при втыкании туда лезла программа, которая пытается определить тип ФС для автомонтирования. ГК её убил и всё заработало.

Есть флешки, которые работают только под линух, у них в идентификаторах китайские символы, от чего винде сносило крышу.


Спецкурс по Linux, весна 2007


01 02 03 04 05 06 07 08 09 10 11 12


Календарь

Февраль
16
Март
02 09 16 23 30
Апрель
06 13 20 27
Май
04 11

18 мая 2007 года прошёл экзамен по курсу. Краткий конспект экзамена.
22 мая 2007 года прошёл экзамен по курсу для студентов 3 курса и тех, кто не сдал экзамен 18 мая. Подробности здесь.
12 июня 2007 года (вторник) пройдёт экзамен по курсу. Информация об экзамене отсюда.


Эта статья является конспектом лекции.

Эта статья ещё не вычитана. Пожалуйста, вычитайте её и исправьте ошибки, если они есть.
Личные инструменты
Разделы