Burada aşağıdaki cevabı buldum :
Kısa yanıt, .ko dosyasının, çekirdek tarafından ihtiyaç duyulan bazı çekirdek otomatik olarak oluşturulan veri yapılarıyla bağlantılı nesne dosyanız olmasıdır.
.O dosyası modüllerinizin nesne dosyasıdır - c dosyalarınızı derlemenin sonucu. Çekirdek oluşturma sistemi daha sonra otomatik olarak çekirdek modülünü (sizin_modül_kmod.c olarak adlandırılır) tanımlayan bazı veri yapılarına sahip başka bir C dosyası oluşturur, bu C dosyasını başka bir nesne dosyasına derler ve .ko dosyasını oluşturmak için nesne dosyanızı ve oluşturduğu nesne dosyasını birbirine bağlar. dosya.
Çekirdek modüllerinin yüklenmesinden sorumlu çekirdek içindeki dinamik bağlayıcı, çekirdeğin .ko dosyasında kmod nesnesine koyduğu veri yapısını bulmayı bekler ve çekirdek modülünüzü onsuz yükleyemez.
Ayrıca bu kaynaktan , tldp'ye atıfta bulunarak : 2.4 çekirdek sürümüne kadar, ".o" idi ve 2.6'dan beri ".ko".