Энциклопедия разработчика модулей ядра Linux
Шрифт:
1. asm/uaccess.h: Если Вы нуждаетесь в put_user или get_user: Вы должны #include его.
2. get_user в версии 2.2: get_user получает указатель в памяти пользователя и переменную в памяти ядра, чтобы заполнить информацией. Причина для этого в том, что get_user, может теперь читать два или четыре байта одновременно, если переменная, которую мы читаем длиной два или четыре байта.
3. file_operations: Она теперь выполняет функцию flush между функциями open and close.
4. close в file_operations: В версии 2.2, функция close возвращает
5. read и write в file_operations: Изменились заголовки для этих функций. Они сейчас возвращают ssize_t вместо целого числа, и их список параметра различен. Inode больше не параметр, и с другой стороны смещение в файле.
6. proc_register_dynamic: Функция больше не существует. Вместо нее Вы вызываете proc_register и помещаете ноль в поле inode структуры.
7. Сигналы: Сигналы в структуре task больше не 32 разрядные целые числа, а массив _NSIG_WORDS целых чисел.
8. queue_task_irq: Даже если Вы хотите обратиться к запланированной задаче из внутреннего обработчика прерывания, Вы используете queue_task, а не queue_task_irq.
9. Параметры модуля: Вы объявляете параметры модуля как глобальные переменные. В 2.2 Вы должны также использовать MODULE_PARM, чтобы объявить их тип. Это большое усовершенствование, потому что позволяет модулю получать параметры строкового типа, которые начинаются с цифр.
10. Симметричная многозадачность: Ядро больше не заперто внутри одного огромного spinlock, что означает что два процессора могут одновременно обрабатывать разные части ядра. Модули должны знать о SMP.
Что дальше?
Я мог бы легко добавить еще несколько глав в эту книгу. Я мог бы добавить главу о создании новых файловых систем, или о добавлении новых стеков протоколов (как будто имеется потребность в такой главе: вы должны рыть под землей, чтобы найти стек протоколов, не поддерижаемый Linux). Я мог бы добавить объяснение ядерных механизмов, которых мы не коснулись, типа начальной загрузки или дискового интерфейса.
Однако, я выбрал не это. Моя цель состояла в том, чтобы обеспечить введение в тайны программирования модулей ядра и обучить общим методам для этой цели. Для людей, серьезно заинтересованных программированием ядра, я рекомендую список ресурсов на:Также, как сказал Linus, самый лучший путь состоит в том, чтобы прочитать исходный текст самостоятельно.
Если вы заинтересованы в большом количестве примеров коротких модулей, я рекомендую журнал "Phrack". Даже если вы не заинтересованы защитой, модули имеют хорошие примеры того, что Вы можете делать внутри ядра, и они достаточно короткие, чтобы не требовать слишком много усилий для понимания.
Я надеюсь, что я помог Вам в ваших попытках стать лучшим программистом. И, если Вы пишете полезные модули для ядра, я надеюсь, что Вы издаете их под GPL, так что я тоже смогу их использовать.
Goods and Services
Честно говоря, я так и не понял, что именно в данном разделе хотел сказать автор, так что привожу без перевода.
I hope nobody minds the shameless promotions here. They are all things which are likely to be of use to beginning Linux Kernel Module programmers.
Получение книги в бумажном виде
Издательство Coriolis group собиралось печатать эту книгу летом 1999 года. Правда, на английском языке. Попробуйте ее найти, если считаете нужным иметь бумажную копию.
Поблагодарите автора
Это свободно распространяемый документ. Вы не имеете никаких обязательств кроме указанных GNU Public License (GPL) (Приложение E). Однако, если Вы считаете нужным как-то отблагодарить за получение этой книги, имеется несколько способов, которые Вы могли бы использовать.
• Пошлите мне открытку по адресу:
Ori Pomerantz
Apt. #1032
2355 N Hwy 360
Grand Prairie
TX 75050
USA
Если Вы хотите получить благодарность, включите ваш адрес электронной почты.
• Жертвуйте деньги, или еще лучше, время, на Свободное Программистское Сообщество. Пишите программы или документы и издавайте их по GPL. Обучите другие людей, как использовать свободное программное обеспечение типа Linux или Perl.
• Объясните людям, что нередко эгоизм совместим с проживанием в обществе или с помощью другим людям. Я писал этот документ, веря публикации в то, что он будет опубликован и немало принесет мне в будущем. В то же самое время, я написал книгу, которая помогает Вам. Не забудьте, что счастливые люди обычно более полезны для себя чем несчастные люди, и способные люди лучше, чем люди низкой способности.
• Будьте счастливы. Если я когда-либо встречусь с Вами, это сделает встречу лучше для меня, а Вас более полезными для меня ; -).
Лицензия фонда GNU (The GNU General Public License)
Во избежание искажения смысла лицензии, являющейся юридическим документом, привожу ее в оригинальном виде (скопирована из оригинальной документации).
Printed below is the GNU General Public License (the GPL or copyleft ), under which this book is licensed.
Copyright ©1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software-to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.