Глава 11, Типы данных в ядре
Прежде чем перейти к более сложным темам, мы должны остановиться для быстрых замечаний о вопросах переносимости. Современные версии ядра Linux весьма переносимы, работают на большой числе различных архитектур. Учитывая мультиплатформенный характер Linux, драйверы, предназначенные для серьёзного использования также должны быть переносимыми.
Но основными проблемами с кодом ядра являются возможность доступа к объектам данных известной длина (например, структуры данных файловой системы или регистры на плате устройства) и эксплуатация возможностей разных процессоров (32-х разрядных и 64-х разрядной архитектур и, возможно, также 16-ти разрядных).
Некоторые из проблем, с которыми столкнулись разработчики ядра при переносе кода x86 на новые архитектуры, были связаны с неправильной типизацией данных. Соблюдением строгой типизации данных и компиляцией с флагами -Wall -Wstrict-prototypes можно предотвратить большинство ошибок.
Типы данных, используемые данными ядра, разделены на три основных класса: стандартные типы Си, такие как int, типы с явным размером, такие как u32 и типы, используемые для определённых объектов ядра, такие как pid_t. Мы собираемся показать когда и каким образом должен быть использован каждый из трёх типовых классов. В заключительных разделах главы говорится о некоторых других типичных проблемах, с которыми можно столкнуться при переносе кода драйвера с x86 на другие платформы и представляется обобщённая поддержка связных списков, экспортируемых соответствующими заголовками ядра.
Если вы будете следовать предлагаем принципам, ваш драйвер должен компилироваться и работать даже на платформах, на которых вы не сможете его протестировать.
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.