Arquivos de montagem na lista obj-m ao construir módulos do kernel

1

Estou tentando construir o kexec como um módulo, mas estou me deparando com um problema estranho. Meu obj-m é:

obj-m += kexec.o machine_kexec.o relocate_kernel.o

Quando executo o makefile, ele reclama que "não há regra para fazer o relocate_kernel.c, necessário para o relocate_kernel.o"

Como devo estar dizendo para incluir o arquivo de montagem? Eu olhei no kernel Makefile, e enquanto eu não sou muito bom com eles, parece que há uma regra para .S > .o. Estou errado sobre isso?

    
por trycatch 09.05.2013 / 15:31

1 resposta

4

Como sempre, RTFM. Respondendo isso e deixando para ajudar os outros que podem se deparar com isso. De acordo com o projeto de documentação do Linux, eu estava usando o obj-m errado:

Sometimes it makes sense to divide a kernel module between several source files. Here's an example of such a kernel module.

[ Source files ... ]

And finally, the makefile:

Example 2-10. Makefile

obj-m += hello-1.o obj-m += hello-2.o obj-m += hello-3.o obj-m += hello-4.o obj-m += hello-5.o obj-m += startstop.o startstop-objs := start.o stop.o

all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Guia de programação do módulo Linux Kernel: 2.7. Módulos que abrangem vários arquivos

Então, meu Makefile deveria ter lido:

obj-m += kexecmod.o
kexecmod-objs := kexec.o machine_kexec.o relocate_kernel.o

Qual compilado relocate_kernel.S em relocate_kernel.o

(Para alguém que esta tentando compilar o kexec como um módulo, eu ainda não encontrei todas as dependências, mas isso é um começo.)

    
por 09.05.2013 / 16:29