Mini2440 – Linux from scratch com Buildroot

- por Sergio Prado

Categorias: Buildroot, Linux, Mini2440 Tags: , ,

O Buildroot é um dos mais usados sistemas de build para sistemas embarcados. Com ele podemos gerar todo o toolchain de cross-compilação para determinada arquitetura, compilar o kernel e gerar o rootfs.

Então vamos lá, mãos à obra!

PREPARANDO O BUILDROOT

O primeiro passo é baixar o buildroot na página do projeto aqui e descompactá-lo em um diretório qualquer na sua máquina.

Você vai precisar também do kernel para a mini2440. O kernel disponível na página de downloads do projeto não irá funcionar, porque o JFFS2 não esta habilitado por padrão, e também porque são necessárias algumas alterações no driver da MTD para ele funcionar com o U-boot. Eu fiz toda estas alterações e disponibilizei aqui. Entre no diretório principal do buildroot, crie uma pasta chamada "dl" e copie o kernel para lá.

CONFIGURANDO O BUILDROOT

Agora vamos configurar o buildroot para gerar corretamente o toolchain e as imagens do kernel e do rootfs para a mini2440. No diretório principal do buildroot, execute o comando "make menuconfig", e configure de acordo com as opções abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Target Architecture
    [*] arm
 
Target Architecture Variant
    [*] arm920t
 
Target ABI:
    [*] EABI
 
Toolchain
    Kernel Headers
        (X) Local Linux snapshot
 
Target Filesystem options
    [*] jffs2 root filesystem
    Flash type
        (X) NAND flash with 2kB page and 128kB erase
Kernel
    [*] Linux Kernel
        Kernel version
            (X) Same as toolchain kernel headers
    Defconfig name
        mini2440

Você pode ainda selecionar os pacotes que quiser na opção "Package Selection for the target", e o resto manter como padrão. Após configurar, salvar e sair.

COMPILANDO O BUILDROOT

Para compilar basta executar o comando "make". Prepare-se porque o processo é bem demorado. O buildroot irá baixar e compilar todos os pacotes necessários para gerar o toolchain, depois compilar o kernel e gerar o rootfs.

Na minha máquina tive um problema ao compilar o toolchain, onde a função getline() do arquivo "output/toolchain/linux-2.6/scripts/unifdef.c" estava conflitando com outra função getline() da glibc instalada na minha máquina. Alterando getline() para getLine() no arquivo "output/toolchain/linux-2.6/scripts/unifdef.c" resolveu o problema.

Toda a compilação é feita dentro do diretório "output", e os seguintes diretórios são criados lá dentro:

  • build: onde o kernel e os pacotes do rootfs são compilados;
  • host: ferramentas para cross-compilar os pacotes;
  • images: imagens geradas do kernel e do rootfs;
  • staging: toolchain gerado;
  • stamps: diretório de controle do buildroot;
  • target: estrutura de diretórios e arquivos do rootfs final;
  • toolchain: onde o toolchain foi compilado.

CORRIGINDO A CONFIGURAÇÃO DA CONSOLE

Após a compilação, as imagens já estarão prontas para serem carregadas na mini2440, mas antes precisamos corrigir a configuração da console. Edite o arquivo "output/target/etc/inittab", comente a linha com "ttyS0" e insira outra linha com "ttySAC0", conforme abaixo:

#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL
ttySAC0::respawn:/sbin/getty -L ttySAC0 115200 vt100 # GENERIC_SERIAL

Compile novamente com o comando "make". As imagens finais do kernel (uImage) e do rootfs (rootfs.jffs2) estarão em "output/images".

GRAVANDO A IMAGEM

O processo de gravação da imagem é o mesmo que usamos para o Emdebian neste post aqui. Preste atenção apenas nos tamanhos dos arquivos no momento da execução dos comandos de gravação na flash.

Agora temos um Linux enxuto, com boot bem rápido (5 segundos para aparecer a console), e que podemos usar como base para estudos ou mesmo projetos comerciais.


Um abraço!

Sergio Prado

  • Marcelo

      Olá Sérgio, excelente post!

  • Olá, Sergio. Esta versão do kernel parece ter movido o suporte ao PWM do 2440 para a árvore principal. É isso mesmo? Como acessar o "buzzer" agora?
    []s
    Marcellus

    • Olá Marcellus,

      Não cheguei a testar isso. Talvez então voce tenha que mexer no kernel.

      Abraços!

  • Bem, para evitar transtornos, baixei a versão 2.6.32.2 do site da FriendlyARM e usei com o Buildroot. Tudo funcionando agora… ;)

  • Tom

    Boa tarde sérgio, falei com vc em outro post e vc me indicou esse. Bom na realidade já gerei um buildroot e o ambiente cross-compile, porém para isso usei o armstrong com qt, pq minha necessidade é desenvolver um software em ambiente gráfico. Já consigo compilar apicações para console em C e executar no Mini2440, porém não consegui ainda compilar uma aplicação para ambiente gráfico para o mini.

  • Olá Tom!

    Em teoria, basta habilitar as bibliotecas do Qt no buildroot, e configurar um pacote no mesmo para ser cross-compilado e incluído na imagem. Você fez isso? 

    Abraços!

  • Tom

    Está é a parte que está pegando… Não fiz isso, não achei como fazer isso ainda.

  • Olá Tom,

    Para habilitar o Qt no buildroot, no "make menuconfig", habilitar

    Package selection for the target
        Graphic libraries and applications
            [X] Qt

    Para configurar um pacote dentro do buildroot:

    http://buildroot.uclibc.org/buildroot.html#add_packages

    Um abraço!

  • Douglas

    Olá Sergio,
    Gostaria de primeiramente parabeniza-lo, pela iniciativa de indicar o caminho das pedras e alguns conceitos para a inicação da consturção e desenvolvimentos de sistemas embarcados em plataformas ARM 32 bits utilizando linux. São posts realmente interessantes, e utéis, pra quem está começando e até mesmo pra quem já conhece e tem algumas dúvidas.
     
    Gostaria de saber mais detalhes, sobre as altereçãos no driver da  MTD para ele funcionar com o U-boot, e como habilitar o JFFS2 do kernel.

     
    Att
     
    Douglas

    • Olá Douglas,

      Para habilitar o JFFS2 entrar no diretório do kernel e executar

      make menuconfig ARCH=arm

      E então habilitar a opção:

      Filesystems
      [*] Miscellaneous filesystems
      [*] Journalling Flash File System v2 (JFFS2) support

    • Para configurar a MTD, você deve alterar o arquivo “arch/arm/mach-s3c2440/mach-mini2440.c”.

      Procure pela estrutura “friendly_arm_default_nand_part”. Os valores dos campos name, size e offset devem refletir exatamente a configuração da mtd que você tem no uboot.

      Um abraço!

  • Luciano

    E sse equipamento( Kit ) MIni 2440 é para desenvolvimento embarcado?
    Gostaria de saber mais sobre ele, tens alguma  material para me indicar? Onde compro este kit, e que modelo seria necessário para iniciar?
    Obrigado!

  • Thiago

    So pra con­star aqui caso alguem tenha o mesmo prob­lema que eu.
    o comando “make menu­con­fig” nao deu certo. usei o comando “make con­fig” e acho que atingi o obje­tivo.
    (foi muita ten­ta­tiva e erro ate desco­brir isso!)

  • Thiago

    Olá Sergio.
    desculpe incomodar novamente, mas me apareceu 2 duvidas:
    – uma vez que eu instalo o buildroot, como eu faço a partir de agora pra escrever um codigo em linguagem C e compilar cruzado pra rodar na placa?
    – tentei de todas as maneiras enviar a imagem do buildroot pra placa via tftp(conforme ensina no outro post pro emdebian) e nao consegui mesmo lendo varios tutoriais na net. sera que existe uma maneira mais facil(pela usb ou pela serial)?
    desculpa incomodar nessa vespera de ano novo(falta 1 hora pra 2011!)
    brigado mais uma vez e feliz ano novo

  • Olá Thiago, como vai?

    Acho que tenho dois posts que podem te ajudar:

    Como usar o NFS para copiar uma aplicação cross-compilada e testar no kit mini2440:
    http://www.sergioprado.org/2010/12/27/mini2440-montando-rootfs-no-linux-via-nfs/

    Como cross-compilar uma aplicação:
    http://www.sergioprado.org/2010/12/30/mini2440-compilando-aplicacoes-e-device-drivers/

    Um abraço,

    Sergio Prado

  • Thiago

    Ola Sergio,
    finalmente consegui instalar o buildroot.
    qual eh a senha e o login do buildroot?

    • Olá Thiago,

      Usuário “root” e senha vazia.

      Abraços!

  • Thiago

     
    obrigado!

  • Thiago

    Ola Sergio,
    ja tenho meu buildroot no minha placa, consegui cross-compilar o programa "hello world" ,tranferi o executavel por pendrive para a placa ,  executei a aplicacao e na tela do hiperterminal (no meu pc) apareceu o hello world. Funcionou perfeitamente!  porem, preciso fazer o hello world aparecer na tela do LCD da placa(assim como vou precisar usar a camera e o touch). Como faco pra fazer aplicacoes usando o LCD  da placa?
    desculpe incomodar novamente,
    agradeco desde ja!

    • Olá Thiago!

      Primeiramente você vai precisar escolher uma interface gráfica para usar. Sugiro o Qt. Infelizmente não tenho nenhum artigo ainda falando sobre isso (esta na minha lista). Você terá que buscar informações na internet (busque algo como “cross-compiling qt”).

      Um abraço!

  • Diogo

    Olá Sergio,
     
    Estou com um problema na minha mini2440, agradeço muito se puder me dar alguma dica!
    Executei todos os passos deste post, mas adicionei suporte à QT na minha configuração. Porém, utilizando os fontes do kernel que você disponibilizou o meu LCD de 7" não funcionou, nem com o arqumento "mini2440=1tb". Então baixei o kernel disponibilizado no site da FriendlyArm, configurei para o meu display, alterei o driver da MTD, adicionei suporte a JFFS2 e recompilei. Depois disso, substituí apenas o kernel no meu kit. Com isso o display funcionou e consegui rodar algumas aplicação em QT.
    O problema é que o touchscreen não está dando sinal de vida. Tem algum problema em o meu rootfs ter sido montado com um determinado kernel e eu utilizar outro na placa?
    Abraço!

    • Olá Diogo,

      Você precisa ver se o driver do touch esta carregado. Talvez precise também habilitar alguma coisa no buildroot. Ainda não mexi com o touch, não sei te precisar as dependencias para a interface touch do kit funcionar corretamente. Se descobrir, poste a solução aqui.

      Abraços!

  • tungpham

    Great post Sergio!
    i can use buildroot now, but how can i use keyboard to login. i just only see login screen in my 3.5'' lcd screen, when i plug usbkeypad into usb port and try to promt user and password, but it seems linux cant get input from my keypad.
    Thanks!

    • Hi tungpham,

      I have always used my console to log in. I have never tried to login using a USB keyboard. Maybe there is a module missing from the kernel. When you plug the keyboard on the USB interface, check “dmesg” on console to see if it is identified properly. Let me know the results.

      Best regards.

  • tungpham

    Hi sergio.
    I tried SP2 keyboard —[sp2/usb]—-> usbport mini2440 and there is only generic usb device in dmesg, no keyboard, When i tried by usb keyboard it's works :).
    anyway, how to use console to logon the system, i only see login screen on my 3.5 TFTLCD, not on my PC's console

    • Thats great tungpham!

      Did you change /etc/inittab as I have mentioned in my article? You need to do this to have you a login prompt on your console.

      Best regards.

  • Eduardo

    Olá Sérgio,

    Estou tentando compilar o kernel 2.6.32.2 do site friendlyarm e adicionei o suporte a jffs2 usando o make menuconfig no kernel. Depois fui até o arquivo mach-mini2440.c e deixei o mtd identico a do meu u-boot.

    Compila direitinho, o kernel carrega exibindo a versão 2.6.32.2, vejo o carregamento de diversos drivers, aparece o desenho do pinguim na tela porém com o backlight apagado e depois disso comeca uma série de problemas com o jffs2 aparentemente quando o kernel tenta montar o root. As vezes chega a carregar o login, mas qualquer comando ja dispara novamente uma infinidade de erros com o jffs2.

    Você tem idéia do que pode estar acontecendo? Você teria esse kernel ajustado para o mini.

    Reparei que no seu kernel modificado para o jffs2 no arquivo mach-mini2440.c não aparecem as entradas para o MTD. Fiquei sem entender porque você disse que deveriam ser inseridas ou corrigidas essas entradas e no seu kernel não aparece.

    Até logo e obrigado

    • Olá Eduardo,

      Se o kernel iniciou é porque vocês fez corretamente as alterações das partições da MTD. Esse problema do JFFS2 eu vi quando tentei rodar o Android, e imaginei que faltasse algo no kernel do Android para o driver do JFFS2 funcionar na mini2440. Mas não cheguei a debugar este problema. Minha sugestão é para você dar uma olhada no driver, a partir das mensagens de erro, e tentar identificar o problema. Um ponto de partida talvez seja comparar o driver do kernel antigo com este.

      Um abraço!

  • tungpham

    hi Sergio
    i changed /etc/initab as you mentioned, but when i make, the inittab was reset to ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL

    after digging into menuconfig, i noticed that there are some options related to console

    Target options
    Generic serial port config –>
    Serial port to run getty on –>
    ( ) none
    ( ) ttyS0
    ( ) …..
    (X) ttySAC0
    ( ) …….
    Baudrate to use –>
    ( ) keep kernel default
    ( ) 9600
    ( ) 19200
    ( ) 38400
    ( ) 57600
    (X) 115200
    by default you have to change ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL

    line in the inittab file, but if you confige like that, you dont have to change inittab file :)
    anyway, i dont know much about getty and tty
    i see
    tty1::respawn:/sbin/getty 38400 tty1
    tty2::respawn:/sbin/getty 38400 tty2

    in the inittab, and if i comment out these line, i can pass login promt. Could you tell me more about getty and tty command?
    Cheer!

  • Eduardo

    Obrigado pela resposta Sérgio.
    No momento estou desconfiado do buildroot, tentei recompilar do jeito que você fez com o seu kernel e o sistema trava assim que é montado o root(jffs2). Na primeira vez que tentei havia dado certo. O mais estranho é que descompactei o buildroot em uma nova pasta e refiz o processo completo com a exceção de que peguei os arquivos que estavam na pasta dl da tentativa anterior e joguei na nova para não ter que baixar novamente e o sistema trava assim que monta o root.
    Tenho dois arquivos da imagem root compilados com as mesmas opções mas com uma diferença de 6 bytes, um funciona e o outro não.
    O problema pra ficar testando é que a compilação demora quase duas horas.
    Até mais e obrigado novamente.

    • Olá Eduardo,

      Problema “singular” você tem em mãos…:)

      Não deixe de postar aqui quando descobrir a causa.

      Um abraço!

  • Eduardo

    Sérgio,

    Resolvido o problema, inclusive estou rodando o kernel 2.6.32.2.
    Não sei exatamente o que foi porque tomei mais de uma medida de uma vez.
    O que eu fiz foi regravar o u-boot e consequentemente "zerar" as configurações antigas, formatar a nand e recriar as partições.
    Todas as imagens que eu havia criado agora funcionam.

    No momento estou apanhando para ligar o backlight, neste kernel 2.6.32.2 ele fica desligado.
    Não é a tela que fica em blank porque dá pra ler, mas o backlight fica desligado.
    Sigamos os estudos com novos problema a resolver.

    Abraço.

    • Olá Eduardo,

      Mas é apanhando que a gente aprende mesmo! :)

      Um abraço!

  • Jorge

    Dica para o pessoal.
    Intalando o pacote (glibc-static)  com o comando (yum install glibc-static).
    Resolve alguns dos erros durante a compilação.

  • Jorge

    Sérgio,

    Um problema que tenho é que ele nao da o boot sozinho, eu tenho q entrar, apertar (Q) e digitar (load ram 0x31000000 242360 u) e fazer upload do uboot, ai ele entra, se nao ano funiona.
    Sabe oque pode estar acontecendo?
     
    Att
    Jorge

  • Matheus

    Sergio,

    Estou com um problema aqui q não estou entendendo. Fiz todos os procedimentos quando chega no ultimo que é para dar o “boot” para finalizar aparece a seguinte mensagem “ERROR: can’t get kernel image!”. Não sei o que fazer mais…. help!!

    • Olá Matheus,

      Em que momento esta dando esta mensagem? Você conseguiu gravar a imagem do kernel na Flash?

      Abraços.

  • Fernando Koch

    Olá, Sérgio.
    Parabéns pelos posts, estou começando a pesquisar sobre o assunto e achei o conteúdo do seu site muito útil.
    []s, Fernando.

  • jesse

    ola
    tenho o mini 6410. como eu instalo o android nele
    desde ja agredeço

  • nuno

     
    olá Sergio,
    tenho estado a trabalhar com o Buildroot e das duas uma :
    – uso o seu kernel (embedian) e o touchsreen não funciona … (é mais recente que o seu);
    – uso as configurações disponibilizadas para o mini2440 e não consigo fazer as alterações necessárias no kernel para o compatibilizar com as partições da NAND, MTD, etc, …
    será que pode partilhar os ficheiros que alterou no kernel para eu me orientar ("não me dês o peixe mas ensina-me a pescar" …)?
    obrigado pelo seu tempo,
    aye!

    • Olá Nuno!

      A configuração das partições da MTD pode ser feita no arquivo “arch/arm/mach-s3c2440/mach-mini2440.c”, na definição da estrutura “mini2440_default_nand_part”. Dê uma olhada na configuração das partições no U-Boot e use a mesma nesta estrutura. Qualquer dúvida me avise.

      Se quiser, disponibilizei um kernel da mini2440 no github. Esta 100% com funcional, incluindo o driver do touchscreen.

      https://github.com/sergioprado/Mini2440-Kernel

      Abraços.

  • Alexandro D. Almeida

    Pessoal, depois de muito apanhar do meu mini2440, principalmente por causa do do LCD W35 que veio na placa que comprei recentemente e nem é documentado no site, consegui consolidar uma série da patchs para o linux-2.6.39 e disponibilizei no seguinte link. 
    http://linux-2-6-39-mini2440.googlecode.com/files/mini2440-patchs.tar.bz2

  • Joao

    Ola Sérgio. Como é a primeira vez que escrevo, aproveito para parabenizá-lo pelo ótimo trabalho. O conteudo e didática utilizado é impressionante.
    Tenho uma dúvida: Preciso compilar o mplayer no buildroot para arm926. O buildroot ja tenho instalado e configurado porém estou com muitas duvidas na hora de compilar o mplayer visto que é a primeira vez que utilizado esse ambiente. Voce poderia explicar passo a passo como fazer essa tarefa? Talvez um exemplo de cross compilar (não necessariamente o mplayer) um programa utilizando buildroot.
    Muito obrigado!

  • Alexandro D. Almeida

    Olhe eu de volta aqui.

    Resolvi criar um fork do buildroot com as alterações que fiz para o meu mini2440 e subi no Github, quem tiver interesse:
    https://github.com/xandroalmeida/Mini2440-Buildroot
    Compila um kernel 2.6.39.4 com patch para o recente display W35 e um root system com suporte a ssh
    Talvez ainda precise alterar alguma coisas para o touchscreen e som, mas deve ver estes itens em breve

  • Diego Marcel

    Olá Sérgio!

    Gostaria de utilizar o Linux com tempo real na mini2440. As alterações são só no kernel ou há algo para ser alterado no buildroor?? Vc sabe qual o path mais recomendado? Ou onde posso conseguir um kernel já alterado?
    Abraços

  • Diego Marcel

    Oi Sérgio! Muito obrigado pelas informações.

    Infelizmente o rt.wiki.kernel.org está fora do ar há algum tempo. Segundo o documento da Free-electrons os patches do preempt_rt não são compatíveis com o linux 2.6.32, justamente o disponibilizado no site friendlyarm.
    Sabes onde posso conseguir uma versão compatível?
    Abraços,

    Diego

  • Olá Diego,

    É verdade. Você vai precisar dar uma olhada se alguém já não fez este trabalho, ou então você mesmo portar os patches da versão 2.6.33 para a versão 2.6.32.

    Um abraço.

  • Diego Marcel

    Olá Sérgio!
    Pois é, já procurei em vários sites, em foruns, em gits e blogs mas não encontrei versões compatíveis. A maioria dos sites redirecionam o patch para o rt.wiki.kenel.org. Consegui baixar o patch para 2.6.33 e só consegui encontrar versões para a mini2440 da 2.6.34, 2.6.38 e posteriores. O que será mais fácil, portar os patches para 2.6.32 ou portar a versão 2.6.33 para a mini2440??
    abraços!

    • Olá Diego,

      Difícil saber! Acho que as duas atividades serão trabalhosas. Pelo feeling, eu baixaria o kernel 2.6.32 original, geraria os patches comparando com o kernel da mini2440, e tentaria aplicar estes patches no kernel 2.6.33. Dependendo da quantidade de erros, seguiria este caminho. As alteração de RT são sempre mais complicadas, e é bem mais fácil cometer algum erro quando tentar portar para o kernel 2.6.32.

      Depois me diz que caminho seguiu.

      Um abraço!

  • Diego Marcel

    Olá Sérgio!

    Encontrei um RT patch para versão 2.6.29 escondido num site da red hat! Agora vou rodar o kernel 2.6.29 que baixei do site da friendlyarm com o buidroot e ver se tudo funciona antes de aplicar os patches. Sabes se preciso fazer alguma alteração/correção nesse kernel?
    Abraços!

    • Olá Diego,

      Não que eu saiba. Nunca usei este ker­nel na mini2440. Depois me avisa se fun­cio­nou.

      Um abraço.

  • Diego Marcel

    Oi Sérgio!
    Tive que fazer algumas modificações no menuconfig da 2.6.29… usei o seu kernel como "modelo". O rootfs eu gerei com o buildroot. Minha mini2440 tem 1 GB, mas estou usando u-boot para 256 (disponível no site) pq o do git não funcionou. Agora estou com o seguinte erro durante a inicialização, depois de carregar os drivers:
    s3c2410-rtc s3c2410-rtc: setting system clock to 2011-10-23 00:57:55 UTC (131933 1475)
    uncorrectable error : <3>end_request: I/O error, dev mtdblock3, sector 2
    EXT3-fs: unable to read superblock
    yaffs: dev is 32505859 name is "mtdblock3"
    yaffs: passed flags ""
    yaffs: Attempting MTD mount on 31.3, "mtdblock3"
    yaffs: auto selecting yaffs2
    block 209 is bad
    yaffs_read_super: isCheckpointed 0
    VFS: Mounted root (yaffs filesystem) on device 31:3.
    Freeing init memory: 112K
    Warning: unable to open an initial console.
    Kernel panic – not syncing: No init found.  Try passing init= option to kernel.
     
    Esse é o mesmo problema do MTD que vc encontrou?
    Abraços!

    • Olá Diego,

      Não, nunca peguei este erro. Prefiro o jffs2 ao yaffs.

      Um abraço.

  • Diego Marcel

    Olá Sérgio,
    voltei com mais algumas dúvidas! (normal…)
     
    1 – como faço para criar um configuração default para mini2440 (mini2440_defconfig)? O buildroot solicitita esse arquivo durante a descompactação/compilação do kernel. Tentei criar com o comando "ARCH=arm make mini2440_defconfig", mas retorna uma mensagem que há configuração default.
    2 – Posso usar o buildroot somente para gerar o file system?
    3 – Qual o melhor procedimento para re-compilar/re-gerar as imagens no buidroot?!
     
    Por enquanto, é isso! Daqui a pouco eu volto com mais dúvidas! heheheh….
    Até mais e obrigado pela atenção!
    abraços!

    • Olá Diego,

      1. Este arquivo já deve existir no kernel padrão da mini2440. fica em arch/arm/configs/. Basta copiá-lo. Obs: se vocẽ usar um config de um kernel em outro kernel, precisa rodar o comando “make oldconfig”.
      2. Sim, sem problemas. Pode gerar só o toolchain, só o bootloader, só o kernel, ou só o rootfs. Ou qualquer combinação entre eles.
      3. “make clean && make” vai apagar e gerar tudo de novo. Se quiser recompilar apenas um pacote e regerar a imagem, dá uma lida na documentação do Buildroot abaixo:
      http://buildroot.uclibc.org/buildroot.html#rebuilding_packages

      Um abraço!

  • Alex Moretti

    Prezado Sergio
    Tento compilar o buildroot e o kernel do linux sugerido por você, entretanto acontece o seguinte erro no makefile do linux:
    "erro 1601: as regras implícitas e normais misturadas"

    Eu tentei usar outras versões do compiladores ARMs e buildroons e sempre aparece o mesmo erro.
    Poderia me ajudar neste sentido?

    • Olá Alex,

      Preciso de todo o log do processo de compilação para dar uma olhada. Me envie por email que te ajudo.

      Um abraço.

  • José Nunes

    Olá Sergio,

    Estou tendo problemas quando executo o comando make, aparece uma mensagem
     “You must install ‘makeinfo’ on your build machine
    makeinfo is usually part of the texinfo package in your distribution”
    como eu faço para solucionar esse problema já tentei de tudo e nada.
    E parabéns pelo site.

    • Olá José,

      Basta instalar o pacote texinfo. Se você esta usando o Ubuntu, o comando abaixo deve resolver:

      $ sudo apt-get install texinfo

      Um abraço.

      • José Nunes

         Valeu Sérgio,  deu certinho aqui.

        Agora o problema é outro, quando dei o pela segunda vez o comando “make” para gerar  a imagem do kernel dentro de “output/images” apareceu a seguinte mensagem:
        “toolchain/kernel-headers/kernel-headers.mk:82: *** No local /home/apolo/Download/buildroot-2012.02/dl/linux-2.6.tar.bz2 found, cannot continue. Are you sure you wanted to enable BR2_KERNEL_HEADERS_SNAP?.  Pare.”

        Sem querer ser chato com tantas perguntas, mas você pode me ajudar com essa ai também?

        E mais uma vez obrigado.

        • Olá José,

          Você precisa copiar os fontes do kernel para o diretório “dl” do Buildroot.

  • José Nunes

     Olá Sérgio,

    Consegui compilar o kernel exatamente conforme seu tutorial, após isso tentei compilar o rootfs no narcissus com as características que eu queria, apesar deu saber que o buildroot também faz isso. Após ter baixado o pacote veio um arquivo .tar então extrai e executei um comando que achei na internet para transformar essa pasta em um arquivo jffs2. O que gerou um arquivo jffs2 maior que quando estava com a extensão jffs2. Após isso tentei instalar na minha mini2440 mas quando vou enviar pelo cabo de rede parace que trava no meio do processo e eu não achei nenhum post com esse problema semelhante ao meu na internet. Nesse meu problema mostra os sustenidos informando que está passando mas de uma hora para outra para.

    Será que você poderia me dar mas uma mãozinha ai?

    Obrigado.

  • José Nunes

     Olá Sérgio,

    Consegui compilar o kernel exatamente conforme seu tutorial, após isso tentei compilar o rootfs no narcissus com as características que eu queria, apesar deu saber que o buildroot também faz isso. Após ter baixado o pacote veio um arquivo .tar então extrai e executei um comando que achei na internet para transformar essa pasta em um arquivo jffs2. O que gerou um arquivo jffs2 maior que quando estava com a extensão jffs2. Após isso tentei instalar na minha mini2440 mas quando vou enviar pelo cabo de rede parace que trava no meio do processo e eu não achei nenhum post com esse problema semelhante ao meu na internet. Nesse meu problema mostra os sustenidos informando que está passando mas de uma hora para outra para.

    Será que você poderia me dar mas uma mãozinha ai?

    Obrigado.

    • Olá José,

      Se começa a transferir é porque esta quase tudo funcionando. Deve ser alguma coisa com sua infra. Já tentou trocar o cabo de rede? Transferindo um arquivo menor funciona?

      • José Nunes

        Sérgio,

        Eu segui o seu tutorial sobre instalar o emdebian (que é um arquivo menor) e deu tudo certo na transferência, e sobre o cabo de rede tenho dois aqui e dá a mesma coisa.

    • José Nunes

      Sergio,

      Acho que já sei qual o problema, primeiro eu envio para a ram e como o tamanho do arquivo excede o tamanho da ram por isso para o processo de transferência, o rootfs que eu gerei tinha mais de 100 mb e a minha ram tem 64 mb. Então como eu poderia fazer para transferir essa imagem para a minha placa mini2440?

      Mais uma vez obrigado pela atenção.

      • Entendi José. Então é isso mesmo. 

        A única forma do U-Boot escrever na flash é passando pela RAM. Neste caso, você pode gravar direto na flash via JTAG, ou dividir seu arquivo em partes menores, e enviar por partes.

  • Danilo Pagano

    Alguem teve este erro ao seguir os passos do Sergio?

    chmod: prof_err.h: new permissions are r-xrwxrwx, not r-xr-xr-xchmod: prof_err.h: new permissions are r-xrwxrwx, not r-xr-xr-xchmod: prof_err.c: new permissions are r-xrwxrwx, not r-xr-xr-xmake[3]: ** [prof_err.h] Erro 1make[3]: ** Esperando que outros processos terminem.chmod: prof_err.c: new permissions are r-xrwxrwx, not r-xr-xr-xmake[3]: ** [prof_err.c] Erro 1make[3]: Saindo do diretório `/media/Linux/mini2440/buildroot-2012.05/output/build/host-e2fsprogs-1.42.2/misc’make[2]: ** [all-progs-recursive] Erro 1make[2]: Saindo do diretório `/media/Linux/mini2440/buildroot-2012.05/output/build/host-e2fsprogs-1.42.2’make[1]: ** [all] Erro 2make[1]: Saindo do diretório `/media/Linux/mini2440/buildroot-2012.05/output/build/host-e2fsprogs-1.42.2’make: ** [/media/Linux/mini2440/buildroot-2012.05/output/build/host-e2fsprogs-1.42.2/.stamp_built] Erro 2

    Danilo Pagano.

    • Me parece um erro de permissão ao compilar o e2fsprogs. Dá uma olhada no google.

  • Roberto Gomes

    Olá Sérgio,
    Vamos ver se vc pode me ajudar…
    é um pouco diferente minha situação dos demais e nem sei como procurar o problema na internet.
    É o seguinte… Tenho um kit mini2440 funcionando em NFS e tudo ok.
    então eu gostaria de gerar um rootfs novo utilizando o buildroot. Dentro do diretório do buildroot tem um arquivo configs/mini2440_defconfig que gera uma configuração mínima. Se eu mandar compilar, o processo vai até o final e parece ok. Mas aí começam umas diferenças.

    No rootfs disponibilizado pela FriendlyARM a pasta /dev está apenas com o arquivo console. O buildroot possui um /dev populado.
    Com isso, ao iniciar o NFS, o kit começa a escrever num arquivo texto /dev/ttySAC0, ao invés de colocar na porta serial.

    e os outros devices também não são acessados… por exemplo /dev/tty1 não é mais a saída pro LCD.

    Tu tens alguma idéia do que possa estar acontecendo?
    Abraços

    PS:

    Eu gostaria de não ter que alterar o kernel, pois fiz algumas alterações nele para suportar SPI pela DMA.

    • Olá Roberto,

      Como você descompactou a imagem do rootfs no diretório do NFS? Você precisa descompactar com permissões de admin (sudo). Se você descompactou sem as permissões necessárias, pode ser que os arquivos de dispositivo no /dev não tenham sido descompactados corretamente.

      Abs.

  • Thiago

    Sérgio, o kit Micro2440 é igual ao Mini2440, a diferença é que o core (ARM + RAM +FLASH) é separado (stamp module) da placa SDK. Queria saber se consigo executar o build root from scratch nesse kit (micro2440) sem problemas. Saberia me dizer?

    • Olá Thiago,

      À princípio sim, o procedimento deve ser o mesmo.

      • Thiago

        Outra dúvida que surgiu rapidamente aqui. Estou comprando esse kit e não vou adquirir display LCD. A insteração com o Linux pode ser feita diretamente via interface RS-232 e teclado, certo?

        • É isso aí. Tudo o que você precisa para interagir com o kit é uma porta serial.

  • Eduardo

    Ola!
    Parabens pelo blog!
    Esse post funciona também para o mini6410?

    • Olá Eduardo,

      Não conheço em detalhes a mini6410, mas acredito que sejam necessárias algumas adaptações, principalmente com relação à compilação do kernel e à gravação das imagens na placa.

      Um abraço.

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.