vendredi 29 novembre 2013

Buildroot 2013.08.1 & Raspberry Pi

Après plusieurs mois d'absence et un nouvel hobby qui prend du temps: être Papa ;-) je reviens pour compléter mon blog sur les systèmes embarqués.

Ce billet sera simplement consacré à la création d'un environnement embarqué complet à partir de la dernière version de buildroot 2013.08.1.

Cette nouvelle version de buildroot va apporter beaucoup plus de simplicité que les précédentes versions ...



Au revoir Crosstool-NG, bonjour Buildroot toolchain ...


La dernière version de buildroot (2013.08.1) est téléchargeable ici.
Après décompression, si on inspecte le dossier configs comprenant toutes les configurations fournies avec l'environnement, on se rend compte qu'il existe le fichier : rpi_defconfig.

# tar xvzf buildroot-2013.08.1.tar.gz
# cd buildroot-2013.08.1
# cd configs/
# ls
arm_foundationv8_defconfig  atngw100_defconfig             fdi3250_defconfig                  pandaboard_defconfig             qemu_ppc_mpc8544ds_defconfig
armadeus_apf27_defconfig    atstk100x_defconfig            freescale_mpc8315erdb_defconfig    phy3250_defconfig                qemu_ppc_virtex_ml507_defconfig
armadeus_apf28_defconfig    beaglebone_defconfig           freescale_p1010rdb_defconfig       qemu_arm_nuri_defconfig          qemu_sh4_r2d_defconfig
armadeus_apf9328_defconfig  calao_qil_a9260_defconfig      gnublin_defconfig                  qemu_arm_versatile_defconfig     qemu_sparc_ss10_defconfig
at91rm9200df_defconfig      calao_snowball_defconfig       integrator926_defconfig            qemu_arm_vexpress_defconfig      qemu_x86_64_defconfig
at91sam9260dfc_defconfig    calao_tny_a9g20_lpw_defconfig  kb9202_defconfig                   qemu_microblazebe_mmu_defconfig  qemu_x86_defconfig
at91sam9260eknf_defconfig   calao_usb_a9260_defconfig      mini2440_defconfig                 qemu_microblazeel_mmu_defconfig  rpi_defconfig
at91sam9261ek_defconfig     calao_usb_a9263_defconfig      mx53loco_defconfig                 qemu_mips64_malta_defconfig      s6lx9_microboard_defconfig
at91sam9263ek_defconfig     calao_usb_a9g20_lpw_defconfig  nitrogen6x_defconfig               qemu_mips_malta_defconfig        sheevaplug_defconfig
at91sam9g20dfc_defconfig    cubieboard_defconfig           olimex_imx233_olinuxino_defconfig  qemu_mipsel_malta_defconfig      telit_evk_pro3_defconfig
at91sam9g45m10ek_defconfig  ea3250_defconfig               openblocks_a6_defconfig            qemu_ppc_g3beige_defconfig


Nous allons utiliser cette config validée par les devs de buildroot.
Cette version de buildroot a la particularité d'avoir supprimé la gestion de la chaîne de compilation croisée par l'outil externe crosstool-ng et dispose de son propre outil de création de chaîne de compilation basé sur une uclibc (micro-c libc).

# make rpi_defconfig

mkdir -p /home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/output/build/buildroot-config/lxdialog
make CC="/usr/bin/gcc" HOSTCC="/usr/bin/gcc" obj=/home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/output/build/buildroot-config -C support/kconfig -f Makefile.br conf
make[1]: Entering directory '/home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/support/kconfig'
/usr/bin/gcc -DCURSES_LOC="" -DLOCALE  -I/home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/output/build/buildroot-config -DCONFIG_=\"\"  -MM *.c > /home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/output/build/buildroot-config/.depend 2>/dev/null || :
/usr/bin/gcc -DCURSES_LOC="" -DLOCALE  -I/home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/output/build/buildroot-config -DCONFIG_=\"\"   -c conf.c -o /home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/output/build/buildroot-config/conf.o
/usr/bin/gcc -DCURSES_LOC="" -DLOCALE  -I/home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/output/build/buildroot-config -DCONFIG_=\"\"  -I. -c /home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/output/build/buildroot-config/zconf.tab.c -o /home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/output/build/buildroot-config/zconf.tab.o
In file included from /home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/output/build/buildroot-config/zconf.tab.c:2500:0:
./confdata.c: In function ‘conf_split_config’:
./confdata.c:849:6: attention : assignment makes pointer from integer without a cast [enabled by default]
  dir = dirname(_name);
      ^
/usr/bin/gcc -DCURSES_LOC="" -DLOCALE  -I/home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/output/build/buildroot-config -DCONFIG_=\"\"   /home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/output/build/buildroot-config/conf.o /home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/output/build/buildroot-config/zconf.tab.o  -o /home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/output/build/buildroot-config/conf
rm /home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/output/build/buildroot-config/zconf.tab.c
make[1]: Leaving directory '/home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/support/kconfig'
#
# configuration written to /home/vbenoit/PERSO/raspberry_pi/buildroot/buildroot_python/.config
#

puis faire un petit make pour la génération de l'environnement complet. N'hésitez pas à aller chercher un café, ça peut prendre du temps.

# make

finalement ...


En inspectant le dossier output/images, on retrouve deux fichiers et un dossier :

  • zImage : Le noyau linux a copier dans la partition boot (fat32) de la carte SD.
  • rootfs.tar : Le système de fichiers archivé à désarchiver dans la partition rootfs (ext4) de la carte SD.
  • rpi-firmware : Les binaires a copier dans la partition boot (fat32) de la carte SD.

Voila, pas plus, pas moins. Amusez-vous bien.

5 commentaires:

  1. Salut,

    Merci pour le tuto, j'essaye d'installer le driver 8188cu pour une carte wifi, et je commence donc par Buildroot, mais lorsque je rentre :
    [...]/configs # make rpi_defconfig

    Je reçois :
    make : Nothing to be done for `rpi_defconfig'.

    Que puis-je faire ?

    falco

    RépondreSupprimer
    Réponses
    1. Alors, dans un premier temps, vérifie que le fichier de configuration rpi_defconfig existe bien dans le dossier dl de buildroot et dans un second temps, tu peux supprimer ta config actuelle en faisant un make clean ou make distclean (cela supprimera tout) puis relancer la commande make rpi_defconfig

      Supprimer
    2. Le fichier rpi_deconfig existe bien dans le dossier buildroot-2013.08.1/configs.
      C'est ce à quoi tu faisais référence en l'appelant dossier ddl ?

      Je tente ce soir le make clean (distclean).

      Merci de ta rapidité.

      falco

      Supprimer
    3. autan pour moi, c'est pas le dossier buildroot-2013.08.1/dl mais buildroot-2013.08.1/configs que je voulais faire référence.

      Supprimer
  2. Salut
    Pour commencer merci beaucoup pour ce tuto, il est vraiment agréable à suivre.
    Je l'ai suivi étape par étape (parfaitement je pense), par la suite j'ai donc compilé un petit programme (type hello world) sur mon pc avec la commande arm-linux-gcc -g -o.
    Tout s'est bien passé sans soucis.
    Mais une fois sur ma pi, lorsque je veux lancé le programme avec ./ (idem avec sudo en plus), je reçois le message suivant: No such file or directoy
    Pourtant je suis dans le bon répertoire et je vois bien le programme avec ls de même les droits sont bons, je ne comprend vraiment pas.
    Aurais-tu une idée ?
    Merci d'avance

    Florian

    RépondreSupprimer