Plate-forme Java embarquée TINI

publicité
Plate-forme Java embarquée TINI
Sébastien Jean
IUT de Valence
Département Informatique
v2.1, 3 décembre 2009
Introduction
TINI, en bref
Qu’est ce que TINI ?
http://www.maxim-ic.com/products/microcontrollers/tini/
TINI (Tiny INternet Interface) = plate-forme embarquée
Micro-contrôleur + périphériques = module
Très faible encombrement (taille d’une barette DIMM)
Faible coût (70$)
Faible consommation
Haut degré de connectivité
Ethernet, 1-Wire, CAN, I2C, RS232 en standard
Programmable en C ou en Java
Mémoire RAM sauvegardée par pile
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
1 / 52
Introduction
TINI, en bref
TINI : applications
Contrôle industriel
Supervision de capteurs/actionneurs
Conversion de protocoles
Passerelle industrielle
Collecte d’informations, traitement local, puis redistribution via un
réseau IP ou téléphonique
Supervision d’installation via le web (cf. Tynamo)
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
2 / 52
Introduction
Architecture matérielle
DS80C390
Micro-contrôleur compatible 80C51
Optimisé pour une exécution 3 fois plus rapide
40 MHz, 5.5 V
4 kio de SRAM interne polyvalente
Code, données, pile
Adressage jusqu’à 4 Mio
Mapping des périphériques d’IO en mémoire
16 interruptions (dont 6 externes), 3 timers 16b, 1 watchdog
Accelérateur mathématique, 4 ports TTL 8b
2 contrôleurs CAN 2.0B, 2 ports série
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
3 / 52
Introduction
Architecture matérielle
DS80C400, DS80C410 et DS80C411
Evolution du DS80C390
75 MHz, 3.3 V
64 kio de ROM (firmware), Adressage jusqu’à 16 Mio
1 kio (DS80C400) ou 72.5 kio (DS80C41x)
4 timers 16b (Vs 3 pour le DS80C390)
8 ports TTL 8b (Vs 4 pour le DS80C390)
3 ports série (Vs 2 pour le DS80C390)
1 contrôleur CAN 2.0B (excepté sur DS80C410)
1 contrôleur Ethernet 10/100 Mb/s, 1 contrôleur 1-Wire (master)
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
4 / 52
Introduction
Architecture matérielle
Modules
Insertion du micro-contrôleur au sein d’un « module »permettant
d’obtenir une brique intégrable, avec SRAM et ou Flash
additionnelle, pile, . . .
Exemple : module DSTINIm400
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
5 / 52
Introduction
Architecture matérielle
Modules TINI à base de DS80C390
DSTINI512-KIT
512 kio de SRAM externe
512 kio de Flash externe
1 contrôleur Ethernet 10 Mb/s, 1 contrôleur 1-Wire
Pile pour la sauvegarde SRAM
DSTINI1M-KIT
1 Mio de SRAM externe
512 kio de Flash externe
1 contrôleur Ethernet 10 Mb/s, 1 contrôleur 1-Wire
Pile pour la sauvegarde SRAM
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
6 / 52
Introduction
Architecture matérielle
Modules TINI à base de DS80C4xx
DSTINIm400 et DSTINIm410
1 Mio de SRAM externe
1 Mio de Flash externe
1 RTC
Support pour 1 interface Ethernet additionnelle
Pile pour la sauvegarde SRAM
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
7 / 52
Introduction
Architecture matérielle
Sockets
Placement du module sur un « socket »permettant d’obtenir un
dispositif autonome, avec connectique, écran, . . .
Exemple : socket DSTINIs400
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
8 / 52
Introduction
Architecture système
Composants systèmes
BootLoader (4 kio)
Mise à jour de l’environnement d’exécution (via port série)
Environnement d’exécution
TiniOS (environ 400 kio avec librairies natives)
Sous-système I/O : pilotes de périphériques, pile TCP/IP (si besoin)
Sous-système mémoire : système de fichiers, tas, garbage collector
Sous-système processus : ordonnanceurs
JVM (environ 40 kio)
API de gestion du matériel
Nécessite 512 kio de SRAM externe minimum
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
9 / 52
Introduction
Architecture système
Bootstrap
1
PowerOn Reset provoqué par la mise sous tension
2
Exécution du BootLoader
Possibilité de court-circuiter le démarrage via External Reset pour
mise à jour de l’environnement d’exécution
3
Initialisation de l’environnement d’exécution
Vérification de l’intégrité du tas et du système de fichiers
Initialisation des pilotes de périphériques
Création des processus initiaux (GC + application primaire)
4
Démarrage de l’application primaire
Application Java
Taille limitée à 64 kio
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
10 / 52
Introduction
Architecture système
Processus, fichiers
Processus et threads
Processus → applications C ou Java
8 maximum, ordonnancement Round-Robin 8ms
Threads → threads Java
16 à 32 maximum, ordonnancement Round-Robin 2ms
Système de fichiers
Unix-like
Permissions, propriétaires, groupes
Pas de liens symboliques
Allocation de blocs de 512 octets en SRAM (persistante)
Montage NFS possible via API Java
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
11 / 52
Introduction
Architecture système
Protocoles et services réseaux
Protocoles
IPv4, IPv6 (TiniOS v1.1x)
TCP, UDP
IGMP, ICMP, PPP
Services
Clients : DHCP, SMTP, FTP, DNS
Serveurs : FTP, TELNET, HTTP
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
12 / 52
Introduction
Architecture système
JVM et API Java
TiniOS v1.0x
Compatible JDK 1.1.8
java.lang, java.io, java.util, java.net, java.comm
Support pour tous les types primitifs
Support JNI (méthodes natives en assembleur)
Pas de sérialisation, de réflexion, ni de chargement dynamique de classe
TiniOS v1.1x
Compatible JDK 1.4
java.lang, java.io, java.util, java.net, java.comm
Support pour tous les types primitifs
Support JNI (méthodes natives en assembleur)
Sérialisation, réflexion, chargement dynamique de classe, RMI
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
13 / 52
Introduction
TINI SDK
TINI SDK
Logiciels à embarquer
TiniOS + JVM (v1.0x ou v1.1x)
Slush (application primaire standard)
Outils de mise à jour du firmware
MTK (Windows uniquement)
JavaKit (multi-cibles, basé sur JavaComm)
Outils de développement
TiniConvertor
Application Java
Vérification de compatibilité et conversion .class vers .tini
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
14 / 52
Introduction
TINI SDK
Slush
Interpréteur de commandes extensible à la Unix, écrit en Java
Gestion du système de fichiers
Création de fichiers/répertoires, permissions, . . .
Administration système
Gestion de comptes utilisateurs, . . .
Configuration réseau
Configuration d’interfaces et de services
Exécution d’applications Java
Redirection des entrées/sorties standard, exécution en arrière-plan
Session utilisateur via liaison série ou telnet
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
15 / 52
Installation
Matériel et logiciels
Matériel
Module DSTINIm400
Socket DSTINIs400
Alimentation 5V (500 mA min)
Câble série DCE-DTE (droit)
Câble Ethernet RJ45 croisé
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
16 / 52
Installation
Matériel et logiciels
Logiciels
Station de développement
Système quelconque (de préférence MacOS X ;-) )
JDK 1.5 (ou 1.4), éventuellement Eclipse
RxTx 2.1.7 (ou JavaComm)
TINI SDK
http://files.dalsemi.com/tini/index.html
TiniOS v1.17
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
17 / 52
Installation
Matériel et logiciels
TINI SDK
Décompactage de l’archive dans un répertoire tini1.17
Firmware, slush
Outils de chargement
SDK Java
Documentation
+ Javadoc API
SDK C
Sources des
outils
Exemples d'applications
Java et C
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
18 / 52
Installation
Matériel et logiciels
TINI SDK (suite)
Sous-répertoire bin
Slush
TiniOS
Outils de
chargement
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
19 / 52
Installation
Chargement du firmware et de Slush
Connexion PC-TINI
Connexion série via port Serial0 (DCE)
Remarque : seulement 4 broches utilisées
RX, TX, GND
Utilisés pour le transfert de données
DTR
Utilisé pour provoquer un External Reset
Débrayable en général sur le socket (cf. jumper J14 sur DSTINIs400)
Sur station de développement, tini.jar dans le classpath
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
20 / 52
Installation
Chargement du firmware et de Slush
JavaKit
Sur station de développement : java JavaKit
Remarque :
JavaKit utilise le paquetage javax.comm et RxTx définit le paquetage
gnu.io → modification des sources (JavaKit ou RxTx) nécessaire
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
21 / 52
Installation
Chargement du firmware et de Slush
JavaKit : choix du module
Sélection du
type de module
(ici TINIm400)
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
22 / 52
Installation
Chargement du firmware et de Slush
JavaKit : ouverture du port
Nom du port
(dépend de la plate-forme)
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
23 / 52
Installation
Chargement du firmware et de Slush
JavaKit : External Reset
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
24 / 52
Installation
Chargement du firmware et de Slush
JavaKit : Chargement de TiniOS + JVM
Load File ...
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
25 / 52
Installation
Chargement du firmware et de Slush
JavaKit : Chargement de TiniOS + JVM (fin)
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
26 / 52
Installation
Chargement du firmware et de Slush
JavaKit : Chargement de Slush, initialisation du tas
Chargement de Slush
Procédure identique au chargement de TiniOS (via menu File)
Initialisation du tas
Remplir de 0 la zone réservée au tas
Pour DSTINIm400 : (autres, cf. documentation !)
B0 (sélection de la banque de mémoire 0, 64 kio)
F0 (remplissage avec des 0)
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
27 / 52
Installation
Chargement du firmware et de Slush
JavaKit : Premier redémarrage
Commande EXIT (ou simplement E)
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
28 / 52
Utilisation de Slush
Commandes générales
Login
Au démarrage 2 utilisateurs existent :
Administrateur :
root, avec comme mot de passe tini
Utilisateur :
guest, avec comme mot de passe guest
L’interpréteur de commandes supporte :
La redirection des entrées-sorties vers des fichiers
via <, > et >>
L’exécution en tâche de fond, via &
logout :
Clôture de la connexion
reboot :
Redémarrage du système
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
29 / 52
Utilisation de Slush
Commandes générales
Aide et gestion des utilisateurs
help :
Aide en ligne
Sans paramètre :
Liste de toutes les commandes disponibles
Avec en paramètre un nom de commande :
Aide sur l’utilisation d’une commande spécifique
useradd :
Ajout d’utilisateur
Distinction utilisateur/administrateur via un niveau de privilège
userdel :
Suppression d’un utilisateur
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
30 / 52
Utilisation de Slush
Commandes générales
Gestion des utilisateurs (fin)
who :
Liste des utilisateurs connectés (via série, telnet ou ftp)
whoami :
Identité de l’utilisateur courant
passwd :
Modification du mot de passe (d’un utilisateur)
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
31 / 52
Utilisation de Slush
Commandes générales
Variables d’environnement, historique, script, . . .
setenv :
Gestion des variables d’environnement
history :
Liste des 5 dernières commandes exécutées
source :
Exécution d’un script (ensemble de commandes)
su :
Exécution d’une commande en mode privilégié
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
32 / 52
Utilisation de Slush
Commandes générales
Messages, état du système. . .
date :
Gestion de la date système
echo :
Affichage d’un message
wall :
Diffusion d’un message à tous les utilisateurs
stats :
Visualisation de l’état du système
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
33 / 52
Utilisation de Slush
Gestion de fichiers
Système de fichiers initial, navigation
Arborescence initiale :
Répertoire etc, contenant les fichiers :
passwd : fichier de mots de passe (masqués)
.startup : script de configuration (modifiable) exécuté au lancement
Répertoire tiniext
Localisation des classes étendant l’environnement Java
Similaire à jdk/lib/ext dans un JDK/JRE classique
cd :
Déplacement dans un sous-répertoire
pwd :
Identification du répertoire courant
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
34 / 52
Utilisation de Slush
Gestion de fichiers
Enumération, affichage, création/suppression, . . .
ls ou dir :
Enumération du contenu d’un répertoire
cat :
Affichage d’un fichier
md ou mkdir :
Création de répertoire
rm ou del :
Suppression de fichier
rd ou rmdir :
Suppression de répertoire
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
35 / 52
Utilisation de Slush
Gestion de fichiers
Copie, renommage, droits
cp ou copy :
Copie de fichiers/répertoires
mv ou move :
Déplacement/renommage de fichiers/répertoires
append :
Concaténation de fichiers
touch :
Rafraîchissement de la date de dernière modification d’un fichier
chmod :
Modification des droits d’accès sur un fichier/répertoire
chown :
Modification du propriétaire d’un fichier
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
36 / 52
Utilisation de Slush
Processus et réseau
Gestion de processus
df :
Visualisation de la mémoire libre
ps :
Visualisation des processus en exécution
kill :
Terminaison d’un processus
wd :
Gestion du watchdog
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
37 / 52
Utilisation de Slush
Processus et réseau
Gestion du réseau
hostname :
Affectation d’un nom d’hôte à la Tini
ipconfig :
Visualisation ou modification de la configuration réseau
Configuration manuelle ou via DHCP
Remarque : sauvegarde en mémoire persistante recommandée
ping :
Test d’accessibilité d’une machine distante
startserver :
Démarrage d’un service réseau
Serveur de session série, serveur TELNET, serveur FTP
stopserver ou downserver :
Arrêt d’un service réseau
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
38 / 52
Utilisation de Slush
Processus et réseau
Gestion du réseau (fin)
netstat :
Visualisation des connexions TCP actives
nslookup :
Résolution DNS (client)
arp :
Visualisation de la table d’adresses MAC
ftp :
Client FTP
sendmail :
Client SMTP
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
39 / 52
Utilisation de Slush
Java
Gestion d’applications Java, extension de Slush
addc :
Extension de Slush, via classes Java
java :
Exécution d’une application Java
gc :
Exécution forcée du Garbage Collector
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
40 / 52
Développement d’applications
API Tini
Java pour la Tini
TiniOS 1.1x → JDK1.4
1 application Java = 1 processus
8 processus (gc et Slush sont 2 processus) maximum
32 threads Java maximum
255 attributs statiques et 255 attributs non statiques par classe
63 variables locales par méthodes
Taille maximale des classes converties = 32 kio
24 sockets maximum
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
41 / 52
Développement d’applications
API Tini
API de base
com.dalsemi.system
Abstraction du matériel et primitives systèmes
com.dalsemi.comm
Communication série
com.dalsemi.fs
Système de fichiers
com.dalsemi.onewire.*
Communication iButton, . . .
com.dalsemi.shell
Interprétation de commandes, . . . (base de Slush)
com.dalsemi.tininet.*
Communication réseau, DHCP, DNS, ICMP, PPP
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
42 / 52
Développement d’applications
API Tini
API de base (suite)
Optimisation de certaines classes pour la Tini
Définition de sous-classes à utiliser de préférence
javax.comm.SerialPort
com.dalsemi.comm.TINISerialPort
java.io.File
com.dalsemi.fs.DSFile
java.net.DatagramSocket
com.dalsemi.tininet.TINIDatagramSocket
java.net.MulticastSocket
com.dalsemi.tininet.TINIMulticastSocket
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
43 / 52
Développement d’applications
API Tini
Paquetage com.dalsemi.system
Classe BitPort
Manipulation au niveau bit des broches du processeur
Classe BytePort
Manipulation au niveau octet des broches du processeur (si supporté)
Classe DataPort
Manipulation des périphériques d’IO mappés en mémoire
Classe Clock
Manipulation de l’horloge temps-réel
Classe TINIOS
Configuration et obtention de l’état du système
Classe Debug
Méthodes utilitaires pour la mise au point logicielle
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
44 / 52
Développement d’applications
API Tini
API optionnelle
API de base = classes déjà présentes dans l’environnement
API optionnelle = classes à charger si utilisées par les applications
Support CAN, SPI, I2C
Serveur HTTP
Fonctionnalités PPP avancées
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
45 / 52
Développement d’applications
Génération de code
Edition/compilation d’une application
Edition
Classique, avec ou sans IDE (Eclipse par ex.)
Compilation
Spécification d’une cible (si utilisation d’un JDK >1.4)
-source=1.4 -target=1.4
Spécification des classes de bases (java.lang, api tini) à utiliser pour
la compilation
-bootclasspath=<tiniSDK>/bin/tiniclasses.jar
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
46 / 52
Développement d’applications
Génération de code
Conversion, chargement et exécution d’une application
Conversion
Utilisation de l’outil TiniConvertor
Chargement
Utilisation de FTP
Exécution
Sous Slush : java myapp.tini
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
47 / 52
Développement d’applications
Exemple
Application exemple
Simplification (à l’extrême) de l’exemple Blinky fourni par Dallas
Code de l’exemple
package fr.iutvalence.pedago.tini.examples;
import com.dalsemi.system.BitPort;
class BlinkModuleLed
{
public static void main(String[] args)
{
BitPort bp = new BitPort(BitPort.Port5Bit2);
while (true)
{
bp.clear();
try {Thread.sleep(1000);} catch (InterruptedException ie) {}
bp.set();
try {Thread.sleep(1000);} catch (InterruptedException ie) {}
}
}
}
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
48 / 52
Développement d’applications
Exemple
Compilation de l’application
Fichier BlinkModuleLed.java supposé être dans src
Fichier tiniclasses.jar supposé être dans lib
Fichier BlinkModuleLed produit dans build
Compilation
javac -d build -source=1.4 -target=1.4
-bootclasspath=lib/tiniclasses.jar src/BlinkModuleLed.java
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
49 / 52
Développement d’applications
Exemple
Conversion de l’application
Outil TINIConvertor
Inclus dans tini.jar
Vérification des classes (respect des contraintes)
Conversion dans un format plus léger et facilitant le chargement
Format .tini
Possibilité de regrouper dans un même fichier plusieurs classes, dont
une application (détectée automatiquement)
Utilise un référentiel de dépendances, pour faciliter l’édition de lien
Fichier tini.db (inclus dans le SDK)
Conversion
java TINIConvertor -f build/BlinkModuleLed.class -o
tini/blink.tini -d lib/tini.db
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
50 / 52
Développement d’applications
Exemple
Chargement, exécution de l’application
Chargement :
1
Connexion sur le serveur FTP (supposé activé) de la Tini
2
Dépôt du fichier blink.tini
Exécution :
1
Ouverture d’une session sur la Tini (via série ou telnet)
2
Déplacement dans le répertoire où se trouve blink.tini
3
Lancement en tâche de fond via java blink.tini &
Arrêt via ps et kill
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
51 / 52
Développement d’applications
Exemple
Fin !
Sébastien Jean (IUT Valence)
Java embarqué, Tini
v2.1, 3 décembre 2009
52 / 52
Téléchargement