Saya menemukan jawaban berikut di sini :
Jawaban singkatnya adalah bahwa file .ko adalah file objek Anda yang ditautkan dengan beberapa struktur data kernel yang dihasilkan secara otomatis yang diperlukan oleh kernel.
File .o adalah file objek modul Anda - hasil kompilasi file c Anda. Sistem kernel membangun kemudian secara otomatis membuat file C lain dengan beberapa struktur data yang menggambarkan modul kernel (bernama your_module_kmod.c), mengkompilasi file C ini ke file objek lain dan menautkan file objek Anda dan file objek yang dibangun bersama-sama untuk menciptakan .ko mengajukan.
Dynamic linker di kernel yang bertanggung jawab atas pemuatan modul kernel, mengharapkan untuk menemukan struktur data yang diletakkan kernel pada objek kmod dalam file .ko dan tidak akan dapat memuat modul kernel Anda tanpa mereka.
Juga dari sumber itu , mengutip tldp : Hingga versi 2.4 kernel, itu adalah ".o", dan sejak 2.6, itu ".ko".