{"id":686,"date":"2011-05-13T13:00:18","date_gmt":"2011-05-13T12:00:18","guid":{"rendered":"http:\/\/www.blaess.fr\/christophe\/?p=686"},"modified":"2011-05-13T13:00:18","modified_gmt":"2011-05-13T12:00:18","slug":"construire-son-systeme-personnel-sur-une-carte-pandaboard-2","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2011\/05\/13\/construire-son-systeme-personnel-sur-une-carte-pandaboard-2\/","title":{"rendered":"Construire son syst\u00e8me personnel sur une carte Pandaboard (2)"},"content":{"rendered":"<p style=\"text-align: justify;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-689\" title=\"Pandaboard\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2011\/05\/Pandaboard-03.jpg\" alt=\"Pandaboard\" width=\"150\" height=\"125\" \/>Nous avons r\u00e9ussi dans <a title=\"Construire son syst\u00e8me personnel sur une carte Pandaboard (1)\" href=\"http:\/\/www.blaess.fr\/christophe\/2011\/05\/06\/construire-son-systeme-personnel-sur-une-carte-pandaboard\/\">l&rsquo;article pr\u00e9c\u00e9dent<\/a> \u00e0 compiler les <em>bootloaders<\/em> X-loader et U-boot, ainsi qu&rsquo;un noyau Linux pour la carte Pandaboard.\u00a0Le d\u00e9marrage du syst\u00e8me se d\u00e9roulait tr\u00e8s bien, le chargeur X-loader s&rsquo;initialisant d&rsquo;abord, puis passant le contr\u00f4le \u00e0 U-boot. Ce dernier pla\u00e7ait l&rsquo;image du noyau Linux en m\u00e9moire et lui transmettait l&rsquo;ex\u00e9cution.<\/p>\n<p style=\"text-align: justify;\">Nous avons observ\u00e9 que le noyau commen\u00e7ait par s&rsquo;auto-d\u00e9compresser en m\u00e9moire, puis d\u00e9tectait les \u00e9l\u00e9ments mat\u00e9riels du syst\u00e8me, initialisait tous ses composants logiciels, montait la seconde partition de la carte flash \u00e0 la racine du syst\u00e8me de fichiers, et cherchait &#8211; en vain &#8211; \u00e0 d\u00e9marrer le premier processus du syst\u00e8me, le processus <em>init<\/em>.<\/p>\n<p>\n<!--more-->\n<\/p>\n<p style=\"text-align: justify;\">Nous devons donc lui fournir ce fameux programme <em>init<\/em>. \u00a0Il en existe plusieurs versions&nbsp;:<\/p>\n<ul>\n<li style=\"text-align: justify;\">l&rsquo;<em>init<\/em> dit \u00ab\u00a0System V\u00a0\u00bb adopte un comportement classique sous Unix, en examinant le contenu du fichier <code>\/etc\/inittab<\/code>, puis en d\u00e9marrant des processus en fonction du contenu de ce fichier&nbsp;;<\/li>\n<li style=\"text-align: justify;\">l&rsquo;<em>init<\/em> du projet Upstart plus r\u00e9cent permet de parall\u00e9liser plus de traitements, et d&rsquo;offrir ainsi une interface visuelle \u00e0 l&rsquo;utilisateur alors m\u00eame que tous les services ne sont pas encore actifs (ce fonctionnement est aussi propos\u00e9 par le projet <em>Initng<\/em> mais de mani\u00e8re moins compl\u00e8te)&nbsp;;<\/li>\n<li style=\"text-align: justify;\">le projet <em>systemd<\/em>, jeune et actif, a pour but de regrouper les op\u00e9rations d&rsquo;<em>init<\/em> et de la plupart des d\u00e9mons usuels.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">&nbsp;<\/p>\n<p style=\"text-align: justify;\">Pour les syst\u00e8mes embarqu\u00e9s, on fait souvent appel \u00e0 une version simplifi\u00e9e de l&rsquo;<em>init<\/em> System V, propos\u00e9e par le projet Busybox. Nous allons l&rsquo;utiliser pour mettre en place les outils minimum sur un syst\u00e8me embarqu\u00e9.<\/p>\n<h1>Syst\u00e8me de fichiers<\/h1>\n<p style=\"text-align: justify;\">Tout d&rsquo;abord il nous faut pr\u00e9parer le syst\u00e8me de fichiers. M\u00eame dans un environnement minimal, Linux n\u00e9cessite une arborescence de fichiers. Ceux-ci peuvent se trouver sur un disque dur (dans le cas d&rsquo;un poste de travail, d&rsquo;un serveur&#8230;), sur une carte flash (smartphone, syst\u00e8mes embarqu\u00e9s&#8230;) ou m\u00eame sur un <em>ramdisk<\/em>, disque virtuel en m\u00e9moire RAM, initialis\u00e9 au moment du boot \u00e0 partir d&rsquo;une image se trouvant g\u00e9n\u00e9ralement dans une m\u00e9moire flash.<\/p>\n<p style=\"text-align: justify;\">Dans notre configuration, le syst\u00e8me de fichiers r\u00e9sidera sur la seconde partition de la carte SD sur laquelle notre Pandaboard d\u00e9marre. Nous avions <a title=\"Construire son syst\u00e8me personnel sur une carte Pandaboard (1)\" href=\"http:\/\/www.blaess.fr\/christophe\/2011\/05\/06\/construire-son-systeme-personnel-sur-une-carte-pandaboard\/\">pr\u00e9c\u00e9demment<\/a> initialis\u00e9 cette seconde partition au format Ext3, classique sous Linux. Nous lui avions donn\u00e9 le nom <em>root<\/em> (pour <em>root filesystem<\/em>).\u00a0En ins\u00e9rant la carte flash sur notre ordinateur h\u00f4te de d\u00e9veloppement, la partition se trouve automatiquement mont\u00e9e dans <code>\/media\/root<\/code>.<\/p>\n<p style=\"text-align: justify;\">Commen\u00e7ons \u00e0 cr\u00e9er l&rsquo;arborescence usuelle.<\/p>\n<pre>[~]# <strong>cd \/media\/root\/<\/strong>\n[root]# <strong>ls<\/strong>\nlost+found\n[root]#<\/pre>\n<p style=\"text-align: justify; padding-left: 30px;\">Le r\u00e9pertoire <code>lost+found<\/code> est automatiquement cr\u00e9\u00e9 lorsqu&rsquo;on formatte une partition en Ext3.<\/p>\n<pre>[root]# <strong>mkdir bin dev etc home lib mnt proc root sbin sys tmp usr var <\/strong>\n[root]# <strong>mkdir usr\/bin usr\/sbin etc\/init.d<\/strong>\n[root]#<\/pre>\n<p style=\"text-align: justify;\">Nous rajouterons d&rsquo;autres r\u00e9pertoires ult\u00e9rieurement, ceux-ci nous permettront d\u00e9j\u00e0 d&rsquo;avoir un acc\u00e8s minimal sur notre syst\u00e8me. Nous pourrions \u00e0 ce point cr\u00e9er les fichiers sp\u00e9ciaux de <code>\/dev<\/code> repr\u00e9sentant les p\u00e9riph\u00e9riques du syst\u00e8me. Sur un syst\u00e8me embarqu\u00e9 avec de fortes contraintes d&rsquo;occupation m\u00e9moire, c&rsquo;est ce que je pr\u00e9coniserais. Ici je pr\u00e9f\u00e8re tirer profit de la cr\u00e9ation automatique des fichiers sp\u00e9ciaux gr\u00e2ce \u00e0 l&rsquo;utilitaire <code>mdev<\/code> contenu dans Busybox.<\/p>\n<h1>Busybox<\/h1>\n<p style=\"text-align: justify;\">Busybox est un outil bien connu des d\u00e9veloppeurs pour Linux embarqu\u00e9. Il s&rsquo;agit d&rsquo;un projet qui regroupe efficacement en un seul fichier ex\u00e9cutable plus de 300 commandes Unix classiques. Sur cet ex\u00e9cutable (nomm\u00e9 <code>busybox<\/code>), on cr\u00e9e des liens symboliques ou physiques portant les noms des commandes impl\u00e9ment\u00e9es (par exemple <code>ls<\/code>, <code>sh<\/code>, <code>cp<\/code>, etc.) Lorsque l&rsquo;ex\u00e9cutable d\u00e9marre, il regarde sous quel nom il a \u00e9t\u00e9 invoqu\u00e9 &#8211; en consultant l&rsquo;argument <code>argv[0]<\/code> de sa fonction <code>main()<\/code> &#8211; et adopte le comportement correspondant. Outre la r\u00e9duction de taille li\u00e9e \u00e0 la mise en commun du code utilis\u00e9 par toutes les applets de <code>busybox<\/code>, il est possible de gagner beaucoup de place car les impl\u00e9mentations des commandes standards sont faites avec le souci de r\u00e9duction de taille. De plus lors de la compilation de Busybox, on peut choisir les applets et les options que l&rsquo;on juge utiles pour notre projet.<\/p>\n<p style=\"text-align: justify;\">Busybox impl\u00e9mente une version simple de processus <em>init<\/em>, capable de lire un fichier <code>\/etc\/inittab<\/code> et d&rsquo;en tirer parti. En l&rsquo;absence d&rsquo;un fichier <code>\/etc\/inittab<\/code> le processus <em>init<\/em> de Busybox cherche \u00e0 ex\u00e9cuter automatiquement un script nomm\u00e9 <code>\/etc\/init.d\/rcS<\/code>.<\/p>\n<p style=\"text-align: justify;\">Compilons Busybox (dans le fichier de configuration propos\u00e9 ci-dessous, j&rsquo;ai activ\u00e9 la plupart des applets disponibles).<\/p>\n<pre>[~]$ <strong>cd ~\/Projets\/Panda\/<\/strong>\n[Panda]$ <strong>wget <a href=\"http:\/\/www.busybox.net\/downloads\/busybox-1.18.4.tar.bz2\">http:\/\/www.busybox.net\/downloads\/busybox-1.18.4.tar.bz2<\/a><\/strong>\n[...]\n2011-05-08 18:09:13 (122 KB\/s) - \u00abbusybox-1.18.4.tar.bz2\u00bb sauvegard\u00e9 [2130598\/2130598]\n[Panda]$ <strong>tar xjf busybox-1.18.4.tar.bz2 <\/strong>\n[Panda]$ <strong>cd busybox-1.18.4<\/strong>\n[busybox-1.18.4]$<\/pre>\n<pre>[busybox-1.18.4]$ <strong>cp ~\/<a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-12\/config-busybox-1.18.4\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-12\/config-busybox-1.18.4\">config-busybox-1.18.4<\/a> .\/.config<\/strong>\n[busybox-1.18.4]$ <strong>make menuconfig<\/strong><\/pre>\n<pre>[busybox-1.18.4]$ <strong>make CROSS_COMPILE=\/cross-arm-linux\/usr\/bin\/arm-linux-<\/strong>\n[...]\n[busybox-1.18.4]$ <strong>ls -l busybox<\/strong>\n-rwxrwxr-x 1 cpb cpb 892444  8 mai   19:26 busybox\n[busybox-1.18.4]$<\/pre>\n<p style=\"text-align: justify;\"><strong>Note&nbsp;:<\/strong> la variable <code>CROSS_COMPILE<\/code> contient le pr\u00e9fixe \u00e0 ajouter devant les outils standards (<code>gcc<\/code>, <code>as<\/code>, <code>ar<\/code>, etc.) pour acc\u00e9der aux outils de la <em>toolchain<\/em> correspondant au processeur Arm. Si vous ne disposez pas de cha\u00eene de compilation crois\u00e9e, vous pouvez t\u00e9l\u00e9charger<a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-12\/cross-arm-linux.tar.bz2\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-12\/cross-arm-linux.tar.bz2\"> cette archive<\/a> \u00e0 d\u00e9compresser directement <span style=\"text-decoration: underline;\">\u00e0 la racine<\/span> de votre syst\u00e8me de fichiers. Un article \u00e0 venir dans deux semaines vous proposera plusieurs m\u00e9thodes pour g\u00e9n\u00e9rer vous-m\u00eames votre propre <em>toolchain<\/em>.<\/p>\n<p style=\"text-align: justify;\">Voici une liste des commandes int\u00e9gr\u00e9es dans l&rsquo;ex\u00e9cutable <code>busybox<\/code> que nous avons compil\u00e9.<\/p>\n<p style=\"text-align: justify; padding-left: 60px;\">[, [[, acpid, add-shell, addgroup, adduser, adjtimex, arp, arping, ash, awk, base64, basename, bbconfig, beep, blkid, blockdev, bootchartd, brctl, bunzip2, bzcat, bzip2, cal, cat, catv, chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot, chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond, crontab, cryptpw, cttyhack, cut, date, dc, dd, deallocvt, delgroup, deluser, depmod, devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, du, dumpkmap, dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid, ether-wake, expand, expr, fakeidentd, false, fbset, fbsplash, fdflush, fdformat, fdisk, fgconsole, fgrep, find, findfs, flock, fold, free, freeramdisk, fsck, fsck.minix, fsync, ftpd, ftpget, ftpput, fuser, getopt, getty, grep, gunzip, gzip, halt, hd, hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock, id, ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd, <strong>init<\/strong>, insmod, install, ionice, iostat, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd, length, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname, logread, losetup, ls, lsattr, lsmod, lspci, lsusb, lzcat, lzma, lzop, lzopcat, makedevs, man, md5sum, <strong>mdev<\/strong>, mesg, microcom, mkdir, mkdosfs, mke2fs, mkfifo, mkfs.ext2, mkfs.minix, mkfs.vfat, mknod, mkpasswd, mkswap, mktemp, modinfo, modprobe, more, <strong>mount<\/strong>, mountpoint, mpstat, mt, mv, nameif, nbd-client, nc, netstat, nice, nmeter, nohup, nslookup, ntpd, od, openvt, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress, pivot_root, pkill, pmap, poweroff, powertop, printenv, printf, ps, pscan, pwd, raidautorun, rdate, rdev, readahead, readlink, readprofile, realpath, reboot, remove-shell, renice, reset, resize, rev, rm, rmdir, rmmod, route, rpm, rpm2cpio, rtcwake, run-parts, runlevel, runsv, runsvdir, rx, script, scriptreplay, sed, seq, setarch, setconsole, setfont, setkeycodes, setlogcons, setsid, setuidgid, <strong>sh<\/strong>, sha1sum, sha256sum, sha512sum, showkey, slattach, sleep, smemcap, softlimit, sort, split, start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svlogd, swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd, time, timeout, top, touch, tr, traceroute, traceroute6, true, tty, ttysize, tunctl, udhcpc, udhcpd, udpsvd, umount, uname, unexpand, uniq, unix2dos, unlzma, unlzop, unxz, unzip, uptime, usleep, uudecode, uuencode, vconfig, vi, vlock, volname, wall, watch, watchdog, wc, wget, which, whoami, xargs, xz, xzcat, yes, zcat, zcip<\/p>\n<p style=\"text-align: justify;\">Nous pouvons observer que la couverture des applications est tr\u00e8s large. Certaines nous serons indispensables d\u00e8s le d\u00e9marrage.<\/p>\n<ul>\n<li style=\"text-align: justify;\"><code>init<\/code> : lors du boot, le kernel cherche \u00e0 d\u00e9marrer un processus <code>\/bin\/init<\/code> (il recherche \u00e9galement dans <code>\/sbin<\/code> et <code>\/etc<\/code>). Il nous faut donc cr\u00e9er un lien symbolique sur <code>busybox<\/code> qui porte ce nom. Ce processus <code>init<\/code> va consulter le fichier <code>\/etc\/inittab<\/code> et agir en cons\u00e9quence. En l&rsquo;absence de ce fichier, il commencera par lancer le script <code>\/etc\/init.d\/rcS<\/code>.<\/li>\n<li style=\"text-align: justify;\"><code>sh<\/code> : le script <code>\/etc\/init.d\/rcS<\/code> est un script <strong>shell<\/strong>. Il commence par la ligne <em>shebang<\/em> <code>\"!\u00a0\/bin\/sh\"<\/code>. Il faut donc qu&rsquo;un lien de ce nom existe et pointe vers <code>busybox<\/code> \u00e9galement.<\/li>\n<li style=\"text-align: justify;\"><code>mount<\/code> : le script de d\u00e9marrage doit commencer par monter le pseudo-syst\u00e8me de fichier <em>proc<\/em>. Pour cela, la commande <code>mount<\/code> doit \u00eatre disponible comme lien vers <code>busybox<\/code>.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Ensuite, l&rsquo;ex\u00e9cutable <code>busybox<\/code> va pouvoir cr\u00e9er les liens sur lui-m\u00eame avec tous les noms mentionn\u00e9s plus haut. Installons les quelques fichiers indispensables.<\/p>\n<pre>[busybox-1.18.4]$ <strong>su<\/strong>\nPassword:\n[busybox-1.18.4]# <strong>cp  busybox  \/media\/root\/bin\/<\/strong>\n[busybox-1.18.4]# <strong>cd  \/media\/root\/bin\/<\/strong>\n[bin]# <strong>ln busybox init<\/strong>\n[bin]# <strong>ln busybox sh<\/strong>\n[bin]# <strong>ln busybox mount<\/strong>\n[bin]#<\/pre>\n<p style=\"text-align: justify;\">Puis copions le fichier rcS (\u00e0 <a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-12\/rcS\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-12\/rcS\">t\u00e9l\u00e9charger ici<\/a>) sans oublier de le rendre ex\u00e9cutable&nbsp;! (le contenu du script est d\u00e9crit plus bas)<\/p>\n<pre>[bin]# <strong>cd \/media\/root\/etc\/init.d<\/strong>\n[init.d]# <strong>cp  ~\/rcS  .<\/strong>\n[init.d]# <strong>chmod  +x  rcS<\/strong>\n[init.d]#<\/pre>\n<p style=\"text-align: justify;\">Il nous faut \u00e9galement installer les biblioth\u00e8ques dynamiques n\u00e9cessaires pour le fonctionnement de Busybox. Nous allons proc\u00e9der de mani\u00e8re un peu excessive en copiant toutes les biblioth\u00e8ques fournies par la cha\u00eene de compilation. Dans le cas d&rsquo;un syst\u00e8me plus restreint, nous s\u00e9lectionnerions pr\u00e9cis\u00e9ment les biblioth\u00e8ques indispensables, avec l&rsquo;aide de la commande <code>arm-linux-ldd<\/code> se trouvant dans notre <em>toolchain<\/em>.<\/p>\n<pre>[lib]# <strong>cp -Rdp \/cross-arm-linux\/usr\/arm-linux\/sysroot\/lib\/*  .<\/strong>\n[lib]#<\/pre>\n<p style=\"text-align: justify;\">Le fichier <code>rcS<\/code> contient les lignes suivantes.<\/p>\n<pre style=\"padding-left: 60px;\">#! \/bin\/sh\n\nmount none  \/proc  -t proc\nmount none  \/sys   -t sysfs\nmount \/     -o rw,remount\n\nbusybox --install\n\nmdev -s\necho \/sbin\/mdev &gt; \/proc\/sys\/kernel\/hotplug<\/pre>\n<p style=\"text-align: justify;\">La premi\u00e8re ligne indique quel est l&rsquo;interpr\u00e9teur \u00e0 utiliser pour traiter ce script. Le fichier <code>\/bin\/sh<\/code> existe, nous l&rsquo;avons cr\u00e9\u00e9 sous forme de lien. Ensuite on monte les deux pseudo-syst\u00e8mes de fichier <code>\/proc<\/code> et <code>\/sys<\/code>, puis on remonte le syst\u00e8me de fichier original en lecture et \u00e9criture (pendant le boot, le noyau le monte en lecture seule).<\/p>\n<p style=\"text-align: justify;\">Nous pouvons alors demander \u00e0 Busybox de cr\u00e9er les liens sur son propre fichier ex\u00e9cutable avec les noms de tous les utilitaires qu&rsquo;il sait repr\u00e9senter.<\/p>\n<p style=\"text-align: justify;\">L&rsquo;utilitaire <code>mdev<\/code> que nous d\u00e9marrons ensuite a pour r\u00f4le de cr\u00e9er les fichiers sp\u00e9ciaux de <code>\/dev<\/code> repr\u00e9sentant tous les p\u00e9riph\u00e9riques d\u00e9tect\u00e9s par le noyau. C&rsquo;est une version simplifi\u00e9e du programme\u00a0<code>udevd<\/code> (<em>User Device Dameon<\/em>) que l&rsquo;on retrouve sur certaines distributions. Nous l&rsquo;enregistrons \u00e9galement comme utilitaire \u00e0 invoquer lors d&rsquo;un <em>hotplug<\/em>, la d\u00e9tection d&rsquo;un branchement \u00e0 chaud de p\u00e9riph\u00e9rique (par exemple une cl\u00e9 USB).\u00a0Le script de d\u00e9marrage propos\u00e9 ici est vraiment minimal, nous l&rsquo;\u00e9tendrons dans le prochain article.<\/p>\n<p style=\"text-align: justify;\">Nous pouvons d\u00e9monter notre m\u00e9moire flash et l&rsquo;ins\u00e9rer sur la Pandaboard.<\/p>\n<pre>[init.d]# <strong>cd \/media<\/strong>\n[media]# <strong>umount boot root<\/strong>\n[media]#<\/pre>\n<p style=\"text-align: justify;\">D\u00e9marrons <code>minicom<\/code> sur notre syst\u00e8me h\u00f4te, reli\u00e9 au port s\u00e9rie de la carte Pandaboard. Et mettons cette derni\u00e8re sous tension. Nous voyons sur l&rsquo;\u00e9cran de <code>minicom<\/code> les lignes suivantes.<\/p>\n<pre>Texas Instruments X-Loader 1.5.0 (May  3 2011 - 07:49:31)\n[...]\nU-Boot 2011.03-00398-ga621b16-dirty (May 03 2011 - 08:42:19)\n[...]\n## Booting kernel from Legacy Image at 82000000 ...\n   Image Name:   Linux-2.6.39-rc5-cpb\n[...]\nStarting kernel ...\nUncompressing Linux... done, booting the kernel.\n[    0.000000] Initializing cgroup subsys cpu\n[    0.000000] Linux version 2.6.39-rc5-cpb (cpb@tr-a-0) (gcc version 4.3.5 (Buildroot 2010.08) ) #1 SMP Tue May 3 11:14:47 1\n[    0.000000] CPU: ARMv7 Processor [411fc092] revision 2 (ARMv7), cr=10c5387f\n[...]\n[    3.794860] smsc95xx v1.0.4\n[    3.922637] smsc95xx 1-1.1:1.0: eth0: register 'smsc95xx' at usb-ehci-omap.0-1.1, smsc95xx USB 2.0 Ethernet, b6:f0:b5:2e:9\n\nPlease press Enter to activate this console.<\/pre>\n<p>Pressons la touche \u00ab\u00a0Entr\u00e9e\u00a0\u00bb, afin d&rsquo;obtenir le <em>prompt<\/em> du shell de Busybox<\/p>\n<pre>\/ # <strong>ls<\/strong>\nbin         home        lost+found  root        tmp\ndev         lib         mnt         sbin        usr\netc         linuxrc     proc        sys         var\n\/ # <strong>uname -a<\/strong>\nLinux (none) 2.6.39-rc5-cpb #1 SMP Tue May 3 11:14:47 CEST 2011 armv7l GNU\/Linux\n\/ # <strong>cat \/proc\/cpuinfo<\/strong>\nProcessor       : ARMv7 Processor rev 2 (v7l)\nprocessor       : 0\nBogoMIPS        : 2007.19\n\nprocessor       : 1\nBogoMIPS        : 1965.18\n\nFeatures        : swp half thumb fastmult vfp edsp thumbee neon vfpv3\nCPU implementer : 0x41\nCPU architecture: 7\nCPU variant     : 0x1\nCPU part        : 0xc09\nCPU revision    : 2\n\nHardware        : OMAP4 Panda board\nRevision        : 0020\nSerial          : 0000000000000000\n\/ #<\/pre>\n<p style=\"text-align: justify;\">Nous voyons bien que nous sommes connect\u00e9s sur une carte Pandaboard&nbsp;; les deux coeurs du processeur OMAP 4 sont visibles. Observons les liens que Busybox a cr\u00e9\u00e9 sur lui-m\u00eame.<\/p>\n<pre>\/ # <strong>ls \/bin\/<\/strong>\n[              dumpkmap       kbd_mode       pmap           tail\n[[             dumpleases     kill           powertop       tar\nadd-shell      echo           killall        printenv       tcpsvd\naddgroup       ed             killall5       printf         tee\nadduser        egrep          length         ps             telnet\narping         eject          less           pscan          test\nash            env            linux32        pwd            tftp\nawk            envdir         linux64        readahead      tftpd\nbase64         envuidgid      ln             readlink       time\nbasename       ether-wake     logger         realpath       timeout\nbbconfig       expand         login          remove-shell   top\nbeep           expr           logname        renice         touch\nbunzip2        false          ls             reset          tr\nbusybox        fdflush        lsattr         resize         traceroute\nbzcat          fdformat       lspci          rev            traceroute6\nbzip2          fgconsole      lsusb          rm             true\ncal            fgrep          lzcat          rmdir          tty\ncat            find           lzma           rpm            ttysize\ncatv           flock          lzop           rpm2cpio       udpsvd\nchat           fold           lzopcat        rtcwake        umount\nchattr         free           md5sum         run-parts      uname\nchgrp          fsync          mesg           runsv          unexpand\nchmod          ftpget         microcom       runsvdir       uniq\nchown          ftpput         mkdir          rx             unix2dos\nchpst          fuser          mkfifo         script         unlzma\nchrt           getopt         mknod          scriptreplay   unlzop\nchvt           grep           mkpasswd       sed            unxz\ncksum          gunzip         mktemp         seq            unzip\nclear          gzip           more           setarch        uptime\ncmp            hd             mount          setkeycodes    usleep\ncomm           head           mountpoint     setsid         uudecode\ncp             hexdump        mpstat         setuidgid      uuencode\ncpio           hostid         mt             sh             vi\ncrontab        hostname       mv             sha1sum        vlock\ncryptpw        hush           nc             sha256sum      volname\ncttyhack       id             netstat        sha512sum      wall\ncut            ifplugd        nice           showkey        watch\ndate           init           nmeter         sleep          wc\ndc             install        nohup          smemcap        wget\ndd             ionice         nslookup       softlimit      which\ndeallocvt      iostat         od             sort           whoami\ndelgroup       ip             openvt         split          xargs\ndeluser        ipaddr         passwd         stat           xz\ndf             ipcalc         patch          strings        xzcat\ndiff           ipcrm          pgrep          stty           yes\ndirname        ipcs           pidof          su             zcat\ndmesg          iplink         ping           sum\ndnsdomainname  iproute        ping6          sv\ndos2unix       iprule         pipe_progress  sync\ndu             iptunnel       pkill          tac\n\/ # <strong>ls \/sbin\/<\/strong>\nacpid              fsck.minix         man                route\nadjtimex           ftpd               mdev               runlevel\narp                getty              mkdosfs            setconsole\nblkid              halt               mke2fs             setfont\nblockdev           hdparm             mkfs.ext2          setlogcons\nbootchartd         httpd              mkfs.minix         slattach\nbrctl              hwclock            mkfs.vfat          start-stop-daemon\nchpasswd           ifconfig           mkswap             sulogin\nchroot             ifdown             modinfo            svlogd\ncrond              ifenslave          modprobe           swapoff\ndepmod             ifup               nameif             swapon\ndevmem             inetd              nbd-client         switch_root\ndhcprelay          init               ntpd               sysctl\ndnsd               insmod             pivot_root         syslogd\nfakeidentd         klogd              poweroff           telnetd\nfbset              loadfont           raidautorun        tunctl\nfbsplash           loadkmap           rdate              udhcpc\nfdisk              logread            rdev               udhcpd\nfindfs             losetup            readprofile        vconfig\nfreeramdisk        lsmod              reboot             watchdog\nfsck               makedevs           rmmod              zcip\n\/ #<\/pre>\n<p style=\"text-align: justify;\">Nous pouvons \u00e9galement voir les fichiers sp\u00e9ciaux qui ont \u00e9t\u00e9 cr\u00e9\u00e9 par <code>mdev<\/code>.<\/p>\n<pre>\/ # <strong>ls \/dev\/<\/strong>\nconsole             ptyvf               ttydd\ncpu_dma_latency     ptyw0               ttyde\nfull                ptyw1               ttydf\ni2c-1               ptyw2               ttye0\ni2c-2               ptyw3               ttye1\ni2c-3               ptyw4               ttye2\ni2c-4               ptyw5               ttye3\nkmem                ptyw6               ttye4\nkmsg                ptyw7               ttye5\nloop0               ptyw8               ttye6\nloop1               ptyw9               ttye7\nloop2               ptywa               ttye8\nloop3               ptywb               ttye9\nloop4               ptywc               ttyea\nloop5               ptywd               ttyeb\nloop6               ptywe               ttyec\nloop7               ptywf               ttyed\nmem                 ptyx0               ttyee\nmice                ptyx1               ttyef\nmmcblk0             ptyx2               ttyp0\nmmcblk0p1           ptyx3               ttyp1\nmmcblk0p2           ptyx4               ttyp2\nnetwork_latency     ptyx5               ttyp3\nnetwork_throughput  ptyx6               ttyp4\nnull                ptyx7               ttyp5\npsaux               ptyx8               ttyp6\nptmx                ptyx9               ttyp7\nptya0               ptyxa               ttyp8\nptya1               ptyxb               ttyp9\nptya2               ptyxc               ttypa\n[...]\nptyu7               ttyc5               ttyzf\nptyu8               ttyc6               ubi_ctrl\nptyu9               ttyc7               urandom\nptyua               ttyc8               usbdev1.1\nptyub               ttyc9               usbdev1.2\nptyuc               ttyca               usbdev1.3\nptyud               ttycb               usbdev2.1\nptyue               ttycc               usbmon0\nptyuf               ttycd               usbmon1\nptyv0               ttyce               usbmon2\nptyv1               ttycf               vcs\nptyv2               ttyd0               vcs1\nptyv3               ttyd1               vcs2\nptyv4               ttyd2               vcs3\nptyv5               ttyd3               vcs4\nptyv6               ttyd4               vcsa\nptyv7               ttyd5               vcsa1\nptyv8               ttyd6               vcsa2\nptyv9               ttyd7               vcsa3\nptyva               ttyd8               vcsa4\nptyvb               ttyd9               watchdog\nptyvc               ttyda               zero\nptyvd               ttydb\nptyve               ttydc\n\/ # <strong>\/sbin\/halt <\/strong>\nswapoff: \/etc\/fstab: No such file or directory\nThe system is going down NOW!\nSent SIGTERM to all processes\nSent SIGKILL to[  973.315673] System halted.<\/pre>\n<p>Notez bien que Busybox a cr\u00e9\u00e9 les liens et les fichiers sp\u00e9ciaux ci-dessus directement sur la carte flash. Si nous la r\u00e9-ins\u00e9rons dans l&rsquo;h\u00f4te de d\u00e9veloppement, nous observerons que tous ces fichiers existent \u00e0 pr\u00e9sent dans les r\u00e9pertoires mentionn\u00e9s.<\/p>\n<h1>Conclusion<\/h1>\n<p>Nous avons install\u00e9 une base minimale pour notre syst\u00e8me Linux, et obtenu un acc\u00e8s par un shell sur le port s\u00e9rie. Dans le prochain article, nous permettrons une connexion r\u00e9seau sur notre carte, en utilisant les protocoles <em>telnet<\/em> et <em>ssh<\/em>, avant d&rsquo;offrir une interface <em>via<\/em> un navigateur web par protocole <em>http<\/em>.<\/p>\n<p><a href=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2011\/05\/capture-minicom.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-712\" title=\"Capture Minicom sur Pandaboard\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2011\/05\/capture-minicom-300x193.gif\" alt=\"Capture Minicom sur Pandaboard\" width=\"300\" height=\"193\" \/><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Nous avons r&eacute;ussi dans l&rsquo;article pr&eacute;c&eacute;dent &agrave; compiler les bootloaders X-loader et U-boot, ainsi qu&rsquo;un noyau Linux pour la carte Pandaboard.&nbsp;Le d&eacute;marrage du syst&egrave;me se d&eacute;roulait tr&egrave;s bien, le chargeur X-loader s&rsquo;initialisant d&rsquo;abord, puis passant le contr&ocirc;le &agrave; U-boot. Ce dernier pla&ccedil;ait l&rsquo;image du noyau Linux en m&eacute;moire et lui transmettait l&rsquo;ex&eacute;cution. Nous avons observ&eacute; [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,8,10],"tags":[],"class_list":["post-686","post","type-post","status-publish","format-standard","hentry","category-embarque","category-linux-2","category-microprocesseur"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/686","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/comments?post=686"}],"version-history":[{"count":0,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/686\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=686"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=686"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=686"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}