Спецкурс по 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 консоли), что при втыкании туда лезла программа, которая пытается определить тип ФС для автомонтирования. ГК её убил и всё заработало.
Есть флешки, которые работают только под линух, у них в идентификаторах китайские символы, от чего винде сносило крышу.
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 года (вторник) пройдёт экзамен по курсу. Информация об экзамене отсюда.