Sheeva Plug et CM15 Pro
Hello world,
Le CM15 Pro de chez Marmitek est un controleur domotique X10, doté d’un transmetteur sans fil. On peut le connecter à un pc, grâce à son interface usb. Contrairement à son ancêtre le CM11, ce contrôleur n’est pas très ouvert au monde des pingouins. Néanmoins, il existe plusieurs développements en cours, qui ne permettent pas d’utiliser toutes les fonctions de ce module, mais qui assureront mes bidouilles sous linux ! Pour ma part je me suis basé sur le driver de Neil Cherry et sur l’excellent tuto de Poulpy.
Sur une architecture Arm tel que le Sheeva Plug, l’installation est plus complexe. En effet afin de compiler le driver de Neil Cherry , il faut avoir les linux-headers, c’est à dire les kernel de son noyau. Sur le Sheeva, la commande “apt-cache search linux-headers-$(uname -r)” ne me retournait rien. Après divers recherches, les headers de chaque noyau sont soi disant disponible ici. Surement, mais je n’ai jamais pu les utiliser correctement…
Du coup , j’ai télécharger mon noyau officiel et j’ai décider de le compiler, afin d’obtenir des linux-headers propres et fonctionnelles.
>cd /home/jb/source/
#téléchargement du noyau
>wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.tar.bz2
>tar jxvf linux-2.6.34.1.tar.bz2
# téléchargement des patches pour noyau de type “Sheeva”
>wget http://sheeva.with-linux.com/sheeva/2.6.33/patches/UdlFb-0.2.3-2.6.30.2.patch
>wget http://sheeva.with-linux.com/sheeva/2.6.33/patches/linux-2.6.29-usb-serial-evdo.patch
>wget http://sheeva.with-linux.com/sheeva/2.6.33/patches/linux-2.6.32-sheeva-sata.patch
>wget http://sheeva.with-linux.com/sheeva/2.6.33/patches/mvsdio-1-2.6.30.patch
>wget http://sheeva.with-linux.com/sheeva/2.6.33/patches/mvsdio-2.patch
#Installation de paquet pour la compilation
>apt-get install patch libncurses5-dev
# Patch du noyau
>cd linux-2.6.33
>patch -p1 <../UdlFb-0.2.3-2.6.30.2.patch
>patch -p1 <../linux-2.6.29-usb-serial-evdo.patch cd linux-2.6.34.1
>patch -p1 <../linux-2.6.32-sheeva-sata.patch
>patch -p1 <../mvsdio-1-2.6.30.patch
>patch -p1 <../mvsdio-2.patch
#Compilation
>wget http://sheeva.with-linux.com/sheeva/2.6.33/sheeva-2.6.33.config
>mv sheeva-2.6.33.config .config
>make menuconfig
>make
Voila après plus de 2h de compilation, je n’ai plus quà faire pointer mon répertoire des headers (/lib/modules/2.6.33/) dans le répertoire de ce noyau compilé.
>ln -s /home/jb/source/linux-2.6.33/ /lib/modules/2.6.33/build
l>n -s /home/jb/source/linux-2.6.33/ /lib/modules/2.6.33/source
J’ai pu ensuite télécharger et installer le driver du CM15.
>wget http://www.linuxha.com/common/iplcd/iplc-driver.tgz
>tar zxf iplc-driver.tgz
>cd iplc/driver/linux-2.6/cm15a.d
>make
>insmod cm15a.ko
Avant de compiler le driver, j’ai du modifié le fichier cm15a.c en changeant les lignes “/include/linux/autoconf.h” en “/include/generated/autoconf.h”.
Voila mon driver de mon module domotique opérationel, prêt à satisfaire mes geekeries et mascagnes….
Marrant, je suis en train de faire exactement la même chose … Et je reste bloqué au même endroit que toi ! lol
Du coup j’ai suivi tes étapes mais j’ai toujours le même message d’erreur …
Puis-je t’exposer mon problème et obtenir un peu d’aide car la compilation de noyau linux c’est pas trop mon truc…
Voilà ce que j’ai fait :
1- télécharger le noyau sur le site de kernel.org (linux-2.6.32.tar.bz2), détaré (long…)
2 – télécharger aussi les patch et appliqué sur le nouveau noyau
3 – make du noyau (3h chez moi …)
4 – Appliqué les liens symboliques comme toi
Voici :
***********************************
La version du noyau : (le mien est une version space finissant par “0007-g…”
***********************************
root@sheevaplug-debian:/# uname -ar
Linux sheevaplug-debian 2.6.32-00007-g56678ec #1 PREEMPT Thu Dec 24 03:15:48 PST 2009 armv5tel GNU/Linux
***********************************
Ce qui se trouve dans …. là :
***********************************
root@sheevaplug-debian:/lib/modules# ll 2.6.32-00007-g56678ec/
total 656
lrwxrwxrwx 1 root root 24 2010-09-05 16:25 build -> /media/usb1/linux-2.6.32
drwxr-xr-x 8 root root 544 2010-02-08 11:51 kernel
-rw-r–r– 1 root root 118676 2010-02-08 11:51 modules.alias
-rw-r–r– 1 root root 69 2010-02-08 11:51 modules.ccwmap
-rw-r–r– 1 root root 67730 2010-02-08 11:51 modules.dep
-rw-r–r– 1 root root 73 2010-02-08 11:51 modules.ieee1394map
-rw-r–r– 1 root root 141 2010-02-08 11:51 modules.inputmap
-rw-r–r– 1 root root 81 2010-02-08 11:51 modules.isapnpmap
-rw-r–r– 1 root root 74 2010-02-08 11:51 modules.ofmap
-rw-r–r– 1 root root 15388 2010-02-08 11:51 modules.order
-rw-r–r– 1 root root 281 2010-02-08 11:51 modules.pcimap
-rw-r–r– 1 root root 43 2010-02-08 11:51 modules.seriomap
-rw-r–r– 1 root root 41592 2010-02-08 11:51 modules.symbols
-rw-r–r– 1 root root 390425 2010-02-08 11:51 modules.usbmap
lrwxrwxrwx 1 root root 24 2010-09-05 15:57 source -> /media/usb1/linux-2.6.32
***********************************
Mon lien symbolique pointant sur le noyau compilé et patché pour mon sheevaplug :
***********************************
root@sheevaplug-debian:/lib/modules# ll /media/usb1/linux-2.6.32
total 17624
drwxr-xr-x 25 domos domos 4096 2009-12-03 03:51 arch
drwxr-xr-x 2 domos domos 4096 2010-09-05 14:32 block
-rw-r–r– 1 domos domos 18693 2009-12-03 03:51 COPYING
-rw-r–r– 1 domos domos 94031 2009-12-03 03:51 CREDITS
drwxr-xr-x 3 domos domos 20480 2010-09-05 15:47 crypto
drwxr-xr-x 85 domos domos 12288 2009-12-03 03:51 Documentation
drwxr-xr-x 88 domos domos 4096 2010-09-05 15:08 drivers
drwxr-xr-x 36 domos domos 4096 2010-09-05 15:55 firmware
drwxr-xr-x 70 domos domos 12288 2010-09-05 14:26 fs
drwxr-xr-x 22 domos domos 4096 2010-09-05 16:19 include
drwxr-xr-x 2 domos domos 4096 2010-09-05 15:44 init
drwxr-xr-x 2 domos domos 4096 2010-09-05 14:27 ipc
-rw-r–r– 1 domos domos 2430 2009-12-03 03:51 Kbuild
drwxr-xr-x 7 domos domos 12288 2010-09-05 13:48 kernel
drwxr-xr-x 6 domos domos 12288 2010-09-05 15:51 lib
-rw-r–r– 1 domos domos 159885 2009-12-03 03:51 MAINTAINERS
-rw-r–r– 1 domos domos 55203 2009-12-03 03:51 Makefile
drwxr-xr-x 2 domos domos 4096 2010-09-05 13:51 mm
-rw-r–r– 1 root root 0 2010-09-05 16:19 modules.order
-rw-r–r– 1 root root 305690 2010-09-05 15:46 Module.symvers
drwxr-xr-x 48 domos domos 4096 2010-09-05 15:42 net
-rw-r–r– 1 domos domos 17459 2009-12-03 03:51 README
-rw-r–r– 1 domos domos 3371 2009-12-03 03:51 REPORTING-BUGS
drwxr-xr-x 6 domos domos 4096 2009-12-03 03:51 samples
drwxr-xr-x 12 domos domos 4096 2010-09-05 13:41 scripts
drwxr-xr-x 7 domos domos 4096 2010-09-05 14:27 security
drwxr-xr-x 21 domos domos 4096 2010-09-05 15:54 sound
-rw-r–r– 1 root root 1086439 2010-09-05 15:45 System.map
drwxr-xr-x 3 domos domos 4096 2009-12-03 03:51 tools
drwxr-xr-x 2 domos domos 4096 2010-09-05 13:41 usr
drwxr-xr-x 3 domos domos 4096 2009-12-03 03:51 virt
-rwxr-xr-x 1 root root 7676973 2010-09-05 15:45 vmlinux
-rw-r–r– 1 root root 8481594 2010-09-05 15:44 vmlinux.o
***********************************
Et voici les messages d’erreurs que je récolte après toutes ces galères :
***********************************
root@sheevaplug-debian:/media/usb1/iplc/driver/linux-2.6/cm15a.d# make
make -C /lib/modules/2.6.32-00007-g56678ec/build SUBDIRS=/media/usb1/iplc/driver/linux-2.6/cm15a.d modules
make[1]: Entering directory `/media/usb1/linux-2.6.32′
CC [M] /media/usb1/iplc/driver/linux-2.6/cm15a.d/cm15a.o
/media/usb1/iplc/driver/linux-2.6/cm15a.d/cm15a.c: In function âopenâ:
/media/usb1/iplc/driver/linux-2.6/cm15a.d/cm15a.c:523: warning: passing argument 6 of âusb_fill_int_urbâ from incompatible pointer type
/media/usb1/iplc/driver/linux-2.6/cm15a.d/cm15a.c: In function âwriteâ:
/media/usb1/iplc/driver/linux-2.6/cm15a.d/cm15a.c:803: warning: passing argument 6 of âusb_fill_int_urbâ from incompatible pointer type
/media/usb1/iplc/driver/linux-2.6/cm15a.d/cm15a.c: In function âprobeâ:
/media/usb1/iplc/driver/linux-2.6/cm15a.d/cm15a.c:943: error: implicit declaration of function âinfoâ
make[2]: *** [/media/usb1/iplc/driver/linux-2.6/cm15a.d/cm15a.o] Error 1
make[1]: *** [_module_/media/usb1/iplc/driver/linux-2.6/cm15a.d] Error 2
make[1]: Leaving directory `/media/usb1/linux-2.6.32′
make: *** [default] Error 2
Pour info, je n’ai pas trouvé dans cm15a.c la ligne en question que tu as modifié :
“/include/linux/autoconf.h” en “/include/generated/autoconf.h”.
Ce que je crois comprendre c’est que les sources de mon noyau fraichement compilé ne sont toujours pas bonne et qu’il n’est pas capable d’aller trouver les header qu’il lui faut pour compiler ce foutu driver !!
Merci pour l’aide que tu pourrais bien m’apporter .
Bien à toi …
Math
Slt,
pour le autoconf.h, c’est à la ligne 178 du fichier cm15a.c.
de ce même fichier.
J’ai aussi commenté la ligne 948 (// goto exit
Mais a mon avis, tu n’a pas télécharger le bon noyau correspondant sur http://www.kernel.org. Il faut que tu télécharge le noyau linux-2.6.32.7.Car le noyau actuel de ton Sheeva n’est pas le 2.6.32. Comme tu le dis, c’est un peu “space”, la fin du résultat de ton uname” 0007-g56678e”. Si j’étais à ta place, je monterais en version je compilerais le noyau sur le Sheeva en 2.6.33 ou 2.6.34
(si tu montes ton Sheeva en 2.6.33, je peux te donner le driver fonctionnel)
bon courage, tiens moi au courant!
Merci pour ta réponse !
Effectivement, j’y avais pensé aussi… mais ce qui me fait un peu peur c’est d’avoir un kernel panic. si je recompile un nouveau noyau et que je configure grub par la même occasion pour pouvoir booter sur mon nouveau kernel, vu que je n’ai pas d’écran… on fait comment ?
Merci d’avance
T’inquiète… j’ai trouvé les sources qui vont bien…
Je vais tenter ce noay 2.6.32.7 et si ça va pas, je ferai du cross compilation ou directement sur le guruplug…
Merci pour ton aide, je ne manquerai pas de repasser par ton site pour te dire si ça a marché
DU BON BOULOT DE VRAI FURIEUX
@Maisondouf, merci a toi, et merci pr ton wiki de ouffffff!
@math: la mise a jour de ton noyau est assez simple :
> wget http://sheeva.with-linux.com/sheeva/README-2.6.33
> chmod +x README-2.6.33
> ./README-2.6.33 --nandkernel
De plus si tu as un problème, tu as tjs la vt100 pour te connecter au plug(cordon usb/mini-usb). Regarde bien les tutos de Maisondouf
Impeccable, exactement ce qu’il me fallait
Je n’ai pas de cordon usb/mini usb. Est-ce indispensable pour finaliser la mie à jour du noyau ?
Comme dit sur le lien officiel :
http://www.plugcomputer.org/plugwiki/index.php/Install_Prebuilt_Kernels_From_sheeva.with-linux.com; il faut rebooter après avoir appliquer le ./README.xx et dans la console dans UBOOT écrire des commandes. Or, je n’ai pas de cordon. Je crois qu’il va falloir que j’en commande un…
De plus j’ai un guruplug server standard … Ce n’est pas un cable usb/mini usb mais une interface jtag… J’ai encore d ela docà lirre avant de me lancer
Pour ceux qui passe par là et qui parle un peu anglais …
Voici comment mettre à jour le noyau d’un guruplug server :
http://kiserai.net/blog/2010/07/07/yet-another-guruplug-custom-kernel-howto
Et on a bien besoin de la jtag board. Ne pas l’acheter en même temps a été mon erreur..;Grr
Slt Math,
effectivement tu as besoin de la jtag board, car le port mini-usb est “For Jtag board connection only”…. Quel bordel !!!!
En attendant de commander cet engin, essai de compiler tes header avec le 2.6.32.7.
bon courage
Boujour,
suite à notre échange :
J’écris un petit article qui va j’espere t’aider
Thanks!