Novena, le laptop open source de Bunnie Huang

Je ne présente plus Bunnie Huang, ce grand hacker et concepteur de matériel libre aux nombreuses réalisations importantes pour le monde du hacking. J’adore le fait qu’il vive pleinement son objectif d’améliorer le monde par la conception électronique.

En décembre, il nous avait présenté son projet courant, un laptop open source. Il faut bien réaliser la difficulté de ce projet: il ne s’agit pas d’un arduino, il faut être capable de comprendre le design complexe d’un appareil récent de haute technicité, en faire un schéma complet incluant des composants en boitier BGA, des bus parallèles haute bitesse à longueur controlée pour la DDR, des paires différentielles USB, SATA, LVDS, etc. C’est pas de la tarte. Tout ce petit monde doit rentrer dans une carte à au moins 4 couches si ce n’est plus.

Le projet a bien avancé. Pour vous en dire un peu plus, je vais maintenant lui passer le micro en vous présentant une traduction de l’article qu’il a publié aujourd’hui.


Nouvelles de Notre Laptop (aka Novena)

En décembre dernier, j’ai blogué à propos du fait que je construis un laptop ouvert. Le message a généré des centaines de commentaires, et j’ai été bien surpris de rencontrer tant d’intérêt.

Pour être honnête, ça m’a un peu dépassé. De plus, beaucoup de gens ne comprenaient pas ce que nous sommes en train de faire, ce qui se voyait aux suggestions du genre “mettez y un Core I7 et un bon GPU nVidia, vendez le pour moins de 1000 euros, et je l’achèterai”.

Plutôt que de tenter de convaincre tout Internet, ou de me laisser distraire par une campagne Kickstarter alors que le projet est très complexe et particulièrement risqué, j’ai décidé de rester discret et de me concentrer sur ce que je fais le mieux – hacker du hard.

Donc malgré le manque de nouvelles par ici, le projet est toujours bien vivant et actif. Tous nos progrès ont pu être suivis via nos repository git et sur notre wiki. Il y a aussi un forum de discussion, même si je n’y passe qu’environ une fois par mois. Le déroulement de la mise sous tension de la carte et la matrice de validation des fonctionnalité se trouve ici, et la liste des modifications entre le prototype de validation électrique (EVT)  et le prototype de validation de la conception (DVT) est documentée ici. Nous nous sommes également amusés à écrire du code pour calibrer les délais de propagation sur le bus DDR3 pour quelques modules SO-DIMM.

NDT: Bunnie nomme “EVT” (engineering validation test) la version initiale de la carte, et “DVT” (Design validation test) la version révisée de la carte.

La version “trop long; rien lu” de ce qui se trouve dans le wiki est donc : la carte a subi une révision majeure et a reçu quelques améliorations qui, je le pense, ont véritablement affiné la vision que nous avons de ce projet.

Le FPGA

Pour moi, la présence du FPGA est un vrai point de différenciation, donc je l’ai boosté; la carte DVT intègre maintenant un plus gros FPGA, un Spartan 6 LX45, doté d’une alimentation améliorée. Je veux être capable d’utiliser le FPGA comme un coprocesseur, ainsi que pour l’acquisition de données; je lui ai donc ajouté un buffer de 2 Gbit de DDR3 (256 Mo), connecté par un bus à 800 Mtransferts/seconde sur 16 bits. Pour finir, je veux pouvoir brancher divers modules d’acquisition de données à haute vitesse, donc j’ai laissé tomber le connecteur Raspberry Pi et les E/S analogiques à basse vitesse; tout le bloc est remplacé par un simple connecteur d’extension à haute vitesse. Ce connecteur met à disposition 21 paires différentielles, ainsi que quelques lignes simples. C’est suffisant pour connecter deux ADC 8 bits à 500 Msps au FPGA, ce qui en fait un système d’acquisition particulièrement correct (NDT: permettant de faire du SDR très large bande, par exemple).

L’affichage

Pour moi, il est très important d’avoir beaucoup de pixels sur mon portable. Nous avons donc révisé l’interface LCD pour qu’elle soit facilement améliorable et remplaçable en utilisant des cartes d’adaptation en mezzanine. Le premier adaptateur que nous avons conçu permet de piloter un écran Retina. Nous utilisons maintenant un écran LG LP129QE de 12,85 pouces, d’une résolution de 2560 x 1700 pixels, (soit une densité de 239 PPI), avec des couleurs en 24 bits. Il est vraiment magnifique.

On voit ci-dessous à quoi ressemble la carte mezzanine. Le circuit flex fait sur mesure transfère un double bus LVDS de 24 bits, l’alimentation, le PWM pour le rétroéclairage, un bus I2C et USB. La carte contient un circuit convertisseur de LVDS vers DisplayPort, et elle se connecte à l’écran par ces nouveaux micro-câbles coaxiaux genre IPEX.

J’ai déja passé du temps sur le design industriel (NDT: la mise en boite!) mais je ne suis pas encore prêt à partager ces détails avec tout le monde; je dirai seulement que le boitier sera fait de cuir et d’aluminium, et qu’il est fait pour être ouvert, accessible, et facilement adaptable aux futures versions de la carte mère.

En attendant, nous développons sur le système dans un état “explosé”. L’image ci-dessous montre tous les composants essentiels connectés et en fonctionnement; le clavier/souris, LCD, disque dur, carte mère, le tout exécutant son propre environnement de développement. Le bureau affiché est un Ubuntu armhf de base avec notre propre noyau personnalisé, mais cette décision est loin d’être finale; nous testons un large choix de distributions pour vérifier leur compatibilité et leur praticité.

Le boîtier routeur

Beaucoup de gens ont montré de l’intérêt pour utiliser le Novena en tant que routeur sécurisé — pour beaucoup de gens du métier, l’ouverture du système est un argument déterminant. A cette fin, nous avons conçu un boitier de conversion qui permet d’intégrer la carte mère dans un design qui rappelle un routeur conventionnel.

Le disque dur de 2,5 pouces donne une idée de l’échelle.

Le dessus est en aluminium anodisé, et la plupart des vis sont décoratives. Au départ, je voulais rappeler l’ambiance des monolithes noirs mystérieux et m’amuser à cacher les vis. A l’inverse, les vis sont maintenant présentées clairement, comme pour inviter l’utilisateur à les dévisser pour ouvrir l’objet. “Il n’y a rien de magique dans cette boite. Ouvrez moi et vous comprendrez.”

Ci dessus un routeur sans son couvercle et tous les ports connectés. Pour les partenaires avec qui je travaille, afin réduire les coûts, il est probable que nous ne câblerons que les les deux connecteurs ethernet, l’USB OTG et l’alimentation.

Le premier hack (Le Romulator)

Le Novena DVT a déja été mis à contribution pour nous aider dans nos projets de hacking. Nous avons implémenté un “romulator” grâce à la combinaison de l’interface haute vitesse, du FPGA et de la DDR3.

L’idée est d’émuler de la flash NAND en temps réel et en circuit, en utilisant le FPGA et la DDR3. Le FPGA émule fidèlement le circuit NAND, dont le contenu peut être visualisé et modifié en temps réel par le CPU i.MX6 — la DDR 3 a des tonnes de bande passante, et le macroblock DDR de Xilinx est configuré pour fournir 4 ports virtuels à la RAM. En plus, 16 Mo de DDR3 sont réservés à la capture du trafic NAND, comme un analyseur logique, ce qui nous permet d’explorer l’historique de transactions complexes, et de comprendre ce qui s’est passsé et ce qui a foiré.

Une petite carte en circuit imprimé flexible est directement branchée dans le connecteur d’extension haute vitesse. La carte est suffisamment fine pour être soudée directement sous un chip de flash pour une surveillance passive, ou directement sur la carte mère cible pour une émulation active.

D’autres cartes seront conçues pour ce port. Ma liste inclut une carte ADC rapide, des variantes pour l’acquisition de signaux digitaux, et des blocs PHY (transceivers) pour des bus standards tels que l’USB ou le HDMI.

Conclusion

Pour conclure, nous nous amusons bien à construire le portable que nous avons toujours voulu — il se situe maintenant entre un oscilloscope scriptable en python, un analyseur logique, et un laptop. Je pense qu’il va se révéler être un outil indispensable au hacking, particulièrement pour l’analyse de signaux qui demandent de conserver la synchronisation entre plusieurs couches de protocoles, des conditions de déclenchement complexe et/ou des stimuli en retour.

En ce qui concerne la question inévitable de la commercialisation, et pour combien… une fois que nous aurons terminé la construction du système (et “terminé” est très vague —  franchement, je pense que ce projet est continuellement en cours de développement et d’amélioration), je mettrai l’appareil à disposition d’acheteurs qualifiés. Parce qu’il est open source et un peu délicat à prendre en main, j’hésite à vendre ce projet à tous ceux qui ont juste besoin d’un laptop. Je m’inquiète des acheteurs qui ne comprennent pas que le mot “ouvert” nécessite aussi de mettre un peu la main à la pâte pour que tout fonctionne, et que les choses sont continuellement en développement. Ceci pourrait aboutir à un taux de retours important, ou à passer les quatres prochaines années de ma vie coincé à faire du support technique de base au lieu de faire du développement; aucune de ces deux options ne m’intéresse. Je pense donc que le formulaire d’achat sera un programme python ou javascript qu’il faudra modifier correctement et soumettre via github; ou alors je vendrai juste le kit de composants, ce qui ciblerait uniquement ceux qui savent où ils s’aventurent, et qui savent RTFM (lire le put…n de manuel). De manière très probable, le prix sera celui qu’on s’attend à payer pour un oscilloscope numérique qui restera des années dans le labo, pas pour un vulguaire “merdable” qui sera à la poubelle dans un an. Pensez à cet ordi comme un “bijou de famille”.

Enfin bref, voila le point d’avancement. Je repars hacker!


Le mot de la fin: Tout bien compris, merci Bunnie pour tout ce que tu fais pour la communauté des hackers. Je commence à économiser…