J'essaie actuellement de remplacer manuellement le noyau d'ubuntu-core sur un périphérique embarqué par un noyau personnalisé. Cependant, lorsque j'essaie de mettre à jour l'initrd, celui-ci devient beaucoup plus gros.
Voici ce que j'ai fait :
- Extraire l'initrd qui a été livré avec ubuntu.
- Faire une liste de tous les modules dans l'ancien initrd
- obtenir les mêmes modules auprès du nouveau directeur de module à
/lib/modules/new_kernel_version
- ajouter ces modules à l'initrd et supprimer les anciens modules
Si je fais cela, mon initrd devient beaucoup plus gros que l'original, alors j'ai vérifié les modules individuels. J'ai choisi le btrfs.ko
à titre d'exemple. En comparant ces deux modules, j'ai remarqué que celui que je viens de prendre dans l'initrd était beaucoup plus gros, ce qui a causé la différence de taille.
-rw-r--r-- 1 root root 999K Nov 14 15:06 btrfs.ko
Pour le btrfs.ko
dans l'initrd livré.
-rw-r--r-- 1 root root 7.2M Nov 14 15:08 btrfs.ko
Pour le nouveau btrfs.ko
.
Quelle est la différence entre ces deux modules ? Cela pourrait-il être dû à un réglage défectueux du nouveau noyau ? Lors de la création du noyau, j'ai copié /proc/config.gz
et utilisé make oldconfig
pour le mettre à jour, donc toutes les optimisations devraient être les mêmes pour les deux noyaux.
Ou bien y a-t-il quelque chose d'autre qui est fait aux modules avant qu'ils ne soient mis dans l'initrd ? Peut-être y a-t-il même une meilleure façon de construire un nouvel initrd pour le nouveau noyau dans ubuntu tout court.
Mise à jour :
J'ai également testé avec un initrd que j'ai créé de toutes pièces en utilisant la fonction mkinitrfs
dans ubuntu, et il y a la même différence de taille que pour l'initrd que j'ai mis à jour manuellement.