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.
Tableau 5.3. Références des fonctions étudiées
fonction | fichier |
---|---|
board_init | arch/ppc/platforms/virtex.c |
board_io_mapping | arch/ppc/platforms/virtex.c |
board_restart | arch/ppc/platforms/virtex.c |
board_setup_arch | arch/ppc/platforms/virtex.c |
board_setup_irq | arch/ppc/platforms/virtex.c |
do_cpu_ftr_fixups | arch/ppc/kernel/misc.S |
early_init | arch/ppc/kernel/setup.c |
find_end_of_memory | arch/ppc/kernel/ppc4xx_setup.c |
flush_instruction_cache | arch/ppc/kernel/misc.S |
identify_cpu | arch/ppc/kernel/misc.S |
initial_mmu | arch/ppc/kernel/head_4xx.S |
init_IRQ | arch/ppc/kernel/ppc4xx_setup.c |
machine_init | arch/ppc/kernel/setup.c |
mapin_ram | arch/ppc/mm/pgtable.c |
mmu_context_init | arch/ppc/mm/mmu_context.c |
MMU_init | arch/ppc/mm/init.c |
MMU_init_hw | arch/ppc/mm/44x_mmu.c |
MMU_setup | arch/ppc/mm/init.c |
parse_bootinfo | arch/ppc/kernel/setup.c |
parse_options | init/main.c |
platform_init | arch/ppc/kernel/ppc4xx_setup.c |
ppc4xx_pic_init | arch/ppc/kernel/virtex_pic.c |
setup_arch | arch/ppc/kernel/ppc4xx_setup.c |
setup_io_mappings | arch/ppc/kernel/ppc4xx_setup.c |
_start | arch/ppc/kernel/head_4xx.S |
start_here | arch/ppc/kernel/head_4xx.S |
start_kernel | init/main.c |
traps.c | arch/ppc/kernel/traps.c |
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
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 >.