Eu construí meu kernel Linux (3.0.1) para o meu Raspberry Pi com as seguintes etapas:
1. Downloading kernel source
2. tar xvf source.tar.bz2
3. downloading arm cross compilation tool.
4. tar xvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
5. setting up path for cross tool export PATH=$PATH:/home/shan/<cross tool folder>/bin/
6. after entering linux source dir make ARCH=arm versatile_defconfig (is this reliable with raspberry pi)
7. make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
8. zImage is generated in /arch/arm/boot
Minha pergunta é: como posso construir o kernel.img? Eu acho que ele contém zImage + ramdisk, mas como posso criar isso?
Alguém pode me orientar a fazer ramdisk e empacotar esses dois no arquivo kernel.img? Eu quero inicializar este kernel no meu Raspberry Pi.
cross-compilation
linux
kernel
arm
Shantanu Banerjee
fonte
fonte
kernel.org
site?Respostas:
arquivo kernel.img
Ao usar o kernel do Linux, o
kernel.img
arquivo é apenas um renomeadolinux/arch/arm/boot/Image
. Também deve ser possível (ou pelo menos foi possível da última vez que verifiquei) usar a versão compactada deste arquivo -zImage
. Pode conter integradoinitramfs
(ramdisk), mas não é necessário. Por exemplo, okernel.img
arquivo de ações não contéminitramfs
enquanto contémkernel_emergency.img
.Nota: O guia oficial de compilação do kernel no wiki do eLinux sugere que você use a
imagetool-uncompressed.py
ferramenta para preparar okernel.img
arquivo. Era necessário nos primeiros dias do RaspberyPi, mas atualmente o gerenciador de inicialização pode lidar com arquivosImage
ezImage
arquivos regulares .Problema nas fontes do kernel
O que é muito importante é que, ao criar o kernel para o RaspberryPi, você não pode simplesmente usar qualquer versão dele. Somente a versão especial que é portada para o RaspberryPi funcionará. Infelizmente, a versão atual do upstream (encontrada no
kernel.org
site) não é compatível com o RaspberryPi. Além disso,versatil_config
não é bom para o RaspberryPi, você deve usá-lobcmrpi_defconfig
(encontrado em fontes de kernel compatíveis com RaspberryPi) oubcmrpi_emergency_defconfig
se planeja usar o buildininitramfs
.Instruções de construção do kernel
O melhor lugar para pegar fontes de kernel para o RaspberryPi é no github da fundação . Você também pode encontrar algumas explicações úteis sobre como obtê-lo e como compilá-lo no wiki oficial do RasbperryPi . Aqui está minha pequena versão simplificada das etapas envolvidas (NOTA: Suponho que você queira compilar o kernel. É muito mais rápido e deve criar os mesmos resultados, mas também é possível criar o kernel nativamente no RaspberryPi):
Faça o download do toolchain oficial e crie seu próprio. De qualquer maneira, presumo que esteja instalado
/usr/bin/arm-linux-gnueabi-*
. Se você o tiver em outro lugar, deverá alterar aCROSS_COMPILE
opção em todos os seusmake
comandos.Acesse o site https://github.com/raspberrypi/linux, onde você pode encontrar fontes oficiais do kernel do RapsberryPi. Você pode baixar o código de duas maneiras:
git
utilitário e pode fazer isso mesmo no RapsberryPi): Clique noZIP
ícone, um pouco abaixo daCode
guia na parte superior do site. Isso deve permitir que você baixe os arquivos de origem comozip
arquivo. Você pode usar o git para fazer isso, mas isso (como descrito no wiki) precisará de muito mais espaço e tempo. Em seguida, descompacte o arquivo para obter a árvore de origem.Usando o
git
utilitário (isso não funcionou para mim no RaspberryPi, pois provavelmente há uma pequena quantidade de RAM, mas deve funcionar bem em sistemas desktop) (observe o--depth 1
argumento que impede o git de baixar todo o histórico do desenvolvimento (que é enorme):Use a configuração padrão fornecida pela fundação:
Execute
make oldconfig
e responda a algumas perguntas (deve ser correto pressionar enter em cada pergunta, deixando a resposta padrão):Compile o kernel:
Copie os módulos do kernel para
/tmp/modules
:Usar
Image
arquivo comokernel.img
Faça o upload de todos os módulos do diretório de
/tmp/modules/lib/modules/
seu computador para o/lib/modules/
diretório rootfs do RaspberryPi.Adicionando initramfs
Isso não fornece instruções sobre como criar
initramfs
, no entanto. Como esse é um tópico muito amplo (basicamente, você precisa criar um ambiente de espaço de usuário Linux funcional e não há realmente nenhum limite de quão complicado pode ser), não abordarei isso aqui agora. Só observarei queinitramfs
pode ser usado de duas formas diferentes - uma autônoma, onde é um arquivo separado e o buildin, onde é integrado ao arquivo de imagem do kernel (como se estivessekernel_emergency.img
). A segunda opção deve ser suportada pelo gerenciador de inicialização RaspberryPi, mas existem rumores de que ele está quebrado na versão atual do firmware, portanto, você provavelmente deve usar a versão buildin.A melhor maneira de começar é usar o conteúdo initramfs em funcionamento (que está sendo usado para kernel_emergency.img) baixando-o de outro repositório github da fundação e somente depois que você puder inicializar o kernel usando esta
iniramfs
imagem, tente criar o seu próprio. Tudo o que é necessário para isso é apontar para o diretório baixado usando aCONFIG_INITRAMFS_SOURCE
opção de configuração do kernel.Notas finais
Então você deve fazer isso em 3 etapas:
initramfs
arquivo.initramfs
conteúdo pronto ao seu kernel.initramfs
conteúdo para atender às suas necessidades.fonte
zip
;git
transfere os arquivos com eficiência e você pode usardepth=1
para impedir o histórico de downloads (eu acho).Se você estiver executando a mesma versão do Debian em ambos, usando X-Apt, dpkg-cross etc ... e as ferramentas emdebian podem funcionar muito bem.
Fonte: usada para desenvolver aplicativos c ++ para sistemas ARM incorporados executando emdebian.
fonte