Придерживайтесь алфавитно-цифровых имен файлов. Избегайте пробелов или замените пробелы символами нижнего подчеркивания (_). Предельная пунктуация в именах файлов к периодам (.), символы нижнего подчеркивания (_), и дефисы (-). Обычно имена файлов являются нижним регистром, но я использую CamelCase, когда у меня есть несколько слов в имени файла.
Используйте расширения, которые указывают на тип файла. Для программ не нужны расширения, поскольку выполнить бит используется для указания на программы, и оболочки знают, как запустить программы различных типов. Это распространено, но не необходимо к (.sh) для сценариев оболочки и (.pl) для сценариев жемчуга. Исполнимые расширения Windows .bat, .com, .scr, и .exe указывают на исполняемые файлы Windows на Unix.
Выберите стандарт и придерживайтесь его. Но это не повредит вещи при предотвращении его.
Скрытый (или точка) файлы имеют имена, запускающиеся с периода. Они обычно не обнаруживаются в списках каталогов. Используйте 'ls-a' для включения точечных файлов в список.
Это зависит. Если у Вас есть небольшой объем памяти, использование модулей может улучшить резюме, поскольку они не перезагружаются каждый раз (я нашел это значительным на 2 гибибайтах RAM, но не на 4 гибибайтах на традиционных жестких дисках). Это особенно верно в срок для некоторой ошибки в аккумуляторном модуле (независимо от того, чтобы быть скомпилированным - в или как модуль), это брало очень долго для запуска (несколько минут). Даже без ошибки на хинду мне удалось сократить время (сообщаемый systemd-analysis
) от 33 до 18 только путем изменения от статически скомпилированного ядра до модулей - 'удивительно' запуск ядра, измененного от 9 с до 1,5 с.
Кроме того, когда Вы не знаете, какие аппаратные средства Вы собирающийся использовать, модули явно выгодны.
PS. Можно скомпилировать даже жизненные драйверы как модули, пока Вы включаете их в initrd. Например, дистрибутивы будут включать файловую систему/, драйверы жесткого диска и т.д. в initrd на установке.
Насколько я знаю, нет никакого различия в скорости.
Я думаю, что Вы получите некоторых КБ памяти ядра, поскольку гранулярность выделений составляет одну страницу, таким образом, на типичной архитектуре каждый модуль отходы в среднем приблизительно 2 КБ (½ страницы) на потенциальный модуль. Даже во встроенных системах, это едва значительно. Вы также получаете немного дискового пространства, поскольку модули могут быть сжаты в том же, идут как ядро; это может быть более релевантно во встроенных системах с небольшим устройством хранения данных.
Если можно обойтись без модулей в целом, Вы сохраняете немного памяти ядра (никакая потребность в загрузчике модуля), дисковое пространство (никакая потребность в утилитах модуля), и сложность системы (никакая потребность включать модуль, загружающийся как функцию в Вашем распределении). Эти точки довольно привлекательны в некоторых встроенных проектах, где аппаратные средства не расширяемы.
Пара потенциальных выгод. Производительность является спорной. Вы избежали бы некоторого времени выполнения, наверху связанного с динамическим загрузчиком, но я сомневаюсь, что это - грандиозное предприятие, если Вы не в зависимости от планировщика в реальном времени.
Если Вы используете в своих интересах большие страницы в своей системе, то, возможно, создание большего статического изображения ядра означает создание более эффективного использования кэша дескриптора страницы. Некоторые системы будут 'держать ядро в клетке' так, чтобы оно упаковало плотно в одну местность памяти, которая может облегчить некоторую сумму задержки из-за несовершеннолетнего и возможно главных, отсутствий страницы.
Это могло бы подойти Вам, архитектурно, для поставки Одного Большого Изображения, утверждая, что меньше независимых модулей легче поддержать, и потеря гибкости не важна. Много этого вида обоснования предприятий в вопросы стиля и практики.
Иногда это необходимо. При компиляции некоторого жизненного драйвера (например, драйвера SCSI) как модуль система не загрузится.
Другой великий кандидат на то, чтобы не скомпилировать как модуль является типом файловой системы корневого раздела. Если ядро не понимает ext3
читать /lib/modules/
как будет он загрузочные модули от него?
Думайте об этом этот путь: для использования модулей, ядро должно знать достаточно о системе к считать и загрузить модули ядра. Используйте это и метод проб и ошибок :-)
Я статически компилирую каждый драйвер для встроенных аппаратных средств в ядре. Исключением были бы аппаратные средства, которые не являются постоянными (usb подключил аппаратные средства, например).
Поскольку моя аппаратная конфигурация вряд ли изменится в ближайшее время, я не беспокоюсь модулями.