Trail Sheevaplug OpenBSD

From Tmplab

(Difference between revisions)
Jump to: navigation, search
(Docs)
Line 41: Line 41:
# cp -R /usr/src/sys/arch/gumstix /usr/src/sys/arch/sheeva
# cp -R /usr/src/sys/arch/gumstix /usr/src/sys/arch/sheeva
 +
 +
== patches pour omconsole ==
 +
 +
omconsole est un petit utilitaire écrit par matthieu@ qui permet d'accéder au port série du neo freerunner via la libftdi. Le sheevaplug a le meme circuit que le neo freerunner, il suffit donc de rajouter les options kivonbien (c).
 +
 +
<pre>
 +
--- omconsole.c.orig Tue Apr 6 23:41:29 2010
 +
+++ omconsole.c Fri Jun 11 11:46:33 2010
 +
@@ -66,18 +66,49 @@ interrupt(int sig)
 +
done = 1;
 +
}
 +
 +
+void
 +
+usage()
 +
+{
 +
+ extern char * __progname;
 +
+
 +
+ fprintf(stderr, "usage: %s [-v vid] [-p pid] [-s speed]\n", __progname);
 +
+ exit(1);
 +
+}
 +
+
 +
int main(int argc, char **argv)
 +
{
 +
struct termios tio, saved_tio;
 +
int ret;
 +
+ int ch;
 +
+ int vid = 0x1457;
 +
+ int pid = 0x5118;
 +
+ int speed = 115200;
 +
 +
+ while ((ch = getopt(argc, argv, "v:p:s:")) != -1) {
 +
+ switch (ch) {
 +
+ case 'v':
 +
+ vid = (int)strtol(optarg, NULL, 0);
 +
+ break;
 +
+ case 'p':
 +
+ pid = (int)strtol(optarg, NULL, 0);
 +
+ break;
 +
+ case 's':
 +
+ speed = (int)strtol(optarg, NULL, 0);
 +
+ break;
 +
+ default:
 +
+ usage();
 +
+ /* NOTREACHED */
 +
+ }
 +
+ }
 +
+
 +
ftdi_init(&ftdic);
 +
 +
- if((ret = ftdi_usb_open(&ftdic, 0x1457, 0x5118)) < 0)
 +
+ fprintf(stderr, "opening %d:%d\n", vid, pid);
 +
+ if((ret = ftdi_usb_open(&ftdic, vid, pid)) < 0)
 +
errx(2, "unable to open ftdi device: %d (%s)\n",
 +
ret, ftdi_get_error_string(&ftdic));
 +
ftdi_set_interface(&ftdic, INTERFACE_B);
 +
- ftdi_set_baudrate(&ftdic, 115200);
 +
+ ftdi_set_baudrate(&ftdic, speed);
 +
 +
tcgetattr(fileno(stdin), &tio);
 +
memcpy(&saved_tio, &tio, sizeof(struct termios));
 +
</pre>
== Datasheets ==
== Datasheets ==

Revision as of 18:50, 5 August 2010

Contents

Objectif

  • Faire démarrer un kernel ramdisk OpenBSD sur un Sheevaplug, et afficher le dmesg sur le port série.
  • Se familiariser avec
    • l'architecture physique des ordinateurs
    • l'architecture propriétaire ARM
    • le debugging JTAG
    • la chaine de compilation et le systeme OpenBSD

Modus operandi

Le Code Trail proprement dit commencera le vendredi 1 oct. au soir et se terminera le dimanche 3 oct dans l'apres-midi. Chaque personne qui a des tutos et des docs intéressantes est fortement invitée à les publier ou les référencer sur cette page.

Participants

  • dermiste
  • James
  • phantez
  • nizox

Docs

Cross-compilation sur OpenBSD

Il faut d'abord récupérer l'arborescence des sources tel qu'indiqué dans la FAQ 5.3.3, et upgrader le système au snapshot le plus récent (FAQ 5.1 et FAQ 5.3.2).

Il faut ensuite construire la chaine de compilation. Il existe pour cela une infrastructure complète, bien que non documentée. Voici par exemple la procedure a suivre pour une chaine ciblant les machines mvme88k :

# cd /usr/src
# TARGET=mvme88k make -f Makefile.cross cross-tools

Vous pouvez aller vous prendre un ou plusieurs café en attendant la fin de la compilation. Votre chaine se retrouvera dans /usr/cross/$TARGET.

Cross-compiler un noyau se fait alors de la meme maniere qu'une compilation standard, à une différence près : il faut rajouter /usr/cross/${TARGET}/usr/${TARGET_ARCH}-unknown-openbsd/bin en tête du PATH. Ce répertoire contient les liens symboliques vers les versions cross- des outils de compilation classiques.


Stub de cross-compilation pour sheevaplug

OpenBSD dispose deja de ports sur ARM. Les headers du port gumstix semblent convenir pour générer des executables pour le sheevaplug.

# cp -R /usr/src/sys/arch/gumstix /usr/src/sys/arch/sheeva

patches pour omconsole

omconsole est un petit utilitaire écrit par matthieu@ qui permet d'accéder au port série du neo freerunner via la libftdi. Le sheevaplug a le meme circuit que le neo freerunner, il suffit donc de rajouter les options kivonbien (c).

--- omconsole.c.orig    Tue Apr  6 23:41:29 2010
+++ omconsole.c Fri Jun 11 11:46:33 2010
@@ -66,18 +66,49 @@ interrupt(int sig)
        done = 1;
 }
 
+void
+usage()
+{
+       extern char * __progname;
+
+       fprintf(stderr, "usage: %s [-v vid] [-p pid] [-s speed]\n", __progname);
+       exit(1);
+}
+
 int main(int argc, char **argv)
 {
        struct termios tio, saved_tio;
        int ret;
+       int ch;
+       int vid = 0x1457;
+       int pid = 0x5118;
+       int speed = 115200;
 
+       while ((ch = getopt(argc, argv, "v:p:s:")) != -1) {
+               switch (ch) {
+               case 'v':
+                       vid = (int)strtol(optarg, NULL, 0);
+                       break;
+               case 'p':
+                       pid = (int)strtol(optarg, NULL, 0);
+                       break;
+               case 's':
+                       speed = (int)strtol(optarg, NULL, 0);
+                       break;
+               default:
+                       usage();
+                       /* NOTREACHED */
+               }
+       }
+
        ftdi_init(&ftdic);
 
-       if((ret = ftdi_usb_open(&ftdic, 0x1457, 0x5118)) < 0)
+       fprintf(stderr, "opening %d:%d\n", vid, pid);
+       if((ret = ftdi_usb_open(&ftdic, vid, pid)) < 0)
                errx(2, "unable to open ftdi device: %d (%s)\n", 
                    ret, ftdi_get_error_string(&ftdic));
        ftdi_set_interface(&ftdic, INTERFACE_B);
-       ftdi_set_baudrate(&ftdic, 115200);
+       ftdi_set_baudrate(&ftdic, speed);
 
        tcgetattr(fileno(stdin), &tio);
        memcpy(&saved_tio, &tio, sizeof(struct termios));

Datasheets

Dans la mesure du possible, épluchez un peu ces docs avant le trail.


Personal tools