Brevet FR2857476A1 — publié le 20050114

B11093 FR SYSTEME PERMETTANT D'OPTIMISER LA GESTION DES COMPOSANTS LOGICIELS INTEGRES DANS UN SYSTEME EMBARQUE, NOTAMMENT DANS UN TELEPHONE MOBILE La présente invention concerne le Bus Logiciel', un système permettant de connecter des composants logiciels indépendants de manière extrêmement efficace, visant le domaine des systèmes embarqués et tout particulièrement de la téléphonie mobile. 1. Résumé des inventions 1.1 But de l'invention Faciliter l'intégration, la validation et la mise à jour de fonctions logicielles dans les téléphones portables. 1.2 Moyens intégrés dans un téléphone portable permettant d'atteindre ce but: a/ Un ensemble de composants logiciels, chaque composant réalisant une ou plusieurs fonctions logicielles cohérentes, (fonctions élémentaires ou complexes). Ces composants logiciels peuvent réaliser des fonctions de façon indépendante ou en coopération avec d'autres composants. Note: les composants logiciels ne constituent pas l'invention en tant que telle. Mais lors de leur génération, à partir de code standard, un certain nombre de modifications et d'ajout d'information, propre à l'invention, sont appliqués. b/ Le ou les processeurs du téléphone portable redirige, pour toute demande de coopération émise par un composant logiciel vis-à-vis d'un autre composant logiciel, le composant émetteur vers le second composant via une partie logicielle spécifique, appelée PROXY (ou encore bus logiciel'), dont le point d'entrée unique est spécifié par composant. Ce PROXY redirige un composant vers un autre composant de manière dynamique. Il est surtout important de noter que le PROXY, par défaut, ne stocke ni ne génère aucune information. Sa fonction est limitée à mettre en relation deux composants logiciels de façon que l'ensemble des deux composants réalise la fonction souhaitée qui requiert l'utilisation de deux composants logiciels. Pour réaliser cette fonction, le PROXY utilise deux informations, rajoutées lors de la génération du composant: l'identifiant du composant souhaité ainsi que l'identifiant de la fonction requise que doit exécuter le second composant. Ainsi le PROXY a une fonction d'aiguillage et non de gestion de communication. A cette fonction et grâce au fait que le PROXY gère l'aiguillage des communications entre composants, le PROXY peut aussi jouer le rôle de contrôleur d'accès entre composants, de redirection de communications, de changement de contexte en passant d'un composant à un autre, de traducteur en passant d'un composant d'un certain type à un composant d'un autre type (exemple: passage d'un composant codé en C à un composant codé en JAVA), de redirection sur un autre processeur ou sur une interface réseau... Exemple: Un premier composant logiciel est un jeu. Un second composant logiciel est l'affichage graphique. Dans le codage standard du composant jeu, le composant jeu appelle une fonction spécifique d'affichage. Dans l'invention, cet appel est redirigé de manière transparente pour le développeur vers un point d'entrée unique du PROXY, PROXY qui se charge d'aiguiller vers la fonction d'affichage appropriée du second composant. 1.3 Avantages Principaux Les ressources utilisées pour faire coopérer les composants entre eux sont réduites par rapport à l'état antérieur de la technique où l'on faisait appel à des messages recopiant des informations pour faire communiquer entre eux des composants indépendants. Avec la technique antérieure, il était nécessaire de faire appel à plusieurs centaines d'instructions pour faire coopérer deux composants logiciels tandis que, grâce à l'invention, on peut faire coopérer des composants logiciels avec une dizaine d'instructions. L'invention permet ainsi de conserver une très grande efficacité du logiciel tout en ayant un point unique de contrôle des communications entre les composants. Ainsi, on peut généraliser l'utilisation d'un mode contrôlé de communication entre composants pour n'importe quelle communication, permettant ainsi d'isoler de manière complète un composant d'un autre. 1.4 Plus généralement: Plus généralement, l'invention peut être considérée comme l'adaptation du principe du bus hardware dans le cas de systèmes softwares. En effet, dans les architectures hardware, un bus (partie hardware spécifique d'une puce) est responsable de la transmission des signaux entre les différents blocs intégrés dans une des parties de la puce. Le bus hardware est en charge de la transmission des signaux entre différents blocs hardware. Il peut être aussi en charge de certains contrôles conne les droits d'accès à des ressources spécifiques.. . De la même manière, l'invention agit tel un bus, software. Lors de la génération d'un composant, toutes les interactions, explicites ou implicites d'un code vers le reste du système sont redirigées de manière à être connectées par la suite au PROXY, ce, lors de la génération du composant. Une fois le composant installé dans le système, c'est-à-dire le composant relié au bus logiciel, toutes les communications inter composant sont gérées via le PROXY. 2. Présentation du problème La complexité du logiciel résidant dans des systèmes embarqués tels que les téléphones portables, les appareils de photographie, les systèmes de navigation pour automobile... a incroyablement augmenté durant la dernière décennie, pour atteindre des niveaux comparables à ceux atteints dans des appareils type ordinateur personnel PC. L'industrie, en particulier celle de la téléphonie mobile, se trouve confrontée au challenge de rapidement développer de nouveaux appareils, intégrant un très grand nombre de fonctionnalités sur une myriade de plateformes très diverses. Associé à cette croissance de la complexité, les systèmes embarqués doivent aujourd'hui répondre à un cahier de charge réunissant à la fois des contraintes de flexibilité, d'ouverture (via téléchargement ou par ajout d'accessoires ou de carte mémoires), de coût, de rapidité de développement, et de robustesse voire de sécurité. Ces contraintes se retrouvent tout particulièrement au niveau du logiciel de tels systèmes. A la vue de ces contraintes, il apparaît clairement que le challenge auquel se trouve confronté l'industrie vis-à- vis du software n'est plus lié essentiellement à une problématique de développement (de tel ou tel logiciel ayant une fonctionnalité donnée plus ou moins complexe à implémenter), mais plutôt à une problématique d'intégration et de validation (de bouts logiciels de provenances diverses), comme cela est le cas pour l'industrie du hardware depuis une décennie. Le but de la technologie d'Open-Plug est de faciliter la tâche d'intégration et de validation de systèmes embarqués logiciels complexes grâce à une technologie qui permet d'isoler les bouts logiciels en les transformant en composants indépendants, tout en conservant au niveau du système des performances équivalentes aux technologies usitées à ce jour. Et ce, tout en ouvrant le système ainsi constitué à des ajouts ou corrections une fois les appareils commercialisés. 3. Etat de l'art Les logiciels embarqués sont traditionnellement développés sous formes de couches logicielles, couchent ayant éventuellement dans le cas des systèmes les plus évolués des privilèges d'accès au processeur ou à des ressources spécifiques du systèmes. La communication intra et inter couche se fait de manière procédurale (appel de fonction). Quant à l'image finale du logiciel, elle est réalisée suite à une phase de compilation bout par bout et de linkage' de l'ensemble. Ce type de développement a l'avantage de créer des systèmes très efficaces en termes d'utilisation des ressources et de rapidité. En revanche, ils cumulent un certain nombre de problèmes, problèmes devenant de plus en plus difficiles à gérer avec une complexité croissante du système. On peut citer en particulier les problèmes de test, de développement par parties distinctes, de portage sur d'autres plateformes, de mise à jour, de stabilité, de flexibilité ... On a représenté sur la figure 1 le mécanisme procédural et image associé en mémoire. Les légendes de cette figure correspondent aux éléments suivants: 1: Code A 2: Code B 3: Code C 4: Image finale après l'opération d'édition de liens (linkage') des codes A,B, et C une fois en mémoire, prés à 25 l'exécution par le processeur. Afin de palier ces problèmes, la plupart des acteurs du monde de l' embarqué ont adapté l'approche dite composant' , développée pour des systèmes beaucoup plus gros et complexes (en particulier au niveau des serveurs) à des plateformes beaucoup plus vétustes. Cela a été fait en remplaçant, lorsque cela était possible, les appels procéduraux par des échanges de messages via l'OS. Cela permet de bien mieux séparer, et de manière contrôlée, les échanges entre entités logicielles. En revanche, du fait de la lourdeur d'un tel mécanisme (en termes de développement et de demande en ressources), ce mécanisme n'est utilisé que partiellement, les appels procéduraux restant monnaie courante dans de tels systèmes, limitant ainsi l'intérêt de l'approche puisque la plupart des désavantage cités préalablement perdurent. On a représenté sur la figure 2 le mécanisme à base de messages Les légendes de cette figure correspondent aux éléments suivants: 1: Code A 2: Code B 3: Code C 4: Fonction fournie par l'operating system 5: Message envoyé par les différents codes utilisant le router 6/ 6: Router des différents messages 7: Boite aux lettres recevant les messages et géré par l'operating system. 4. La technologie Open-Plug / l'invention L'invention concerne un système permettant d'optimiser la gestion des fonctions logicielles intégrées dans un système embarqué, notamment dans un téléphone mobile. Le système est plus particulièrement destiné à faciliter l'intégration, la validation et la mise à jour des fonctions logicielles. Le système comprend: - un premier module logiciel, associé à un équipement informatique de type PC, permettant de générer des composants logiciels à partir d'un code informatique standard, notamment de type C,C++, JAVA, en intégrant des identifiants dans chacun des composants logiciels. Les identifiants se présentant sous la 30 forme: É d'un identifiant du composant logiciel, notamment une adresse du composant logiciel, É d'un identifiant d'une fonction logicielle déterminée parmi les fonctions logicielles du système embarqué et destinée à être exécutée en faisant coopérer une pluralité de composants logiciels. Ainsi, les composants logiciels comportent des identifiants et des liens de communications autonomes et sont 5 compilables indépendamment les uns des autres. Les composants logiciels sont destinés à être intégrés dans le système embarqué, notamment dans le téléphone mobile. Le système embarqué comprend: - un second module logiciel, notamment un bus 10 logiciel ou proxy, - au moins un microprocesseur, destiné à : É activer les composants logiciels, É transmettre des informations entre les composants logiciels, via le second module logiciel. Le second module logiciel comporte un point d'entrée spécifique à chacun des identifiants des composants logiciels. Le second module logiciel permet d'établir des communications appropriées entre la pluralité de composants logiciels en vue de la réalisation de la fonction logicielle déterminée parmi les fonctions logicielles du système embarqué. Les communications appropriées sont établies en mettant en oeuvre le second module logiciel pour router le microprocesseur vers la pluralité de composants logiciels en fonction des identifiants des composants logiciels. Ainsi, les communications entre les composants logiciels sont gérées et aiguillées à partir d'un point d'accès unique constitué par le second module logiciel. Les composants logiciels peuvent être téléchargés, corrigés, remplacés de manière dynamique, indépendante et à 30 distance. Les droits d'accès entre les composants logiciels peuvent être contrôlés de manière centralisée. 4.1 Principe: La technologie d'Open-Plug consiste à mettre en place 35 une manière de communiquer entre les entités logicielles tout aussi performante que les appels procéduraux tout en permettant à ces entités d'agir comme des composants logiciels complètement indépendants. Le principe de base de l'invention est le suivant: - un code initial standard (compilable de manière autonome) est retravaillé de manière automatique (préprocessing) afin que toutes les utilisations de ressources externes à ce code initial soit remplacées par: - une redirection du processeur vers une entrée 10 unique par composant, d'un code appelé le PROXY - l'ajout d'information dans le contexte du processeur avant cette redirection, information permettant de connaître la ressource externe demandé (par exemple numéro du composant demandé et le service associé). Le code ainsi généré est compilable et linkable (édition de lien) de manière autonome. A ce code, on ajoute lors de cette phase de préprocessing un certain nombre d'informations supplémentaires qui y seront accolées afin de constituer ce que l'on appelle un composant (Open-Plug). Ainsi, un composant ne peut communiquer avec le reste du système que part l'intermédiaire du PROXY. - un moteur se trouve sur le système embarqué et permet d'activer les composants en conservant une information sur les services qu'ils implémentent et permet surtout leur communication via le PROXY. Le proxy est un bout logiciel, qui, en mode standard, en quelques instructions, récupère les informations du composant et du service demandé par un composant et fait sauter' le processeur directement à l'emplacement du code ou ce service se trouve. On a représenté sur la figure 3 le mode de communication inter composant selon l'invention. Les légendes de cette figure correspondent aux éléments suivants: 1: Code A 2: Code B 3: Code C 4: Entité en charge de l'aiguillage et du contrôle des différentes communications (PROXY) entre les composants 5: Data base contenant informations sur les différents composants 6: Manager, en charge de l'activation et de la désactivation des différents composants 7: Appel procédural redirigé vers le PROXY du moteur logiciel On a représenté sur la figure 4 l'image mémoire selon l'invention. Grâce à ce mécanisme, les entités logicielles se trouvent complètement isolées du reste du système via le PROXY. Le PROXY peut, selon la configuration du système et les contraintes associées, ajouter des fonctionnalités de contrôle de flux de communication, de redirection (entre différents processeurs ou entre composants de nature différentes ou de privilèges différents), de remplacement de composants, de traduction d'un langage à un autre, de passerelle vers une autre entité d'exécution (autre processeur, carte a puce, réseau, accessoires). Cette technologie permet ainsi de récupérer tous les avantages liés à l'utilisation d'une approche composant (facilité de portage, de test, de maintenant, stabilité, sécurité, flexibilité de la configuration logicielle, flexibilité au niveau de l'architecture hardware...) sans aucun compromis au niveau performance ni contrainte pour le développeur. D'autres part, les composants logiciels étant générés de manière indépendantes, ils peuvent être inter- changés, modifiés, mis à jour ou ajoutés sans aucun impact sur le reste du système. 5. Exemple d'implémentation: 5.1 Définitions: Afin de plus facilement introduire les concepts liés à l'invention, un certain nombre de définitions sont listées ci-après: Composant logiciel: un composant logiciel est un bout 5 logiciel fournissant un ensemble de services cohérents au reste du système. Service: un service est une fonctionnalité quelconque fournie par un composant logiciel, et qui peut être utilisé par d'autres composants. Quand un composant souhaite utiliser un service d'un autre composant, il émet une demande de service' ('service request') et agit en tant que client' par rapport à l'échange. Le composant fournissant la fonctionnalité souhaitée est appelé le serveur, et répond au composant client via une réponse de service' (service answer'). Composant logiciel OP: un composant logiciel OP est un composant logiciel qui inclut un certain nombres de spécificités liées à l'invention. Dans la suite du document, le terme composant logiciel sera habituellement utilisé pour composant logiciel OP'. Un composant OP est un composant complètement autonome à l'exécution, n'interfaçant avec le reste du système que via des échanges de services contrôlés par le PROXY. De plus, un composant OP inclus un certain nombre d'informations additionnelles, ajoutées lors de sa génération automatique, et utilisées par le moteur pour gérer les spécificités de chaque composant. Système logiciel: le terme système logiciel habituellement réfère de manière générique à tout ensemble logiciel s'exécutant sur un appareil. Dans le cadre de l'invention, un système logiciel est vu comme un ensemble de composants logiciels, assemblés et communicants via des échanges de services. Un système logiciel peut être distribué sur plusieurs unités de processing (plusieurs processeurs, cartes a puces, réseau...). Activation: un composant logiciel est dit activé' 35 (activated) lorsqu'il peut gérer des demandes de services venant d'autres composants. A ce titre, un composant aura besoin d'un certain nombre de ressources fournies par le système afin d'être activé (mémoire, droits d'accès, ...). Installation un composant logiciel est dit installé' (installed) lorsqu'il peut être activé dans le système. Au contraire, un composant logiciel est dit désinstallé (removed) lorsqu'il ne peut plus être activé. Le moteur: le moteur, selon l'invention, est un composant logiciel faisant partie du système et qui se charge de l'activation /désactivation des composants (via le manager), de la communication entre les composants (via le PROXY) et de la gestion des informations associées à chaque composant (via la database). 5.2 Les composants logiciels selon l'invention: 5.2.1 Caractéristiques générales des composants logiciels selon l'invention: Comme décrit précédemment, un composant logiciel selon l'invention est un bout logiciel, généré de manière à être complètement isolé, à l'exécution, du reste du système si ce n'est via les échanges de requêtes et de réponses de services vis-à-vis d'autres composants. Par exemple, dans le cas d'un composant codé en langage C, (composant BPlug), aucun échange, qu'il soit explicite (via un appel de fonction par exemple) ou implicite (via l'utilisation de variable globale, ...) n'est permis. Le composant est indépendant, c'est un bloc homogène incluant des données et des instructions processeurs, et ce, même à l'exécution. Le moyen d'accéder à un service d'un composant est appelé l'interface. L'interface peut en particulier être décrite via le langage IDL, dédié à cet usage. Selon le type des différents composants, cette interface est implémentée par un certain nombre de fonctions, de méthodes, ... . Par exemple, l'interface de services fournis par uh 35 composant B-Plug est implémentée sous la forme d'un ensemble de fonction C, qui peuvent être appelées (via le PROXY) par d'autres composants (pour peu qu'ils aient les droits d'accès associés). L'implémentation à proprement parler des services se trouve elle dans le corps du composant. Le corps du composant peut être amené à utiliser des services d'autres composants. Exemple: le service ALARME ' génère une action spécifique à un instant donné, préprogrammé. L'interface du composant Alarme permet au client de: - définir quelle action enclencher par l'alarme. - définir l'instant ou cette action doit être déclenchée. En addition de l'interface et du corps du composant, un certain nombre d'information sont rajoutées au composant, 15 lors de sa génération. Ces informations seront utilisées par la suite par le moteur, tournant sur le système. On a représenté sur la figure 5 la vue générale de la structure d'un composant selon l'invention Un composant peut par exemple inclure les informations 20 comme: - le type du composant (binaire (codé en C) , JAVA,...) - descriptif du service fourni - liste des services et ressources nécessaire pour 25 l'exécution du composant - privilège, droits d'accès - manière d'être accédé (dans le contexte de l'appelant, dans le contexte du composant...) 5.2.2 Flot de génération d'un composant selon 30 l'invention: Un composant logiciel est généré selon l'invention via un outil (type logiciel tournant sur un ordinateur personnel) qui prend en entré le logiciel standard de départ, plus un certain nombre d'informations fournies par le développeur. Tous les accès externes au code de départ (implicites ou explicites) sont redirigés vers un point d'accès unique. Le composant peut ainsi être compilé et l'édition des liens peut être réalisée (linkage) sans besoin des autres parties logicielles du système. Le résultat de ce process sera un composant logiciel autonome, n'accédant aux ressources externes que via un point d'accès unique. 5.2.3 Actions principales sur un composant: Le moteur logiciel, selon l'invention, est un composant spécifique, chargé de gérer la vie et les 10 communications des composants du système. On a représenté sur la figure 6 les états principaux des composants selon l'invention. Le diagramme représenté sur la figure 6 montre la gestion des composants dans un système selon l'invention. Les légendes de cette figure correspondent aux éléments suivants: 1: Téléchargement d'un composant dans le système 2: Installation d'un composant 3: Activation d'un composant 4: Base de donnée des composants disponibles dans le 20 système 5: Code historique' potentiellement résiduel dans le système 6: Conteneurs 7: Proxy 1: Téléchargement: un composant peut être téléchargé dans le système. Une étiquette peut être généré par le système à ce moment là pour indiquer un certain nombre de propriétés (en particulier de sécurité) liées au composant. Note importante: l'invention n'est aucunement 30 dépendante de la technologie utilisée pour télécharger un composant dans le système. 2: Le composant est ensuite installé : un certain nombre d'actions sont réalisées afin de permettre au composant d'être activé facilement par la suite. 3: Quand un des services fournis par un composant est demandé par une partie du système ou quand l'utilisateur souhaite activer un certain service, le composant associé est activé. Le composant est exécuté dans un conteneur, dont la forme dépend du type du composant. Le PROXY est quant à lui en charge de l'aiguillage des différents échanges de services entre les composants. Le PROXY peut aussi être connecté au code résiduel, non compilé sous forme de composant selon l'invention. 4: La database enregistre les états des différents composants (installable, installé, activé,...) ainsi qu'un certain nombre d'autres informations (descriptifs des services, des versions associées, des paramètres de sécurité, de la localisation du service...). Une fois installé, un composant est toujours enregistré auprès de la database de son unité de process. 5: Un composant peut aussi être désinstallé ou remplacé. Le remplacement peut se faire de manière statique (c'est-à-dire alors que le composant n'était pas actif) ou de manière dynamique (pendant l'activation). 5.2.4 Composants liés à un certain type de composant logiciel: A chaque type de composant, est associé un certain nombre de composants spécifiques. En particulier, chaque type de composant peut être 25 associé à : Un conteneur le conteneur est responsable de l'exécution d'un composant. Un même conteneur est partagé par tous les composants d'un même type. Un loader: un loader est un composant spécifique permettant de faire un transfert (copie) d'un composant d'une localisation à une autre (exemple: copie d'une mémoire à une autre) Un Provisionneur: le provisionner est en charge de vérifier un certain nombre de paramètre d'un composant afin de 35 pouvoir le télécharger dans le système. Un Verifieur: le verifieur verifie l'intégrité du composant, ces droits,.. . 5.3 Architecture du moteur selon l'invention: Le moteur selon l'invention est architecturé en 4 5 parties distinctes. Le Downloader: Il est en charge du téléchargement d'un composant logiciel dans le système. Il inter-agit avec: - les couches de transports du système quelle 10 qu'elles soient - le provisionneur qui accepte ou refuse le téléchargement - le ou les systèmes de stockage disponibles dans le système. The Manager: Le manager inclut: - L'installeur: en charge de l'installation et de la désinstallation des composants logiciels. - L'activateur: en charge d'activer ou de désactiver 20 des composants La database: en charge de rassembler les informations sur les composants installés et activés dans le système. Le Proxy: Le proxy est en charge de la communication entre les 25 différents composants. Son implémentation est décrite plus largement par la suite. On a représenté sur la figure 7 l'architecture du moteur selon l'invention. 5.4 Détail d'implémentation: 5.4.1 Activation d'un composant: Installation du composant en mémoire Une partie de la mémoire du système est réservée au moteur. Le manager du moteur est en charge d'installer les composants dans cette zone réservée. Les composants sont stockés les uns après les autres. Seul un composant, ayant des propriétés très spécifiques, et appelé le Patch, est toujours stocké à la même position. Les composants peuvent être aussi désinstallés. Le manager peut ainsi être amené à faire des opérations de 5 défragmentation de la zone de mémoire réservée. Connection au PROXY Lors de la génération du composant, tous les accès externes de ce composant ont été redirigés vers une adresse unique sans signification (par exemple OxFFFFFFF). A l'installation, le composant se voit attribué une adresse d'entrée dans le PROXY qui va être substituée à l'adresse sans signification. Ainsi, tout appel externe du composant est transformé en fait à un appel de l'adresse d'entrée au PROXY dédiée au composant. Activation et utilisation du PROXY A l'activation, le manager du moteur fournie une table d'aiguillage au PROXY indiquant on se trouve les composants et ou se trouvent leurs informations (en particulier les différents services fournies par chaque composant). Lorsqu'un service externe est demandé par un composant, le processeur est ainsi redirigé vers l'adresse d'entrée du PROXY lié au composant, alors que deux informations ont été rajoutées, grâce à la génération du composant, selon l'invention. le numéro du composant souhaité ainsi que le numéro du service voulu. Grâce à ces deux informations et aux informations fournies par le manager, le PROXY va rediriger (via une instruction du type JUMP et non CALL c'est-à-dire sans aucun nouvel appel de fonction ni aucune copie d'information liée au service demandé) le processeur vers l'endroit où se trouve le service désiré. Exemple: Supposons qu'un composant A souhaite appeler la fonction DrawLine d'un composant graphique 2D. Lors de la génération du composant, l'appel de la fonction DrawLine du code initial du composant est remplacé par l'appel, avec les mêmes paramètres que si on appelait DawLine, du PROXY. En plus, l'information du composant souhaité (composant graphique 2D) ainsi que le numéro du servicevoulu (service DrawLine) sont ajoutés. A l'exécution, l'appel de la fonction DrawLine sera en fait remplacé par un aiguillage d'abord vers le PROXY, qui, grâce au numéro du composant et du service pourra rediriger le processeur vers la fonction DrawLine. On a représenté sur la figure 8 l'aiguillage du PROXY Exemples d'application de la fonction PROXY: Grâce au PROXY, et ce de manière statique ou dynamique, il est ainsi possible de: - rediriger le flot de communication d'un composant à un autre - de remplacer un composant par un autre (débuggé, ou mis a jour, ou correspondant à une autre implémentation). - de traduire la demande de service d'un langage à un autre (dans l'exemple précédent, le PROXY pouvait traduire la demande de la fonctionnalité DrawLine dans un autre langage et envoyer cette demande, traduite, au composant adéquat) - de rediriger la demande vers un autre processeur (par exemple, la fonction DrawLine pourrait être implémentée sur un processeur graphique dédié. A ce moment-là, le PROXY est relié, via un transport quelconque à un autre PROXY résidant sur le processeur graphique, et le deux PROXY peuvent se passer de manière transparente les demandes et réponses de service). A noter que le transport layer peut ainsi être la voie radio dans le cas d'un téléphone mobile (à ce moment-là, un composant peut se trouver sur le réseau, au niveau de l'opérateur, alors que l'autre se trouve dans le téléphone mobile) ou encore un lien type Bluetooth ou Wifi permettant de gérer des Personal Area Network (par exemple, l'écran se trouve sur un autre appareil relié au téléphone via un lien radio type Bluetooth). - de contrôler les droits d'accès entre les différents composants d'ajouter de la visibilité en explicitant toutes les communications ayant lieu via le PROXY, pour des raisons d'aide au développement - de rediriger une partie des communications afin d'émuler les services associés sur un émulateur type PC ou tout autre application utilisant le fait que tout le flot de communication transitant entre un composant et le reste du système peut être manipulé très facilement au niveau du PROXY. REVENDICATIONS 1. Système permettant d'optimiser la gestion des fonctions logicielles intégrées dans un système embarqué, notamment dans un téléphone mobile; ledit système étant plus particulièrement destiné à faciliter l'intégration, la validation et la mise à jour desdites fonctions logicielles; ledit système comprenant: - un premier module logiciel, associé à un équipement informatique de type PC, permettant de générer des composants logiciels à partir d'un code informatique standard, notamment de type C,C++, JAVA, en intégrant des identifiants dans chacun desdits composants logiciels; lesdits identifiants se présentant sous la forme: É d'un identifiant dudit composant logiciel, notamment une adresse dudit composant logiciel, d'un identifiant d'une fonction logicielle déterminée parmi lesdites fonctions logicielles dudit système embarqué et destinée à être exécutée en faisant coopérer une pluralité de composants logiciels; de sorte que les composants logiciels comportent des 20 identifiants et des liens de communications autonomes et sont compilables indépendamment les uns des autres; lesdits composants logiciels étant destinés à être intégrés dans ledit système embarqué, notamment dans ledit téléphone mobile; ledit système embarqué comprenant: - un second module logiciel, notamment un bus logiciel ou proxy, - au moins un microprocesseur, destiné à : É activer lesdits composants logiciels, É transmettre des informations entre lesdits composants logiciels, via ledit second module logiciel; ledit second module logiciel comportant un point d'entrée spécifique à chacun desdits identifiants desdits composants logiciels; ledit second module logiciel permettant d'établir des communications appropriées entre ladite pluralité de composants logiciels en vue de la réalisation de ladite fonction logicielle déterminée parmi lesdites fonctions logicielles dudit système embarqué ; lesdites communications appropriées étant établies en mettant en oeuvre ledit second module logiciel pour router ledit microprocesseur vers ladite pluralité de composants logiciels en fonction desdits identifiants desdits composants logiciels; de sorte que les communications entre les composants 10 logiciels sont gérées et aiguillées à partir d'un point d'accès unique constitué par le second module logiciel; de sorte que les composants logiciels peuvent être téléchargés, corrigés, remplacés de manière dynamique, indépendante et à distance; de sorte que les droits d'accès entre les composants logiciels peuvent être contrôlés de manière centralisée.