среда, 28 ноября 2012 г.

Драйверы и модули ядра Linux

Благодаря письмам и отзывам читателей, в рукописи книги "Модули ядра Linux" найдена ошибка в описаниях реализаций некоторых API ядра. Это описательная часть, она не имеет какого-то существенного влияния на то, как вы станете реализовывать сами модуль в своём коде, но всё же это досадная ошибка.

Поэтому сразу же выкладываю ссылки на исправленную и обновлённую редакцию рукописи:

на Google:
Это текст.

Как видите, поменялся только текст, архив кодов остаётся неизменным.

Кроме исправлений, текст несколько расширен теми дополнениями (по мелочам), которые накапливались, и нужно было внести раньше, да оказии не случалось. Так что текст исправлен и расширен: лучше не полениться скачать, и пользоваться именно этой редакцией:
редакция 3.168
27.11.2012г. 
Страниц 374.

воскресенье, 25 ноября 2012 г.

Инструменты Linux

Ещё одна рукопись книги + иллюстрирующие к ней примеры программ. В самом тексте рукописи заглавие записано так: «Инструменты Linux для Windows-программистов». Это не совсем соответствует действительности ...

Текст этот начал писаться для профессиональных коллег программистов (по их просьбе), работавших обстоятельно с проектированием встраиваемых устройств, с изрядным опытом, но не сталкивающиеся с операционной системой Linux. Задача была в том, чтобы набросать краткие заметки только об отличительных сторонах работы в Linux. Чтобы можно было "въехать" в практическую работу в максимально сжатые сроки.

Ну а позже текст стал расширяться, "обрастать мясом", и получилась вот такая рукопись. Название «Инструменты Linux для Windows-программистов» - это, конечно, крайне неудачно.  Windows здесь подвернулся только тем, что большинство практикующих программистов всё-таки вышли из WIndows. С равным успехом этот текст можно было назвать «Инструменты Linux для программистов из Solaris», или «Инструменты Linux для программистов UNIX», или «Инструменты Linux для программистов на PASCAL» - т.е. для всех тех, для кого не являются проблемными вопросы разработки программ вообще, кому не нужно растолковывать элементарные понятия из этой области, но кого смущают некоторые непривычные детали именно при работе в Linux.

Кроме того, по ходу расширения рукопись "накрыла", как мне кажется, часть вопросов, которые будут интересны сетевым и системным администраторам.

А как оно получилось - смотрите сами... Взять и текст и архив примеров к нему можно:

на Google:
Это сам текст (в формате OpenOffice), и архив примеров к нему.

В этой последней редакции это должен быть текст: редакция 2.70от 28.10.2012 г., страниц 170.


суббота, 24 ноября 2012 г.

Драйверы и модули ядра Linux

Рукопись книги «Модули ядра Linux» и, особенно, примеры к ней в архиве существенно дополнены. Новые редакции выложены для общего доступа:

на Google:
Это сам текст (в формате OpenOffice), и архив примеров к нему.

Теперь это должен быть текст (если ничего не напуталось): редакция 3.167 от 24.11.2012 г., страниц 372.

понедельник, 19 ноября 2012 г.

Драйверы и модули ядра Linux

Ещё относительно недавно программированием модулей ядра для Linux мало кого занимало. Во многом это было обусловлено и тем, что отсутствовала достаточная информация по вопросу. Когда я начал заниматься этим занятием, по необходимости, в реальных проектах (а было это где-то году в 2005-м), то оказалось, что из публикаций на то время в мире существовало два обстоятельных источника:



Самая старая, небольшая (112 стр.), очень известная и популярная книга, изданная, в том числе, и в переводе на русский язык: Ори Померанц, «Ядро Linux. Программирование модулей», издана в 2000 г. изд. Кудиц-Образ (ISBN 5-93378-008-1). Этот текст многократно растиражирован в сети, его неоднократно пытались адаптировать к последующим версиям ядра другие авторы, но дело не пошло дальше ядер 2.4.






Очень обстоятельное, но местами изрядно путанное, изложение от группы авторов Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman: «Linux Device Drivers» (1-я редакция - 1998г., 2-я редакция - 2001г., 3-я редакция - 2005г., ISBN: 0-596-00590-3). Этот текст также правился от редакции к редакции, но также не пошёл в описаниях дальше ядра 2.6.10. В сети выложен достаточно хороший полный перевод книги на русский язык: в формате для чтения, или для сохранения в PDF. Доступен полный архив кодов примеров к книге (архив лежит на самом сайте издательства O'Reilly, издавшего книгу, но находят его с трудом: авторы в самой книге не указали ссылку на архив, ни даже вообще не упомнили о его наличии). Оригинал книги может быть скачан здесь.





На сегодня мне известно ещё в литературе 2-3 издания относительно драйверов и модулей ядра, и ещё 3-4 книги по самому ядру, замечательно полезные при работе над модулями (позже я планирую находить и добавить ссылки в сети на эти издания, но делать это именно редактируя эту страницу).





Sreekrishnan Venkateswaran, «Essential Linux Device Drivers», Prentice Hall, 2008, стр.714. Ядро (согласно аннотации автора) до 2.6.23/2.6.24 включительно. Создан отдельный авторский сайт книги (откуда и взят вид обложки), и где могут быть взяты полные примеры программного кода к книге.









2-х томник одного из непосредственных участников команды разработки ядра Linux: Jerry Cooperstein, «Linux Device Drivers», 2009. 1-й том «A guide with exercises», стр. 372 - как понятно и из подзаголовка, это описательная часть, разбитая по темам.








Том 2: «Lab Solutions», стр. 259 - это параллельная 1-му тому лабораторная часть, иллюстрирующие примеры кода. Полный архив кодов доступен для скачивания свободно доступен здесь, что примечательно, что примеры кода обновляются автором регулярно, и последний (на сегодня) архив (13-Apr-2012) откорректирован под версию ядра Linux 3.3.






Оригиналы большинства изданий вы сможете найти и свободно скачать по ссылке к подборке материалов по ядру Linux. Там же можно взять для изучения одно из лучших изданий по 2-й из названных категорий (собственно по архитектуре ядра, не по модулям):




Wolfgang Mauerer, «Professional Linux Kernel Architecture», 2008, 1370 стр.









И тем не менее (при недостаточной освещённости), техника программирования модулей ядра Linux заметно проще, чем можно было бы ожидать, или же, сравнительно, чем техника написания драйверов во многих других, более ранних операционных системах (MS-DOS, Windows ...) и может быть использована с большой пользой не только для драйверов реальных устройств, но и для более широких классах задач (например, сетевых подсистем и протоколов, или разнообразных псевдоустройств самой широкой функциональности). 

Поэтому, когда мне предложили подготовить и прочитать учебный курс по этому предмету для сотрудников одной из крупнейших международной компании по разработке программного обеспечения Global Logic, это не могло не вызвать встречного энтузиазма и интереса. Такой курс был сделан, и "прокатан" на нескольких учебных группах. Позже материалы курса были значительно расширены (до 2-х - 3-х раз по объёму) и дополнены соответствующими примерами. Так возник проект книги...

Для тех, кого может заинтересовать техника программирования модулей ядра, показываю общедоступные ссылки где я выложил результаты этой работы (последние результаты, они ещё дополняются)...

на Google:
Это сам текст (в формате OpenOffice), и архив примеров к нему.

В первоначальном (и представленном) варианте текста полностью отсутствует раздел относительно программирования драйверов блочных устройств. Я до сих пор уверен, что программирование именно блочных устройств является частной, редко востребованной работой, свойственной, главным образом, самим разработчикам новых моделей таких накопительных устройств (вот пусть они и разрабатывают!). Тем не менее, ко мне, вопреки ожиданиям, несколько раз обращались разработчики с проблемами именно по таким устройствам. В итоге, новый большой раздел относительно блочных устройств был написан, а примеры к нему созданы, отлажены и выверены. Пока это совершенно сырой отдельный текст, не вошедший в общий объём книги. Но и он может быть взят здесь на рассмотрение. В самое ближайшее время этот материал будет ещё дополнен, и включен в общий текст книги (и, соответственно, примеры). Как только это произойдёт, я добавлю сюда в блог ссылки на обновлённый вариант.


(эта страница находится в правке, так что не обессудьте!)