É bastante simples, embora devamos distinguir entre "driver" e "module". Um driver pode ou não ser um módulo. Se não for, então ele é embutido no kernel carregado pelo bootloader.
Se for um módulo, então ele está em uma hierarquia de sistema de arquivos com raiz em /lib/modules/[kernel-release]
. 1 Note que é possível inicializar um kernel junto com um pequeno sistema de arquivos raiz preliminar (um "initramfs" ") que pode conter tal repositório também. Isso é normal com os kernels genéricos para que eles possam decidir quais drivers modulares eles precisam carregar para acessar o sistema de arquivos real, já que se eles não puderem fazer isso, eles não poderão acessar nenhum módulo lá.
Are drivers loaded by the kernel ?
Sim.
if so why are they already a part of the rootfs ?
Onde mais eles devem ser armazenados antes de serem carregados? O kernel não contém o rootfs dentro dele (exceto WRT algumas formas de initramfs), é apenas o gatekeeper.
does the kernel overwrite them with the ones compiled in it ?
Não. Se você compilar um driver, o kernel não se importará em verificar /lib/modules
para ele. Eu não tenho certeza do que acontece se você perguntar explicitamente para carregar um driver desse tipo, presumivelmente ele simplesmente dirá não.
1. Como Celada sugere com $(uname -r)
, esta string de lançamento não é necessariamente apenas o número da versão. Você pode ter vários kernels com a mesma versão e diferentes strings de liberação, portanto, armazenamentos de módulos separados. Da mesma forma, você pode ter vários kernels com a mesma string de lançamento, portanto, o mesmo armazenamento de módulo.