Logiciels Libres et Systèmes Embarqués


5.3. Mise en place

Nous allons voir dans cette section la mise en place à effectuer avant de porter le noyau Linux pour Virtex. Il est très difficile d'expliquer ce travail sans les sources du noyau Linux. Je conseille donc vivement au lecteur de se munir des sources sous peine d'être rapidement perdu. Pour aider à la compréhension de ce chapitre, le graphe des appels des fonctions que nous allons étudier est disponible à la figure 5.1. De même, le tableau 5.3 indique dans quels fichiers se situent les fonctions qui seront utilisées.

Figure 5.1. Graphe des appels des fonctions étudiées

Graphe des appels des fonctions étudiées

Tableau 5.3. Références des fonctions étudiées

fonctionfichier
board_initarch/ppc/platforms/virtex.c
board_io_mappingarch/ppc/platforms/virtex.c
board_restartarch/ppc/platforms/virtex.c
board_setup_archarch/ppc/platforms/virtex.c
board_setup_irqarch/ppc/platforms/virtex.c
do_cpu_ftr_fixupsarch/ppc/kernel/misc.S
early_initarch/ppc/kernel/setup.c
find_end_of_memoryarch/ppc/kernel/ppc4xx_setup.c
flush_instruction_cachearch/ppc/kernel/misc.S
identify_cpuarch/ppc/kernel/misc.S
initial_mmuarch/ppc/kernel/head_4xx.S
init_IRQarch/ppc/kernel/ppc4xx_setup.c
machine_initarch/ppc/kernel/setup.c
mapin_ramarch/ppc/mm/pgtable.c
mmu_context_initarch/ppc/mm/mmu_context.c
MMU_initarch/ppc/mm/init.c
MMU_init_hwarch/ppc/mm/44x_mmu.c
MMU_setuparch/ppc/mm/init.c
parse_bootinfoarch/ppc/kernel/setup.c
parse_optionsinit/main.c
platform_initarch/ppc/kernel/ppc4xx_setup.c
ppc4xx_pic_initarch/ppc/kernel/virtex_pic.c
setup_archarch/ppc/kernel/ppc4xx_setup.c
setup_io_mappingsarch/ppc/kernel/ppc4xx_setup.c
_startarch/ppc/kernel/head_4xx.S
start_herearch/ppc/kernel/head_4xx.S
start_kernelinit/main.c
traps.carch/ppc/kernel/traps.c

5.3.1. Obtenir les sources du noyau

Dans un premier temps, il faut récupérer les sources officielles de la branche de développement PPC, qui est maintenant intégrée à la branche de développement 2.6. Pour cela, nous avons besoin de BitKeeper, disponible sur BitMover.com. Une fois BitKeeper installé[17], il suffit de lancer les commandes suivantes :

bash# bk clone -rv2.4.23_linuxppc_2_4 bk://ppc.bkbits.net/linuxppc_2_4
bash# cd linuxppc_2_4
bash# bk -r edit

J'ai choisi cette version car les versions suivantes contiennent du code issu du portage réalisé par MontaVista. Etant donné que ce travail a été retiré de la version officielle du noyau Linux, puis réintégré partiellement, il est préférable de partir de sources vierges pour être capable d'effectuer le portage sur toutes les versions de Linux.

Il faut savoir que BitKeeper ne fournit plus de version gratuite de son logiciel depuis le 1er Juillet 2005, il faut donc utiliser une alternative libre, comme BK-Client ou SourcePuller. Dans le cas particulier où on souhaite obtenir la dernière version du noyau pour PowerPC, on peut aussi utiliser rsync :

bash# rsync source.mvista.com::
bash# rsync -avz --delete source.mvista.com::linuxppc-2.4 linuxppc-2.4

5.3.2. Support de la plateforme Virtex

La macro CONFIG_VIRTEX sera définie lorsque l'on choisira de compiler le noyau Linux pour la plateforme Virtex. Ainsi, il suffit de tester cette macro pour compiler ou non les parties du noyau spécifique à cette plateforme. En plus des modifications faites directement dans le noyau, il faut fournir un certains nombre de fonctions, de variables, et de constantes que l'on réunira dans les fichiers arch/ppc/platforms/virtex.c et virtex.h. Afin de compiler ce premier fichier source, il faut rajouter la cible suivante dans le fichier arch/ppc/platforms/Makefile :

  obj-$(CONFIG_WALNUT)   += walnut.o
+ obj-$(CONFIG_VIRTEX)   += virtex.o

De même, pour que le fichier d'en-tête soit pris en compte, le fichier include/asm-ppc/ibm4xx.h doit être modifié de la manière suivante :

  #if defined(CONFIG_WALNUT)
  #include <platforms/walnut.h>
  #endif
+ #if defined(CONFIG_VIRTEX)
+ #include <platforms/virtex.h>
+ #endif

Pour que la macro CONFIG_VIRTEX soit définie lorsque l'on choisit de compiler le noyau Linux pour la plateforme Virtex, on doit rajouter l'entrée suivante dans le fichier arch/ppc/config.in :

  if [ "$CONFIG_40x" = "y" ]; then
      choice 'Machine Type'               \
           "Oak           CONFIG_OAK      \
+          Virtex         CONFIG_VIRTEX   \

Il faut aussi définir quel type de processeur est utilisé par notre plateforme. Pour cela, il suffit de rajouter, dans le même fichier, le test suivant :

   if [ "$CONFIG_WALNUT" = "y" ]; then
     define_bool CONFIG_405GP y
   fi
+  if [ "$CONFIG_INSIGHT_VIRTEX" = "y" ]; then
+    define_bool CONFIG_405 y
+  fi

Afin de configurer le message d'aide qui sera affiché lorsqu'on cliquera sur <Help>, il suffit de rajouter dans le fichier Documentation/Configure.help une section de la forme :

Titre présentant brièvement l'option choisie
CONFIG_EXEMPLE
  Ceci est un exemple pour montrer comment créer un message d'aide
  qui sera affiché lorsque l'on cliquera sur < Help >.



[17] il est préférable de faire cette manipulation sous Linux.