Archive for the ‘Dev’ Category.

CMMI pour le développement v1.3

Marre de chercher de la documentation sur CMMI-DEV 1.3 et de tomber sur des informations obsolètes (issues de la version 1.2), traduites nonchalamment ou sur des propositions de formation ?

La traduction française du livre blanc officiel du SEI contient tout ce qu’il faut pour comprendre CMMI-DEV, même en n’ayant aucune notion en méthodologie d’amélioration des processus, et les annexes sont bien fournies.

Erreurs dans les exemples de cdk_display

La bibliothèque CDK est une surcouche à la célèbre bibliothèque graphique NCurses.

Elle facilite le développement rapide d’interfaces fonctionnelles grâce à de nombreux widgets prédéfinis (menus, liste déroulantes, dialogues, calendrier, etc)

La page de manuel man cdk_display(3) comporte quelques erreurs, rendant difficile leur compréhension voir leur compilation.

Voici un patch permettant de corriger les exemples (couleurs, compilation, …) de cette documentation. Ce patch a été remonté upstream ainsi que sur le BTS de Debian et de FreeBSD

edit 11/02/2011: patch appliqué sur la dernière version du paquet Debian :)

erreur compilation linux-2.6.32 patch openvz nmi_ipi_callback

Voici l'erreur obtenue suite à la compilation d'un noyau 2.6.32 avec le patch OpenVZ :

arch/x86/kernel/traps.c:393: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘nmi_ipi_callback’
arch/x86/kernel/traps.c: In function ‘do_nmi’:
arch/x86/kernel/traps.c:450: error: implicit declaration of function ‘nmi_ipi_callback’
arch/x86/kernel/traps.c: At top level:
arch/x86/kernel/traps.c:457: error: expected ‘)’ before ‘callback’
arch/x86/kernel/traps.c: In function ‘unset_nmi_ipi_callback’:
arch/x86/kernel/traps.c:464: error: ‘nmi_ipi_callback’ undeclared (first use in this function)
arch/x86/kernel/traps.c:464: error: (Each undeclared identifier is reported only once
arch/x86/kernel/traps.c:464: error: for each function it appears in.)
make[3]: *** [arch/x86/kernel/traps.o] Erreur 1
make[2]: *** [arch/x86/kernel] Erreur 2
make[1]: *** [arch/x86] Erreur 2

Une solution rapide consiste à activer le support SMP dans la configuration noyau CONFIG_SMP=y (Processor type and features – Symmetric multi-processing support)

Kdb : cannot set breakpoint

En testant le débogueur Kdb pour le noyau Linux, chaque tentative de poser un breakpoint sur une fonction se soldait par le message d’erreur suivant :

kdb> bp sys_open
Invalid address for breakpoint, ignoring bp command
diag: -21: Invalid address
kdb>

Pourtant id sys_open permet bien de désassembler cette fonction, ce qui prouve que le symbole sys_open est résolu/connu de Kdb.

A l’aide d’une piste sur KernelNewbies, j’ai trouvé que le problème venait de l’option CONFIG_DEBUG_RODATA, qui protège en écriture certaines structures du noyau, empêchant de poser un breakpoint.

L’aide de cette option est explicite :

Mark the kernel read-only data as write-protected in the pagetables,
in order to catch accidental (and incorrect) writes to such const data.
This is recommended so that we can catch kernel bugs sooner. If in doubt, say "Y".

Mais le lien de cause à effet l’est moins :)

Autoconf: déterminer l’endianness

Lors de développements assez proches de la machine, il peut être capital de savoir si la machine sur laquelle on se trouve est little-endian ou big-endian, ou en français  petit-boutiste et gros-boutiste (oui, c’est assez laid)

Autoconf fourni la réponse à cette question avec la macro AC_C_BIGENDIAN

Le manuel d’autoconf renseigne parfaitement sur son utilisation :

Macro: AC_C_BIGENDIAN ([action-if-true], [action-if-false], [action-if-unknown])

If words are stored with the most significant byte first (like Motorola and
SPARC CPUs), execute action-if-true. If words are stored with the least
significant byte first (like Intel and VAX CPUs), execute action-if-false.

This macro runs a test-case if endianness cannot be determined from the
system header files. When cross-compiling, the test-case is not run but grep’ed
for some magic values. action-if-unknown is executed if the latter case fails to
determine the byte sex of the host system.

The default for action-if-true is to define `WORDS_BIGENDIAN’. The default
for action-if-false is to do nothing. And finally, the default for
action-if-unknown is to abort configure and tell the installer which variable he
should preset to bypass this test.

Et voici un exemple d’utilisation réel, vérifiant que la machine est little endian :

AC_C_BIGENDIAN(
[AC_MSG_ERROR([big endian, sorry but pppoesk will not work])],
[AC_MSG_RESULT([little endian, fine])],
[AC_MSG_ERROR([unknown endianess ?])]
)

Oui c’est tout, c’est aussi simple que ça.