Bon alors déjà le C n'est pas un script car c'est compilé et pas interprété. Concrètement ça veut dire que le code source est lu par un compilateur qui génère un exécutable et le programme en lui même est dès lors complètement indépendant du code source (contrairement par exemple à un script shell).
Ensuite un .ko est en fait un module, c'est à dire un morceau de kernel que l'on peut charger ou décharger a priori à volonté (voir les commandes modprobe, insmod, rmmod, et lsmod). Vois un module comme un driver (par exemple tu peux avoir un module qui sert à controler ta carte wifi, un autre le "bip" de ta carte mère etc...). Chaque module ne peut être chargé que si ça version correspond à celle du noyau sur lequel tu as démarré. Pour voir ta version de kernel :
uname -a
Exemple :
(mando@cobo) (~) $ uname -a
Linux cobo 2.6.15-1-686-smp #2 SMP Mon Mar 6 15:34:50 UTC 2006 i686 GNU/Linux
Celà signifie que là je ne peux charger que des noyaux pour un noyau 2.6.15-1-686-smp. Les modules correspondants sont dans /lib/modules/2.6.15-1-686-smp/
Quand tu utilises la commande modprobe (qui sert à charger un module), il va automatiquement piocher dans le répertoire associé à ton noyau, contrairement à la commande insmod. Tu peux ensuite vérifier que le module est chargé correctement avec la commande
lsmod
Pour plus d'informations tape dans une console :
man rmmod
man lsmod
man modprobe
man insmod
Enfin la ligne dont tu parles dans le makefile sert uniquement à créer les .ko dans le bon répertoire lors de la compilation. Bien sûr la compilation, l'insertion, la suppression de module ne peuvent être faits qu'en root.
Bonne chance