IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Embarqué Discussion :

Démarrage d'un shell sur un Module DIGI ME9210


Sujet :

Embarqué

  1. #1
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 928
    Points : 312
    Points
    312
    Par défaut Démarrage d'un shell sur un Module DIGI ME9210
    Bonjour,

    J'ai un petit souci pour le démarrage d'un shell sur le port COM.

    Sur le Module DIGI ME9210 j'ai un linux embarqué.

    D'origine dans Inittab j'ai:

    # Start busybox console
    ::respawn:/bin/cttyhack /bin/sh -l

    Le shell est bien présent.

    Mais je souhaite le lancer depuis mon logiciel.(Mes logiciels exactement)

    J'ai donc mis en commentaire:
    # Start busybox console
    #::respawn:/bin/cttyhack /bin/sh -l

    J'ai plusieurs logiciels réalisé par nos soins. Ont peux les considérer comme 2 pack.

    Le 1er et fourni avec l'image complète des partition (recompilation du noyau linux et Jffs2). Lorsque l'on nous livrera le module DIGI monté sur la carte ce logiciel sera intégré.
    Son but est de vérifier que le 2eme pack est présent. S'il n'est pas présent il démarre un shell. Pour ce faire j'ai intégré le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	
    system("/bin/cttyhack /bin/sh -l");
    Cela fonctionne très bien.

    Donc une fois que l'on reçois les carte avec le module on ajoute le 2éme pack (en ftp d'ou mon souci sur un autre poste en VB.net http://www.developpez.net/forums/d12...x/#post6976873).

    Lorsque les fichiers sont uploader, au boot du module Digi notre 1er logiciel vérifie la présence du pack2 vu qu'il est maintenant présent il démarre mon logiciel. Si tout se passe bien aucun shell n'est lancé.

    Par contre grâce au entrées du module DIGI on souhaite pouvoir le lancer en monde TTY et donc lancer un shell.
    Pour ce faire je vérifie l'état des entrées puis si l'entrée qui va bien est activée ont démarre le shell. Donc idem je lance la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	
    system("/bin/cttyhack /bin/sh -l");
    Mais la cela fonctionne pas du tout. !!!!

    Etant encore en phase de développement je reconstruit mon image des partitions sans que le 1er logiciel démarre automatiquement.

    Au boot j'ai donc linux qui se lance mais j'ai pas la main du tout sur le Port COM.

    A l'aide de telnet je lance le 2éme logiciel et la le shell se lance sans souci. Je vois bien le message:
    BusyBox v1.15.2 (2009-12-03 15:11:08 CET) built-in shell (ash)
    Enter 'help' for a list of built-in commands.

    Idem si dans Inittab je lance le logiciel 2 au lieu du 1.

    C'est donc uniquement si depuis le logiciel 1 je lance le logiciel 2 puis je lance le cttyhack.

    Y a t'il une raison à cela ? en espérant avoir été suffisamment clair.

    Je précise que pour lancer le logiciel depuis inittab j'ai juste rajouté une ligne:

    ::sysinit: /sbin/MonLogiciel1 ou MonLogiciel2

    Merci de votre aide car le je bloque vraiment.

  2. #2
    Membre chevronné

    Homme Profil pro
    .
    Inscrit en
    Janvier 2006
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Janvier 2006
    Messages : 703
    Points : 1 950
    Points
    1 950
    Par défaut
    Quelle est la commande exacte que tu utilises dans ton inittab pour enchaîner tes 2 applications ?
    A moins que tu lances appli 1 qui lance system(appli 2) qui elle même lance system(tty).
    Si c'est le cas, j'aurais plutôt tendance déjà à renvoyer une valeur d'erreur pour chaque processus et gérer les conditions un cran au dessus dans un script shell. Avec des valeurs de retour du type 0 si ok et -ERRNUM s'il y a une erreur. Comme ça tu sépares bien tes processus.

    C'est plus une question de forme, mais ça peut être source de problèmes d'enchaîner des appels system comme ça. (dans la mesure où tu perds les contextes de session).

  3. #3
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 928
    Points : 312
    Points
    312
    Par défaut
    Dans inittab je lance bien qu'un logiciel effectivement.

    Je lance le logiciel1 qui regarde si le 2 est présent si non il lance le TTY. Sa sa marche.

    Lorsque le logiciel 1 voie le 2 il lance le 2 puis le 1 est tué. Le 2 lui contrôle les entrées.
    Si l'entrée pour avoir le mode TTY est activée c'est lui qui lance le TTY ensuite on le tue pas mais a la limite ont peu le tuer sans souci.
    Si l'entrée du mode TTY n'est pas active (sur le logiciel2 donc) il lance d'autre logiciels et contrôle qu'ils fonctionnent tous (snmpd, http, telnet sur le port 24 pour un mode transparent (Ethernet -> COM)).

    Ce qui est sur c'est que le logiciel 1 ou le logiciel 2 lance bien le TTY si je le lance seul. mais si le logiciel 1 lance le 2 qui lui lance le TTY la cela marche plus.

    Si je suis ton idée il faudrait que le logiciel 1 se lance, il lance le 2 si il est présent et attend une éventuelle réponse (code d'erreur du logiciel2) et suivant ce code d'erreur il lance le TTY.

    Va falloir que je regarde comment récupérer un code d'erreur sa j'ai jamais fait encore (enfin au lycée mais bon).

  4. #4
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 928
    Points : 312
    Points
    312
    Par défaut
    J'ai rée un petit script quie se lance a la suite des autres d'origine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/bin/sh
    MONITOR="/home/bin/ncsmonitor"
    
    #Démarrage du driver GPIO
    echo -n "GPIO Diver :"
    modprobe gpio
    
    
    if [ -e $MONITOR ]
    then
      echo  "Mode NcsMonitor"
      chmod 777 /home/bin/*
      /home/bin/ncsmonitor &
      exit 0
    else
      echo "Mode TTY"
      /bin/cttyhack /bin/sh -l
      exit 1
    fi
    Mais cela change pas non plus problème.
    Si le fichier ncsmonitor est présent il le lance.
    Mais si je suis avec l'entrée déclarer TTY,il lance la console mais je n'est pas le promt.

  5. #5
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 928
    Points : 312
    Points
    312
    Par défaut
    Je viens de remarquer quelque chose quand même:


    Lorsque je lance la le mode TTY grâce à inittab comme c'est d'origine

    lancer avec "::sysinit: modprobe gpio"

    Le message qui apparaît sur le port COM est:

    BusyBox v1.15.2 (2009-12-03 15:11:08 CET) built-in shell (ash)
    Enter 'help' for a list of built-in commands.

    / #



    Lorsque je lance le mode TTY garce à aux logiciel 1, Lancé avec la commande "system("/bin/cttyhack /bin/sh -l");"

    Le message qui apparaît est:


    BusyBox v1.15.2 (2009-12-03 15:11:08 CET) built-in shell (ash)
    Enter 'help' for a list of built-in commands.

    /bin/sh: can't access tty; job control turned off
    / #



    Il y a quand même "/bin/sh: can't access tty; job control turned off" en plus.

    Merci par avance pour votre aide car la je sèche complètement, après avec tenter avec les scrypt shell au resultat identique.

  6. #6
    Membre chevronné

    Homme Profil pro
    .
    Inscrit en
    Janvier 2006
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Janvier 2006
    Messages : 703
    Points : 1 950
    Points
    1 950
    Par défaut
    Hum pas facile d'aider à distance comme ça, mais je suis curieux de savoir ce qu'il se passe exactement.

    Citation Envoyé par megamario Voir le message
    Mais si je suis avec l'entrée déclarer TTY,il lance la console mais je n'est pas le promt.
    cttyhack est-il bloquant dans ton cas ? Si tu rajoutes un message de log juste après le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /bin/cttyhack /bin/sh -l
    dans ton script, le vois-tu apparaître ?

    Autre question bête, tu as bien viré tous les respawn de ton inittab ?

    Pour être sûr de bien comprendre, si tu mets ton précédent script en sysinit et que "/home/bin/ncsmonitor" n'est pas là il te lance la console, mais sans prompt. Càd ? Qu'est-ce qui te fait dire ça ?

    Mes questions peuvent sembler bêtes, mais je pense que le problème doit être assez tordu et à la fois simple à résoudre, il faut juste que l'on comprenne bien en détail ce qu'il se passe.

  7. #7
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 928
    Points : 312
    Points
    312
    Par défaut
    Citation Envoyé par Aquanum Voir le message
    Hum pas facile d'aider à distance comme ça, mais je suis curieux de savoir ce qu'il se passe exactement.
    Je me doute que c'est pas simple, et je suis pas forcement clair dans mes explications.

    Citation Envoyé par Aquanum Voir le message
    cttyhack est-il bloquant dans ton cas ? Si tu rajoutes un message de log juste après le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /bin/cttyhack /bin/sh -l
    dans ton script, le vois-tu apparaître ?
    Apparemment ce n'est pas bloquant puisque lorsque le logiciel2 est lancé puis le mode TTY. Je quitte le logiciel2 une fois fait. Et en telnet avec la commande PS je n'est plus le logiciel 2 actifs. (de souvenir car je suis pas au boulot a cette heure donc pas toutes les infos en live).

    Citation Envoyé par Aquanum Voir le message
    Autre question bête, tu as bien viré tous les respawn de ton inittab ?
    Alors la aussi de souvenir il me semble qu'il y avait que cttyhack qui était lancé avec respawn. D'ailleurs ce mode m’échappe un peu, va falloir que je regarde ce que c’est exactement.

    Citation Envoyé par Aquanum Voir le message
    Pour être sûr de bien comprendre, si tu mets ton précédent script en sysinit et que "/home/bin/ncsmonitor" n'est pas là il te lance la console, mais sans prompt. Càd ? Qu'est-ce qui te fait dire ça ?
    Alors la depuis j'ai fait d'autre essaie aussi. Avec le script.sh que j'ai crée plus haut. Mais il bloquait le system par contre car apparemment le inittab ne se lançais plus. telnetd est lancé par inittab (d'origine) et la je n'avais plus le telnet.

    Citation Envoyé par Aquanum Voir le message
    Mes questions peuvent sembler bêtes, mais je pense que le problème doit être assez tordu et à la fois simple à résoudre, il faut juste que l'on comprenne bien en détail ce qu'il se passe.
    Rassure toi tes questions ne sont pas bête du tout, pour le moment c'est plutôt mon ignorance qui me gène car comme tu le dit c'est peut être tout simple mais j'ai peux être tout simplement pas fait comme il faudrait.

    Alors je vais essayer de résumer.
    Pour le moment j'oublie le scrip.sh.
    Les Logiciels sont réalisés en C.

    Donc dans le inittab:

    j'ai ajouté le démarrage du Driver GPIO
    J'ai mis en commentaire le démarrage du cttyhack
    Et je lance mon Logiciel1 avec la commande "::sysinit: /sbin/Logiciel1"

    Logiciel1:
    Il regarde si /home/bin/Logiciel2 est présent
    S'il est présent il fait un chmod 777 /home/bin/* (les fichiers étant passés par ftp)
    Puis il lance le logiciel2 par la commande "system(/home/bin/Logiciel2)"
    Puis il se coupe "return 0;"

    si /home/bin/Logiciel2 n'est pas présent
    Il lance le prompt par la commande "system(/bin/cttyhack /bin/sh -l)
    La j'ai bien le prompt, mais il apparaît une ligne indiquant quand même un truc qui tourne pas rond:

    BusyBox v1.15.2 (2009-12-03 15:11:08 CET) built-in shell (ash)
    Enter 'help' for a list of built-in commands.
    /bin/sh: can't access tty; job control turned off
    / #


    Logiciel2:
    Logiciel2 est notre logiciel de gestion et contrôle de l'activité de nos services
    Lorsque logiciel2 démarre il contrôle l’état des entrées.

    Si rien n'est présent il démarre nos services (snmpd, httpd, un telnetd sur le port 24 pour conversion Ethernet/port serie etc...)
    Ensuite il contrôle que tout ces logiciels sont toujours en activité par leur PID.
    La pas de souci tout fonctionne.

    Si L'utilisateur à besoin d'un prompt sur le port COM il strap l'une des entrées, il reset le module.
    Au boot Logiciel1 fait sont même boulot puis lance Logiciel2
    Logiciel2 contrôle les entrées au démarrage puis détecte l'entrée présente.
    Il démarre donc uniquement le mode tty par la même commande qu'il y a dans logiciel1 c'est a dire: "system(/bin/cttyhack /bin/sh -l)

    Et la j'ai rien du tout, pas de promt. De souvenir par telnet il me semble que si j'execute la commande PS, j'ai pas "cttyhack" mais je vois uniquement "/bin/sh" (a confirmer si c'est important, car j'ai un doute)


    Voila.


    Autre bidouille pour essayer de bien comprendre.

    Si dans inittab maintenant je démarre pas Logiciel1 mais je lance Logiciel2 (les fichiers sont bien présent et exécutable bien-sur avant).

    Je boot le module en mode TTY avec l'entrée active, il démarre Logiciel2 puis lance le cttyhack avec la même ligne bizarre qu'avec logiciel1 mais j'ai le prompt et peux exécuter des commandes.


    J’espère que cela peut vous aidez à comprendre afin de résoudre mon souci. En tout cas c'est super sympa de tenter de m'aider car la je sèche complètement. Et mon niveau actuel dans ce domaine est vraiment limité.

  8. #8
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 928
    Points : 312
    Points
    312
    Par défaut
    Voila mon Inittab:

    # Early mount proc to be able to parse /proc/cmdline in bootscripts
    ::sysinit:/bin/mount -t proc proc /proc

    # Start any script in init.d
    ::sysinit:/etc/init.d/rcS

    # Start telnet daemon.
    ::sysinit:/bin/sh -l -c '/usr/sbin/telnetd -l /bin/sh'


    # Start gpio driver
    ::sysinit: modprobe gpio


    # Start busybox console
    #::respawn:/bin/cttyhack /bin/sh -l

    # Stuff to do for the 3-finger salute
    ::ctrlaltdel:/sbin/reboot

    #Start Monitor
    ::sysinit: /sbin/monitor

  9. #9
    Membre chevronné

    Homme Profil pro
    .
    Inscrit en
    Janvier 2006
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Janvier 2006
    Messages : 703
    Points : 1 950
    Points
    1 950
    Par défaut
    Bon génial ... toute ma réponse a disparu a cause de cette fichue sécu "Votre envoi ne peut pas être exécuté car la marque de sécurité a expiré."

    Je recommence -_-
    Pourquoi utiliser sh ici ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ::sysinit:/bin/sh -l -c '/usr/sbin/telnetd -l /bin/sh'
    plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ::sysinit:/usr/sbin/telnetd -l /bin/sh
    Pour info respawn permet de relancer le processus une fois qu'il se termine. De cette façon ton shell "respawn" à chaque fois que tu le quittes.

    Je te propose de faire le test suivant :

    1) Confirme moi que l'inittab suivant fonctionne, et que tu as bien une console :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # Early mount proc to be able to parse /proc/cmdline in bootscripts
    ::sysinit:/bin/mount -t proc proc /proc
    
    # Start any script in init.d
    ::sysinit:/etc/init.d/rcS
    
    # Start telnet daemon.
    ::sysinit:/bin/sh -l -c '/usr/sbin/telnetd -l /bin/sh'
    
    
    # Start gpio driver
    ::sysinit: modprobe gpio
    
    ::sysinit:/bin/cttyhack /bin/sh -l
    
    # Stuff to do for the 3-finger salute
    ::ctrlaltdel:/sbin/reboot
    
    #Start Monitor
    ::sysinit: /sbin/monitor
    2) Modifie Logiciel1 de façon à ce qu'il retourne 0 si Logiciel2 est détecté et 1 si ce n'est pas le cas

    3) Modifie Logiciel2 de façon à ce qu'il retourne 0 si tout se passe bien et 1 si le strap est mis en mode TTY.

    4) Lance cette fois l'inittab suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # Early mount proc to be able to parse /proc/cmdline in bootscripts
    ::sysinit:/bin/mount -t proc proc /proc
    
    # Start any script in init.d
    ::sysinit:/etc/init.d/rcS
    
    # Start telnet daemon.
    ::sysinit:/bin/sh -l -c '/usr/sbin/telnetd -l /bin/sh'
    
    # Start gpio driver
    ::sysinit: modprobe gpio
    
    ::sysinit:/sbin/script.sh
    
    # Stuff to do for the 3-finger salute
    ::ctrlaltdel:/sbin/reboot
    
    #Start Monitor
    ::sysinit: /sbin/monitor
    Avec script.sh :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #!/bin/sh
    
    /sbin/Logiciel1
    result=$?
    echo "result Logiciel1 = $result"
    if [ $result -eq 1 ]; then
    	/bin/cttyhack /bin/sh -l
    fi
    
    /sbin/Logiciel2
    result=$?
    echo "result Logiciel2 = $result"
    if [ $result -eq 1 ]; then
    	/bin/cttyhack /bin/sh -l
    fi
    Ce script est vraiment pour tester, tu n'auras pas de respawn sur ton shell, pour ça il faudrait mettre un while, donc une fois le shell killé ton système n'aura plus de shell. Bref dis moi ce que te retourne ce script dans les différents cas. Si ça marche on regardera l'utilisation de system(), si ça ne marche pas, c'est qu'il y a un autre soucis avec cttyhack.
    Mais comme ça on va pouvoir avancer et se rapprocher de la source du pb.

  10. #10
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 928
    Points : 312
    Points
    312
    Par défaut
    Merci pour toutes ces informations.


    -Pour le lancement de telnet j'ai rien changé il était comme cela lors de la compilation du projet avec Digi EL (eclipse fourni par DIGI) et pré-configuré.

    Toutefois j'ai essayé avec:
    ::sysinit:/usr/sbin/telnetd -l /bin/sh

    Mais cela change rien, par contre j'ai trouvé comme obliger à ce loguer lors d'une session telnet j'ai changer la commande par:
    ::sysinit:/bin/sh -l -c '/usr/sbin/telnetd -l /bin/login'


    1) Pour info /sbin/monitor que l'on voie dans 'inittab c'est mon Logiciel1.
    Oui le prompt est bien présent.


    Avant de continuer j'ai trouvé une solution qui fonctionne mais avec le message d'erreur présent.

    Au lieu de lancer:
    system("/bin/cttyhack bin/sh -l");

    Je lance:
    system("/bin/sh < /dev/ttyS0 > /dev/ttyS0");

    Et la quelque que soit le logiciel qui le lance, Logiciel1->TTY ou Logiciel2->TTY ou Logiciel1->Logiciel2->TTY cela fonctionne mais avec le message en gras:

    BusyBox v1.15.2 (2009-12-03 15:11:08 CET) built-in shell (ash)
    Enter 'help' for a list of built-in commands.
    /bin/sh: can't access tty; job control turned off
    / #

    Message que je n'est pas si je lance le promt avec Inittab.


    Revenons à tes demandes:

    2)Pour logiciel1 c'est fait déjà il retourne 0 s'il lance Logiciel2 et 1 s'il devait lancé le prompt.

    3) La cela va être difficile car lorsque tout se passe bien il faut que Logiciel2 reste en fonctionnement, si je retourne un 0 il va se tuer (ou j'ai mal compris).Ce logiciel lance mes autres logiciels (services) et contrôle leur fonctionnement en vérifiant leur PID. Est-qu'il peut retourner un 0 tout en continuant a fonctionné ???

    Pour un return 1 la il n'y aurait pas de souci.


    Pour la suite du coup je suis bloqué mais je comprend le code que tu a écrit.

    Je vais essayer quand même pour voir ce que cela donne.


    Apparemment /bin/cttyhack vérifier la présence entre autre du port série, puis lance bin/sh. C'est pour cela que j'ai donc virer /bin/cttyhack pour n'utiliser que /bin/sh et le rediriger vers le port COM. Cela fonctionne mais avec cette ligne de défaut.

  11. #11
    Membre chevronné

    Homme Profil pro
    .
    Inscrit en
    Janvier 2006
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Janvier 2006
    Messages : 703
    Points : 1 950
    Points
    1 950
    Par défaut
    Ah d'accord, monitor est ton Logiciel1, oui, donc il faut modifier le script en conséquence.

    En fait, si je ne me trompe pas, cttyhack te sert dans les systèmes où tes ttty ne sont pas forcément connus. Son but est de trouver la console et l'ouvrir. Cependant, si tu connais ta console, qu'elle est fixe. Tu peux utiliser getty à la place, qui généralement est mis en respawn dans l'inittab (ce qui n'est pas ton cas ici cependant)

    Concernant le Logiciel2, pas grave s'il ne se termine jamais quand tout se passe bien, ça fonctionnera quand même si tu termines en revoyant 1 en cas de TTY.

    Par contre, oui il n'est pas possible de renvoyer une valeur de retour sans terminer ton programme.

  12. #12
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 928
    Points : 312
    Points
    312
    Par défaut
    Est-ce bon de lancé le shell de cette manière:

    system("/bin/sh < /dev/ttyS0 > /dev/ttyS0");

    Car la cela fonctionne mais toujours avec le message d'erreur:
    /bin/sh: can't access tty; job control turned off


    Je n'est pas de getty dans /bin

    C'est pas simple cette histoire...

    Je vais tester tout sa.. Merci

  13. #13
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 928
    Points : 312
    Points
    312
    Par défaut
    Bon, on a réussi avec l'aide d'un collègue en glanant des informations à droite et à gauche.

    Voici ce que je lance maintenant à partir de mes logiciels:

    system("setsid sh -c 'exec sh </dev/ttyS0 >/dev/ttyS0 2>&1' &");

    et plus de souci.

  14. #14
    Membre chevronné

    Homme Profil pro
    .
    Inscrit en
    Janvier 2006
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Janvier 2006
    Messages : 703
    Points : 1 950
    Points
    1 950
    Par défaut
    Oui c'est en effet ce que propose la doc de cttyhack

    Without cttyhack, you need to know exact tty name,
    and do something like this:

    # exec setsid sh -c 'exec sh </dev/tty1 >/dev/tty1 2>&1'

    Starting getty on a controlling tty from a shell script:

    # getty 115200 $(cttyhack)
    Mais je pense que ça serait néanmoins plus propre / lisible avec getty.

    Citation Envoyé par megamario Voir le message
    Je n'est pas de getty dans /bin
    getty est un applet de busybox. Donc soit le lien n'existe pas, (essayer busybox getty) soit il faut activer l'applet dans la config de busybox à la compilation.

  15. #15
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 928
    Points : 312
    Points
    312
    Par défaut
    Je vais essayer avec getty.

    En tout cas un grand merci d'avoir suivi mon souci sur ce sujet qui me dépasse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 35
    Dernier message: 10/05/2006, 01h11
  2. démarrage de serveur IIS sur XP
    Par dracula2000 dans le forum ASP
    Réponses: 3
    Dernier message: 14/03/2006, 17h42
  3. message d'erreur sur test module
    Par Daniel MOREAU dans le forum Access
    Réponses: 5
    Dernier message: 23/11/2005, 20h19
  4. retrouver un HANDLE sur un module ?
    Par JuanLopez1966 dans le forum Windows
    Réponses: 4
    Dernier message: 27/01/2005, 13h30
  5. Commande en shell -- Sur les fichiers
    Par OrangeBud dans le forum Linux
    Réponses: 8
    Dernier message: 18/05/2004, 13h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo