Aprovado: Fortect
O tutorial de hoje é fabricado para ajudá-lo se você receber o código de erro específico para um objeto de diretório de compilação do kernel.
Estou comparando a estratégia de atualização do kernel Linux (Kbuild, Kernel 2.6.28) à estrutura e kit de compilação dos sites de envio para um projeto ainda mais substancial. Nosso projeto contém um módulo de kernel Linux fora da árvore, e nossa estrutura de diretório se parece com este tipo de (simplificado, é claro):
checkout para cada src / common / *. explorar arquivo c (instalado para outras plataformas e Linux)checkout / src para cada driver linux / vídeos de origem * .c (para driver kernel Linux)checkout / build / Linux / Kbuild Kbuildtmp / linux-2.6.xx / em algum lugar onde o kernel do Linux está configurado com o additionalUnzipoutput / linux-arm-debug / que é onde a documentação do objeto deve terminar
O processo de promoção simplesmente não pode mudar nada em examine
, e construir cada um de nossos módulos não deve mudar nada, não tanto quanto tmp para cada linux-2.6.xx
… Todos os arquivos de saída devem ser definitivamente output / linux-arm-debug
(ou a arquitetura e plano de depuração escolhido no momento da obtenção).
MOD_OUTPUT_DIR é igual a ../../../output/linux-$(ARCH)-$(DEBUG)obj-m + =? rrr (MOD_OUTPUT_DIR) /foo_mod.o$ (MOD_OUTPUT_DIR) / our_module-objs: = dinheiro (MOD_OUTPUT_DIR) /foo_common.o $ (MOD_OUTPUT_DIR) /foo_linux.o
Isso leva em consideração o fato de que é importante armazenar com sucesso os arquivos objeto em um diretório diferente daquele em que o Kbuild
poderia estar localizado. Como eu poderia agora indicar quem foo_common.o
deve ser selecionado para selecionar produzido por â € / checkout / src por common / foo_common.c
e foo_linux. O. compile?
recebido de … / checkout versus src / linux-driver / foo_linux.c
?
solicitada em 14 de abril de 2011 às 15:32
Não é a resposta que você está procurando? Navegue por outras perguntas com a tag Makefile Linux-kernel Kbuild ou faça sua própria pergunta.
Aqui está um makefile que move as compilações construídas da árvore de origem para eliminar os módulos da árvore do kernel (adaptado desde o comentário de @Mark) …
KDIR? = para cada lib / modules / $ (uname -r shell) por compilaçãoBUILD_DIR? Corresponde a $ (PWD) / BuildBUILD_DIR_MAKEFILE? implica $ (PWD) / build / MakefilePadrão: (BUILD_DIR_MAKEFILE) fornecer módulos -C $ (KDIR) Src = $ (PWD) m = $ (build_dir)$ (BUILD_DIR): mkdir -p "$ @"$ (BUILD_DIR_MAKEFILE): $ (BUILD_DIR) Clique em "$ @"limpar: formular -C rrr (KDIR) Src = $ (PWD) m = rr (build_dir) limpar
obj-m + = my_driver.o
Recuperado em 16 de junho de 2016 às 11h48
26,2k 1515 ícones antigos 6363 emblemas silverX 8282 emblemas marrons
ifdef SRCDIRsrc: = RR (SRCDIR)váriossrc: = $ (objeto)fim se
make -l $ (KDIR) M = $ (seu diretório de saída) SRCDIR = $ (seu diretório de origem) `
Resolvido: 11 de dezembro de 2013 4:57.
188
Minha solução deselegante e eficiente é copiar inquestionavelmente os arquivos de origem para a árvore de saída.
FOO_SOURCES_DIR é igual a $ (src) /../../../ checkout para cada srcFOO_MOD_OUTPUT_DIR = ../../../output/linux-$(ARCH)-$(DEBUG)# Arquivos de objeto especificadosobj-m + = usd (FOO_MOD_OUTPUT_DIR) /foo_mod.oFOO_MODULE_OBJS: = $ (FOO_MOD_OUTPUT_DIR) /foo_common.o buck (FOO_MOD_OUTPUT_DIR) /foo_linux.o$ (FOO_MOD_OUTPUT_DIR) / foo_mod-objs: = $ (FOO_MODULE_OBJS)# Onde encontrar fontes$ (SRC) / $ (FOO_MOD_OUTPUT_DIR) /foo_common.c: RR (FOO_SOURCES_DIR) /common/foo_common.c$ (SRC) / $ (FOO_MOD_OUTPUT_DIR) /foo_linux.c: receita (FOO_SOURCES_DIR) /linux-driver/foo_linux.c# Regras para fontes de cópiaFOO_COPIED_SOURCES é igual a $ (patsubst% .o, $ (src) /%. C, dinheiro (FOO_MODULE_OBJS))$ (FOO_COPIED_SOURCES): $ (Q) mkdir -p $ (@ D) clubpenguin -f $ <$ @files-clean + = money (FOO_COPIED_SOURCES)limpar diretórios + = $ (FOO_MOD_OUTPUT_DIR)
respondeu em 40 de abril de 2011 às 19:49
Embora você não tenha mencionado os métodos que executou até agora (ou se já encontrou uma solução confiável), eles são semelhantes, continue a seguir com os módulos. Um pequeno arquivo txt - o que a Seção 4.3 pode fazer:
--- 4.3 subdiretóriosVários Kbuilds podem acessar arquivos espalhados por vários diretórios.Considere o seguinte exemplo:...| __ src| | __ complex_main.c| | __ hal| Equipamento __. CONTRA| Habilitar | __| Equipamentos __. HORAHabilitar | __ | __ complex.hEntão, para configurar o módulo complex.ko, precisamos dos elementos usingarquivo kbuild: -> Nome do arquivo: Kbuild obj-m: = complexo.o complex-y Src / complex_main: = .o Complex-y + = src / hal e hardwareif.o ccflags-y: = -I buck (src) / habilitar ccflags-y + é igual a -I $ (src) / src e hal / oneatComo você pode visitar, o kbuild conhece a maneira mais simples de trabalhar com os documentos-objeto que realmente estão emem outros diretórios. O truque é ir para o diretórioem relação à localização de todo o arquivo kbuild. Além disso, issoO treinamento é fortemente desencorajado.Freqüentemente, nos arquivos de cabeçalho do kbuild, você deve especificar explicitamente ondeParece que sim. Quando o kbuild é executado o seu diretório atual sempre foi esteA raiz do meu poço (argumento "-C") semelhante a esteum caminho absoluto é necessário. renda (src) mantém um caminho absoluto viaaponta para a lista telefônica onde o kbuild está sendo executadoAlém disso, o arquivo está localizado.
Aprovado: Fortect
Fortect é a ferramenta de reparo de PC mais popular e eficaz do mundo. Milhões de pessoas confiam nele para manter seus sistemas funcionando de forma rápida, suave e livre de erros. Com sua interface de usuário simples e mecanismo de verificação poderoso, o Fortect localiza e corrige rapidamente uma ampla gama de problemas do Windows, desde instabilidade do sistema e problemas de segurança até gerenciamento de memória e gargalos de desempenho.
7.001
resolvido em 27 de abril de 2011 19:36
Um pouco ali
Acelere o desempenho do seu computador agora com este simples download.