Gerar ELF inicializável a partir do gerenciador de inicialização, kernel, árvore de dispositivos, ramdisk

2

Sou novo na programação do Kernel do Linux, e estou muito empacado com (o que eu acho) o último passo na criação da minha imagem inicializável.

Por algum motivo, estamos tentando fazer upload de uma imagem completa do sistema operacional para o processador PPC440 endurecido dentro de um FPGA Virtex 5 via JTAG. Estamos mudando de um sistema operacional obsoleto para um kernel Linux personalizado da Xilinx com suporte contínuo. O arquivo necessário para este upload é um único ELF contendo todo o sistema operacional e seus aplicativos, que (acreditamos) consiste em um gerenciador de inicialização, kernel, árvore de dispositivos e imagem do disco RAM.

Tivemos algum sucesso com a compilação usando o ELDK, que produz o arquivo correto e é executado no processador; no entanto, o suporte para o ELDK é limitado e inclui bibliotecas antigas ( libc 2.6, por exemplo) e utilitários antigos. Seria melhor para a capacidade de manutenção criar um conjunto de ferramentas e programas mais atualizados.

Ignorando algumas etapas, podemos construir o que acreditamos ser os principais componentes do ELF. Temos o u-boot para o nosso gerenciador de inicialização, um kernel zImage , o blob da árvore de dispositivos compilada e uma imagem de ramdisk com todas as nossas bibliotecas necessárias.

O que eu estou tentando entender é como envolvê-los em um único arquivo. O u-boot contém um utilitário mkimage que permite concatenar os últimos três itens e carregá-los com um comando do prompt de inicialização, mas é possível concatenar todos os quatro, já que o ELDK produz um único arquivo com ( acredite) todas essas peças dentro.

Alguém sabe o que eu estou sentindo falta aqui? Essa etapa de concatenação é simples ou estamos fora de controle?

Obrigado!

    
por dustinwerran 23.01.2018 / 18:11

1 resposta

0

Eu consegui responder a pergunta. Ao criar o kernel do linux, você só precisa especificar o destino como o seguinte: simpleImage.initrd.[device-tree-name] . Isso diz ao Makefiles para envolver o zImage, a imagem do ramdisk (deve ser denominada ramdisk.image.gz e colocada em arch/[your-arch]/boot ) e seus dts (devem ser denominados device-tree-name e colocados em arch/[your-arch]/boot/dts ). Ele também irá compilar automaticamente seu .dts em um .dtc para você durante a criação.

Observe que este ELF de saída não inclui um gerenciador de inicialização. Isso precisará ser tratado separadamente.

    
por 08.02.2018 / 11:57