Módulos do Kernel: .o vs .ko

8

Parece que os arquivos contendo módulos do kernel são chamados de .o , pelo menos é o que eu acho ao olhar para um tutorial como este . No entanto, na minha squeeze debian, esses arquivos parecem ser chamados .ko .

Depende da distribuição (ou da verificação dela) se os arquivos são chamados de .o ou .ko , e eles são mais ou menos os mesmos, do contrário?

    
por zebonaut 22.02.2013 / 21:31

2 respostas

10

Encontrei a seguinte resposta aqui :

The short answer is that the .ko file is your object file linked with some kernel automatically generated data structures that are needed by the kernel.

The .o file is the object file of your modules - the result of compiling your c files. The kernel build system then automatically creates another C file with some data structures describing the kernel module (named your_module_kmod.c), compile this C file into another object file and links your object file and the object file it built together to create the .ko file.

The dynamic linker in the kernel that is in charge of loading kernel modules, expects to find the data structure the kernel put in the kmod object in the .ko file and will not be able to load your kernel module without them.

Também de essa fonte , citando tldp : versões de kernel até 2.4, era ".o" e, desde 2.6, é ".ko".

    
por 22.02.2013 / 21:40
2

Parece um antigo howto (tutorial), em fatos ele foi escrito em 2005. Quando o kernel Linux era 2.4.x os módulos tinham extensão .o, enquanto em 2.6 eles se tornavam .ko

    
por 22.02.2013 / 22:18