Pergunta

Eu estou interessado em cross-compilar um kernel Linux para um BRAÇO de destino em um x 86 host.Existem algumas boas práticas que você recomendaria?Qual é o melhor cross-compilar suite na sua opinião?Você já se estabeleceram personalizar o cross-compilar o ambiente?Se sim, quais os conselhos que você tem?É uma boa idéia?

Foi útil?

Solução

Existem duas abordagens que usei para obter ferramentas ARM / Linux. O mais fácil é baixar uma cadeia ferramenta de pré-construído diretamente.
Pro : Ele simplesmente funciona e você pode obter com a parte interessante do seu projeto
Con : Você está preso com qualquer versão do gcc / binutils / libc eles escolheram

Se as questões posteriores para você, confira crosstool-ng . Este projeto é uma ferramenta de configuração semelhante à aplicação de configuração do Linux kernel. Definir quais versões do gcc, binutils, libc (GNU ou uClibc), threading, e kernel do Linux para construir e crosstool-ng faz o resto (ou seja de downloads as bolas de alcatrão, configura as ferramentas, e constrói-los).
Pro : Você exatamente o que você selecionou durante a configuração
Con : Você exatamente o que você selecionou durante a configuração

significa que você assumir a responsabilidade total para a escolha do compilador / binutil / libc e suas características associadas / falhas / bugs. Além disso, como mencionado nos comentários, há alguma "dor" envolvidos na seleção das versões do binutils, C biblioteca etc. pois nem todas as combinações necessariamente trabalhar juntos ou até mesmo construir.

Uma abordagem híbrida pode ser começar com as ferramentas pré-construídos e substituí-los depois com uma solução personalizada através crosstool-ng, se necessário.

Atualizar : A resposta originalmente usado os CodeSourcery como um exemplo de uma cadeia de ferramenta de pré-construído. As ferramentas CodeSourcery para ARM eram livres para de download a partir de Mentor Graphics , mas eles são agora chamados a Sourcery CodeBench e deve ser adquirido a partir de Mentor Graphics. Outras opções incluem agora Linaro , bem como ferramentas de distribuição específicas do Android, Ubuntu, e outros.

Outras dicas

Eu uso o conjunto de ferramentas emdebian para compilar material para minhas máquinas ARM que não é estar feliz compilado nativamente nos pequenos recursos disponíveis (/ me olha para o kernel). O pacote principal é gcc-4.X-arm-linux-gnueabi (X = 1,2,3), e fornece apropriadamente sufixo gcc / CPP / ld / etc comandos. Eu adicioná-lo ao meu sources.list:

deb http://www.emdebian.org/debian/ unstable main

Claro que, se você não está usando Debian, isso provavelmente não é tão útil, mas pelo goma ele funciona bem para mim.

Eu usei scratchbox ao experimentar com a criação de aplicativos para Maemo (Nokia N810), que usa um ARM processador. Supostamente, scratchbox não se restringe ao desenvolvimento maemo.

Eu usei o crosstool em vários alvos.É ótimo, contanto que você quer construir seu conjunto de ferramentas a partir do zero.É claro que existem vários pré construiu ferramentas para o braço bem, só precisa ir ao google -- muitos para mencionar aqui.

1) Na minha opinião a construção de seu próprio conjunto de ferramentas funciona melhor.Você acaba tendo um rígido controle sobre tudo, mais se você é novo no linux embarcado, é uma GRANDE experiência de aprendizagem.

2) não vá com um comercial de ferramentas de programação.Mesmo se você não deseja tomar o tempo para construir o seu próprio, existem alternativas livres lá fora.

Se a sua empresa vai gastar o dinheiro, peça-lhes que comprar um jtag depurador.
Ele vai poupar toneladas de tempo. e ele permite que você facilmente aprender e percorrer a inicialização do kernel, etc..Eu recomendo usar o Lauterbach jtag produtos...Eles trabalham com uma tonelada de metas e o software de plataforma cruzada.O seu apoio é tão grande assim.

Se você não pode obter um jtag depurador e você está trabalhando no kernel, use uma máquina virtual para fazer isso, usermode linux, vmware..etc..seu código será depurado em x86..portá-la para o seu braço destino será uma história diferente, mas é uma maneira mais barata a ferro para fora alguns bugs.

Se você está portando um gestor de arranque, utilize uboot.Claro, se você estiver usando uma plataforma de referência e, em seguida, você está provavelmente melhor fora de usar o que eles oferecem com o BSP.

Espero que ajude.

Buildroot é uma ferramenta que eu tive razoavelmente boa sorte com a construção de um personalizado baseado em uClibc conjunto de ferramentas de coçar, arranhão. É muito personalizável, e não excessivamente particular sobre o que a distribuição tiver que ser executado.

Além disso, muitos de seus usuários existentes (ie. Embarcados router distros) também são alvo ARM.

Se você estiver usando Gentoo, obtendo um conjunto de ferramentas cross-compilação é tão fácil quanto

$ emerge crossdev
$ crossdev -t $ARCH-$VENDOR-$OS-$LIBC

onde ARCH é arm ou armeb, fornecedor é unknown ou softfloat, OS é linux e LIBC é gnu ou uclibc.

Se tudo que você quer é um compilador (e linker) para o kernel, a parte LIBC é irrelevante, e você pode usar -s1 / --stage1 para informar crossdev que você só precisa binutils e gcc.

Isto é o que os usos Eurotech para sua Debian ARM distibution. Você vai notar que eles não recomendamos o uso de um compilador cruzado se você pode evitá-lo. Compilando no próprio alvo tende a ser uma maneira mais confiável de obter saídas que você sabe que vai funcionar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top