Différence entre les modules Linux chargeables et les modules intégrés

Quelle est la différence entre les modules chargeables et les modules intégrés (liés statiquement)?

J’ai eu cette question en trouvant une réponse à la différence entre les appels système subsys_initcall() et module_init()

Le kernel Linux prend en charge l’insertion de modules (également appelés pilotes de périphériques) de deux manières:

  1. Modules de kernel intégrés – Lorsque le kernel est démarré, le kernel insère automatiquement ce pilote dans le kernel (c’est plus comme s’il faisait déjà partie du code du kernel).
  2. Loadable kernel module (LKM) – Un pilote qui n’est pas chargé automatiquement par le kernel, l’utilisateur peut insérer ce module à l’exécution par insmod driver.ko ou modprobe driver.ko

L’ avantage des modules chargeables sur les modules intégrés est que vous pouvez les charger au moment de l’exécution. C’est bien si vous travaillez sur un module et que vous devez le tester. Chaque fois que vous le testez et que vous devez le modifier, vous pouvez facilement le décharger ( rmmod driver.ko ou modprobe -r driver.ko ), puis, après avoir apporté des modifications, vous pouvez le réinsérer. Mais pour les modules intégrés, si vous devez apporter des modifications au module, vous devez comstackr l’intégralité du kernel, puis redémarrer le système avec la nouvelle image du kernel.

Configuration:
Vous pouvez configurer un module pour qu’il soit l’un des deux en éditant le fichier .config dans le dossier racine de votre source de kernel:

 DRIVER_1=y // y indicate a builtin module DRIVER_1=m //m inicates a loadable module 

Remarque: lsmod affiche uniquement les dynamically loaded modules pas les dynamically loaded modules built-in .

Lisez sur: http://www.tldp.org/HOWTO/Module-HOWTO/x73.html