Статическое и динамическое связывание модулей в Android

#android #linux-kernel #dynamic-linking #static-linking

#Android #linux-ядро #динамическое связывание #статическое связывание

Вопрос:

Почему большинство модулей в Android статически привязаны к ядру, а не загружаются динамически?

Ответ №1:

Наличие немодульного ядра является обычной практикой во встраиваемых системах. В отличие от настольного компьютера / сервера, на телефоне аппаратное обеспечение вряд ли изменится, большинство из них не имеют USB-портов и, следовательно, нет необходимости загружать функции ядра / аппаратную поддержку в виде модулей.

Вы знаете файловую систему, которую хотите использовать, сетевые интерфейсы, для которых вам нужна поддержка и т.д., И Все это может быть встроено в ядро вместо того, чтобы загружать их динамически.

Критерии, которые я использую, чтобы решить, что входит в ядро, а что встроено в виде модулей — если есть функции (например, поддержка сетевого интерфейса / файловой системы), которые вам постоянно нужны, затем включите их в ядро. Если есть функции, которые вам понадобятся только в определенных точках (например, модули netfilter), создайте их как модули

Комментарии:

1. Спасибо за ваш ответ. Но недостатком этого подхода является то, что время загрузки увеличивается из-за более крупного ядра. Не было бы лучше разместить модули в sysstem / lib / modules и «insmod» их, когда они требуются?

2. я обновил свой ответ, чтобы частично ответить на ваш вопрос, касающийся времени загрузки, если это модуль для поддержки файловой системы, вам все равно придется его в конечном итоге загружать, поэтому на самом деле не имеет значения, загружаете ли вы его во время загрузки или как модуль

3. На самом деле вы можете быстрее загружать встроенную систему, используя модули, даже для тех вещей, которые, как вы знаете, вам понадобятся в конечном итоге. например, просто создайте то, что необходимо для работы дисплея и запуска пользовательского пространства в ядре, чтобы вы могли отображать графический интерфейс, затем в фоновом режиме загружать свои сетевые модули и т.д. Это заставляет систему быстрее реагировать, даже если она на самом деле не загружается полностью немного дольше.