Raspberry Pi from scratch

Publié par cpb
sept 10 2013

Comme on me l’a demandé à plusieurs reprises, et comme je l’avais annoncé précédemment, voici les versions PDF de mes articles sur la construction d’un système Linux à partir de zéro pour un Raspberry Pi. Ces articles sont parus dans Gnu Linux Magazine France.

Les fichiers associés (sources, configuration, etc.) sont accessibles à partir de cette page de téléchargement.

21 Réponses

  1. jacques dit :

    Superbes articles!
    Merci

  2. Mathieu dit :

    Merci, très bien fait!

  3. Christophe dit :

    Merci beaucoup pour ces articles toujours performants.
    Je viens de réaliser mon premier « Noyau Raspberry PI from scratch » et j’aimerai activer le bus SPI.
    J’ai donc pris votre article sur le SPI, mais je ne trouve ( ce pas faute d’avoir chercher) pas l’option « BCM2708 SPI controller driver » dans les paramètres du noyau ( version 3.6.11 ) via « make ARCH=arm menuconfig » l’option semble avoir disparue.
    Penser vous qu’il me faut prendre une version antérieur de noyau?

    Amicalement.
    Christophe

    • cpb dit :

      Je vois bien cette option dans « Device drivers »-> « SPI support » du noyau 3.6.11 mais c’est la version « patchée » pour Raspberry Pi.

      La manière la plus simple d’obtenir cette version est de faire :

      $ git clone http://github.com/raspberrypi/linux rpi-linux
      Cloning into 'rpi-linux'...
      remote: Counting objects: 3188285, done.
      remote: Compressing objects: 100% (565955/565955), done.
      remote: Total 3188285 (delta 2645602), reused 3129194 (delta 2593671)
      Receiving objects: 100% (3188285/3188285), 821.45 MiB | 1.67 MiB/s, done.
      Resolving deltas: 100% (2645602/2645602), done.
      $ cd rpi-linux
      $ make ARCH=arm bcmrpi_defconfig
      $ make ARCH=arm menuconfig
      

      L’option BCM2708 SPI controller driver (SPI0) apparaît.

      Elle dépend en fait de l’option
      "System Type"-> "ARM system type" -> "Broadcom BCM2708 family"
      qui n’est pas dans l’ordre alphabétique de la liste…

      Bon courage…

      • Christophe dit :

        J’ai trouvé la solution, mon .config était pas bon car corrompu par une mauvaise manip.
        Depuis je me bats avec le montage du ssh, certainement une erreur de ma par la compilation me sort un fichier pour x86 et pas arm.
        Merci encore pour vos articles.
        Christophe

  4. Greg dit :

    Merci beaucoup pour cette doc très efficace !

    J’obtiens un linux qui tourne très bien mais qui ne reconnaît que 128 des 512MB de mon Raspberry. Une partie est forcément allouée au GPU mais ça m’étonnerait que ce soit 384MB :).
    J’ai tenté d’isoler le problème, ça semble venir du kernel, pas de start.elf ni du bootcode.bin. Mais je ne parviens pas à trouver le point précis qui pose problème.

    A ce sujet également, ce qui est différent de la doc: plus de fichiers arm_xxx_start.elf présent ni de loader.bin.

    D’avance merci,

    Greg.

    • cpb dit :

      Bonsoir,

      Y a t-il une ligne gpu_mem dans config.txt sur la partition de boot ?

      • Greg dit :

        Au départ, je n’avais pas mis de config.txt du tout.

        En tentant de résoudre ce problème de RAM, j’ai ajouté le config.txt que j’utilise habituellement avec des Raspbian classiques. Et là, l’écran ne s’allume pas au boot … Alors que ce config.txt fonctionne habituellement. Quelque chose m’échappe.

        • Greg dit :

          Je n’ai laissé que gpu_mem dans config.txt : écran noir … J’ai commenté gpu_mem: OK … Etrange :)

          • cpb dit :

            La valeur indiquée pour gpu_mem est peut-être insuffisante pour activer l’écran graphique.

            Une solution consiste à récupérer les fichiers du bootloader d’une distribution comme Raspbian, et à ne remplacer que le noyau (kernel.img) par son noyau personnalisé.

          • Greg dit :

            Bien vu! Minimum opérationnel : 32MB.

            Et je viens de trouver ce qui n’allait pas. J’ai remplacé gpu_mem par gpu_mem_512

            Encore merci!

  5. Gepp Balestrieri dit :

    Merci pour ces articles! Ce niveau d’approfondissement de linux associé à la Raspberry Pi est rare sur le web.

    Je voudrais bien essayer de mettre en place un système real time sur cette carte en utilisant l’extension de Xenomai mais j’ai rencontré différentes erreurs lors de la compilation de buildroot.

    make[4]: *** [clean-temp.o] Error 1
    make[4]: *** Waiting for unfinished jobs….
    mv -f .deps/close-hook.Tpo .deps/close-hook.Po
    make[4]: Leaving directory `/home/francesco/Developement/RaspberryPi/Developement/buildroot-2012.05/output/build/host-m4-1.4.16/lib’
    make[3]: *** [all] Error 2

    J’ai alors repéré la derniere version de buildroot, la 2013-11, et modifié la configuration à partir de celle suggérée par vous dans le premier article. Mais même dans ce cas j’ai eu des erreurs (
    configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+.
    Try the –with-gmp, –with-mpfr and/or –with-mpc options to specify
    their locations. )
    probablement à cause d’un mauvais réglage du .config.

    Pourriez-vous m’aider à configurer la dernière version de buildroot?

    D’avance, merci.

    • cpb dit :

      Je pense qu’il manque des packages sur votre machine de compilation.
      Il faut ajouter :
      libgmp-dev, libmpfr-dev, libmpc-dev (systèmes Debian, Ubuntu, etc.)
      ou
      libgmp-devel, libmpfr-devel, libmcp-devel (système RedHat, Fedora, etc.)

      Je ne suis pas certain de ces trois derniers.

      • J’utilize ubuntu 13.10 et avec la dernière version, la 2013-11, et les packages que vous m’avez signalé, tout a bien fonctionné!
        [sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev]
        Par contre la compilation donnait encore des erreurs avec la version de buildroot 2012-05.
        Merci!

  6. Christophe Buchmann dit :

    Bonjour,
    Merci beaucoup pour vos articles.
    J’ai construit un « linux from sratch » avec vos directives, il fonctionne bien excepté le SSH:
    - impossible de me connecter.
    - j’ai donc essayer le Telnet et j’obtiens un refus de connexion.
    - le transfert de fichier via SCP fonctionne bien
    Il semblerai que la console ne soit pas disponible via la connexion Ethernet, serait elle occupée par un autre processus ( liaison série qui fonctionne très bien)?
    Avez vous une idée de la cause?
    Par avance Merci.

    • cpb dit :

      À vérifier en priorité : il doit y avoir un fichier spécial /dev/ptmx (créé automatiquement par udevd) et un répertoire /dev/pts sur lequel est monté un système de fichier spécial devpts avec la commande suivante (dans le script d’initialisation /etc/init.d/rcS) :

      mount none /dev/pts -t devpts
  7. Christophe Buchmann dit :

    Bonjour,
    Merci pour votre réponse.
    le fichier /dev/ptmx existe mais ne peux être lu.

    une chose qui me parait étrange le répertoire /dev/pts est bien présent sur la carte SD
    mais pas visible par ls -l /dev/pts via la console du RPI.

    voici mon script rcS:
    #! /bin/sh
    mount none /proc -t proc
    mount none /sys -t sysfs
    mount / -o remount,rw

    mount none /dev -t devtmpfs
    mount none /dev/pts -t devpts

    modprobe ledtrig-heartbeat
    if [ -f /sys/class/leds/led0/trigger ]; then
    echo heartbeat > /sys/class/leds/led0/trigger
    fi
    hostname -F /etc/hostname
    loadkmap < /etc/azerty.kmap
    /etc/init.d/rc.network &
    /etc/init.d/rc.services &

    • Christophe Buchmann dit :

      suite…
      il est fort probable que je fais une grosse erreur quelque part.
      par avance merci.
      Christophe

    • cpb dit :

      Il faut ajouter

      mkdir -p /dev/pts

      entre les lignes

      mount none /dev/ -t devtmpfs

      et

      mount none /dev/pts -t devpts

      Le répertoire pts est présent dans le répertoire /dev sur la carte SD mais on monte « par-dessus » ce dernier un système de fichiers special sur un ramdisk (devtmpfs) qui ne contient pas initialement de répertoire pts.
      À nous de le créer…

      • Christophe Buchmann dit :

        Bonjour,
        ça fonctionne très bien, merci beaucoup car je n’aurais pas pu trouver la solution.
        Amitiés.
        Christophe

URL de trackback pour cette page