Библиотека сайта rus-linux.net
Различия между
версиями 2.0 и 2.2
Я не знаю, что все ядро достаточно хорошо документирует все изменения. В ходе преобразования примеров (или фактически, адаптации изменений Еммануела Папиракиса) я натолкнулся на следующие различия. Я привожу их все здесь вместе, чтобы помочь программистам, особенно тем, кто обучался на предыдущих версий этой книги и наиболее знакомы с методами, которые я использую, и преобразовываю в новую версию.
Дополнительный ресурс для людей, кто желают преобразоваться в 2.2,
находится по адресу:
http://www.atnf.csiro.au/~rgooch/linux/docs/porting-to-2.2.htm
.
- 1.
- asm/uaccess.h: Если Вы нуждаетесь в
put_user
илиget_user
: Вы должны #include его. - 2.
- get_user в версии 2.2:
get_user
получает указатель в памяти пользователя и переменную в памяти ядра, чтобы заполнить информацией. Причина для этого в том, чтоget_user
, может теперь читать два или четыре байта одновременно, если переменная, которую мы читаем длиной два или четыре байта. - 3.
- file_operations: Она теперь выполняет функцию
flush
между функциямиopen
andclose
. - 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.
1999-05-19