COMPILATION pas à pas
Il faut compter une paire d'heures ...
Moins de 99 étapes, promis !

[installation de base]

1-Installation TCL en mode frugal

Dans une partition dédiée formatée linux (EXT2 OR EXT3 OR EXT4)
  /home et /opt persistants ... ça peut aider
 INSTALLER un TCL basé sur un noyau de même VERSION que la cible

2-installer "On Boot" toutes les extensions telles que :

	(kmaps.tcz pour clavier non QWERTY)	
	compiletc.tcz 
	perl5.tcz 
	ncurses-dev.tcz 
	bash.tcz
	bc.tcz
	advcomp.tcz
	web browser (opera par ex) 
Mon répertoire /tce, par exemple, est monté en /mnt/sda3,
  Je le désigne par "sda#" dans le reste de ce texte.
  Adaptez en conséquence pour votre partition

3-Créer les répertoires

Le script "0_cmp" crée les répertoires nécessaires.
Lancez le, ou passez ces commandes manuellement :
(en "root "et dans le répertoire racine de la partition dédiée)
	-mkdir /mnt/sda#/SRC/KERNEL
	-mkdir /mnt/sda#/SRC/RTAI
	-mkdir /mnt/sda#/SRC/TINY
	-mkdir /mnt/sda#/SRC/SCRIPTS
	-mksir /mnt/sda#/RT

[téléchargement]

4-Télécharger le noyau 3.16.6 (par exemple)

https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.6.tar.xz
https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.6.tar.sign

  placez le en /mnt/sda#/SRC/KERNEL
(vous pouvez vérifier le téléchargement avec la signature PGP  ... peut être.)

5-extraire le noyau vanilla

Dans un terminal, en "root" :

  cd /mnt/sda#/SRC/KERNEL
  tar -xvf linux-3.16.6.tar.xz

L'arborescence résultante est en /mnt/sda#/SRC/KERNEL/linux-3.16.6

6-Télécharger l'archive RTAI  "rtai-4.1.tar.bz2"

https://www.rtai.org/?Homepage&id=34
    la placer en /mnt/sda#/SRC/RTAI

7-extraire les sources RTAI

Dans un terminal, en "root" :

    cd /mnt/sda#/SRC/RTAI
    tar -xvf rtai-4.1.tar.bz2

Les fichiers RTAI résultants   sont en /mnt/sda#/SRC/RTAI/rtai-4.1
Le patch dont nous avons besoin est en  /mnt/sda#/SRC/RTAI/rtai-4.1/base/arch/x86/patches

8-Télécharger tous les patches Tiny Core

http://distro.ibiblio.org/tinycorelinux/6.x/x86/release/src/kernel/316-patches/advdef.patch
http://distro.ibiblio.org/tinycorelinux/6.x/x86/release/src/kernel/316-patches/efficeon-agp.patch
http://distro.ibiblio.org/tinycorelinux/6.x/x86/release/src/kernel/316-patches/logo.patch
http://distro.ibiblio.org/tinycorelinux/6.x/x86/release/src/kernel/316-patches/sd-warning.patch
http://distro.ibiblio.org/tinycorelinux/6.x/x86/release/src/kernel/316-patches/squashfs-warning.patch
http://distro.ibiblio.org/tinycorelinux/6.x/x86/release/src/kernel/316-patches/ubuntu-isapnp.patch

8.1 -Télécharger le fichier .config deTinyCore
http://distro.ibiblio.org/tinycorelinux/6.x/x86/release/src/kernel/config-3.16.6-tinycore
http://distro.ibiblio.org/tinycorelinux/6.x/x86/release/src/kernel/Module.symvers-3.16.6-tinycore.gz
	Placez le en /mnt/sda#/SRC/TINY. Il vous permet de vérifier que toutes vos sources sont correctes :
avec ce fichier de config vous pouvez construire un "Tiny Core Linux" standard.
(Tout cela est également disponile à : http://ftp.nluug.nl/os/Linux/distr/tinycorelinux/6.x/x86/release/src/kernel/)

[Application des Patches]

9-patchez le noyau avec "hal-linux-3.16-x86-3.patch"

    cd /mnt/sda#/SRC/KERNEL/linux-3.16.6
    patch -p1 < /mnt/sda#/SRC/RTAI/rtai-4.1/base/arch/x86/patches/hal-linux-3.16-x86-3.patch

  Vous aurez des alertes "hunk #"
  Supprimez simplement tous les fichiers ".orig" correspondants ou changez leur extension.
  "diff" a sans doute été fait avec des source obsolètes qui sait ? ...

9.1-patchez le noyau avec chaque patch Tiny  dans le "/SRC/TINY"
  voir : http://wiki.tinycorelinux.net/wiki:custom_kernel

  Vous aurez, là aussi,  des alertes "hunk #"
  vous pouvez décider de supprimer ou renommer les fichiers ".orig" .

ex :
       cd /mnt/sda#/SRC/KERNEL/linux-3.16.6
       patch -p1 < /mnt/sda#/SRC/TINY/advdef.patch
résultat :
      patching file scripts/Makefile.lib
      Hunk #1 succeeded at 238 (offset -1 lines)
puis
       patch -p1 < /mnt/sda#/SRC/TINY/efficeon-agp.patch
       patch -p1 < /mnt/sda#/SRC/TINY/logo.patch
       patch -p1 < /mnt/sda#/SRC/TINY/sd-warning.patch
       patch -p1 < /mnt/sda#/SRC/TINY/squashfs-warning.patch
       patch -p1 < /mnt/sda#/SRC/TINY/ubuntu-isapnp.patch

10-Un peu de ménage (en "root")

      cd linux
      make mrproper

[Compilation du noyau vanilla patché]

11-modifiez le fichier .config  

 Il y a deux "types" de fichier .config selonvotre type de processeur : SMPconfig ou MONOconfig
 copiez celui qui correspond dans l'arborescence des sources linux et renommez le ".config"
 Puis

     make menuconfig

  effectuez (prudemment) tous les changements que vous souhaitez dans la configuration.

Saines lectures :
    Avoid latency killers
    tuto. how to install RTAI

Options retenues :
	-Loadable module support  / Enable loadable module support  / (on) 
	-Loadable module support  / Module versioning support  / (off)
	-Processor type and features  / HPET Timer Support (off)
	-Processor type and features  /  Preemptible Kernel (Low-Latency Desktop)
		Voluntary Kernel Preemption (Desktop) works too
	-Processor type and features  /  Interrupt pipeline  / (on)  
	-Processor type and features  / High Memory Support  /  (off)
	-Processor type and features  / Math emulation / (on)
	-Power management options (ACPI, APM)  / Legacy Power Management API  / (off)
	-Power management options (ACPI, APM)  / Software Suspend  / (off)
	-Suspend to RAM and standby (off)
	-Hibernation (aka 'suspend to disk') (off)
	-Run-time PM core functionality  (on)
	-Cpuidle Driver for Intel Processors (off)
	-CPU Frequency scaling  /  CPU Frequency scaling  /   (off)
	-ACPI (Advanced Configuration and Power Interface) Support  / ACPI Support / (off)
  MAIS : en tous cas, choisissez le  type de processeur corespondant à l'installation sur laquelle vous développez !

12-make bzImage

A partir d'ici, le script "2_cmp" (interactif) ou "22_cmp" (plus "auto") peut faire le travail pour vous.
Vous pouvez également avancez manuellement :

       cd /mnt/sda#/SRC/KERNEL/linux-3.16.6
       make bzImage

  Validez les choix par défaut
  Si tout va bien, le résultat est en /mnt/sda#/SRC/KERNEL/linux-3.16.6/arch/x86/boot/bzImage

12.1 Test :
Vous pouvez tester ce nouveau Tiny core en mode  "console".
Il faut copier "bzImage" à un endroit que votre chargeur saura accéder.
   ex :
Créez le répertoire  "/tst/boot" sur la partition du disque dur où est votre " /tce" ;
Placez-y "bzImage" et une copie de core.gz ; modifiez le menu du chargeur pour qu'il puisse utiliser ce nouveau noyau.

  Exemple : entrée de menu.lst pour grub4dos :
	title New Tiny Core test
	root (hd0,2)
	kernel /tst/boot/bzImage
	initrd /tst/boot/core.gz

13-make modules

Dans l'arborescence de developpement  :
      make modules
... et patience ... prenez un café ?

[installation des modules]

14-copiez "core.gz" en /mnt/sda#/RT/core_gz/

      /mnt/sda#/tce/boot/core.gz /mnt/sda#/RT/core_gz/core.gz

15-Décompressez core.gz :en "Root")

si le répertoire "/mnt/sda#/RT/core_gz/xtract" n'existe pas créez le:
      mkdir /mnt/sda#/RT/core_gz/
et copiez-y le "core.gz" standard
puis ...
      mkdir /mnt/sda#/RT/core_gz/xtract

      cd /mnt/sda#/RT/core_gz/xtract
      zcat ../core.gz | sudo cpio -i -H newc -d

16-installez les modules

    make INSTALL_MOD_PATH=/mnt/sda#/RT modules_install firmware_install

  les modules sont en /mnt/sda#/RT/lib/modules/3.8.13-tinycore/kernel
  les firmware en /mnt/sda#/RT/lib/firmware
  Tiny Core n'emploie que quelques uns de ceux-ci... que nous copierons dans core.gz décompressé

Lister les modules recemments créés : cd /mnt/sda#/RT/lib/modules/3.16.6-tinycore/kernel find -name *.ko > /mnt/sda#/SRC/modules3.16.6 ... les comparer avec ceux danx core.gz : cd /mnt/sda#/RT/core_gz/xtract/lib/modules/3.8.13-tinycore/kernel find -name *.ko.gz > /mnt/sda#/SRC/modules.tiny

17-appelez un script pou copierles mêmes modules que dans la distro Tiny

Des scripts sont disponibles pour limiter le nombre de modules. Nous ne travaillerons qu'avec les plus utiles : mdl_tiny3.8.13.sh ou mdl_tiny3.16.6.sh (selon votre version de noyau)/mnt/sda#/SRC/SCRIPTS

18-compacter les modules

        cd /mnt/sda#/RT/core_gz/xtract/lib
        find . -name "*.ko" -exec gzip -9 '{}' \;

!! Si modules.dep a été modifiié, changez tous les ".ko" en ".ko.gz" dans "modules.dep", avec un éditeur !!

19-Recontruisez "core.gz" en "core2.gz"

        cd ..
        find |  cpio -o -H newc | gzip -9 > ../core2.gz
        cd ..
        advdef -z4 core2.gz

20-copiez "bzImage" et "core2.gz" dans votre répertoire de test final

J'emploie /mnt/sda#/tce, l'entrée dans  menu.lst de grub est :
        title Tiny Core patched RTAI
        root (hd0,2)
        kernel /tce/boot/bzImage
        initrd /tce/boot/core2.gz

Ici "2_cmp" ne vous aidera plus, ("22_cmp" non plus)

[Compilez la suite RTAI ]

21-Rebootez sur cette image pour compiler RTAI

adaptez votre multiboot pour lancer "bzImage" avec "core2.gz" comme init.rd.

Exemple : mon entrée dans menu.lst pour grub4dos :
	title Tiny Core "RTAI" tests
	root (hd0,2)
	kernel /tce/boot/bzImage
	initrd /tce/boot/core2.gz

23-Placez vous dans l'embranchement des sources RTAI (console en "root")

  Pour rtai-4.1 :
        cd /mnt/sda#/SRC/RTAI/rtai-4.1
 
   n.b.J'ai du plusieurs fois  travailler sur un "RTAI" fraîchement décompressé
      plutot que de reconfigurer une arborescence déjà employée.

    Vous pouvez preserver le ".rtai_config" d'origine (s'il existe) pour, éventuellement, restaurer ...
     Exemple :
        mv .rtai_config sav.rtai_config

24-Copier "SMP.rtai_config" dans la racine de la branche RTAI et renommez le .rtai_config

... ou MONO.rtai_config si votre processeur n'est pas SMP.

25-make menuconfig

Adaptez selon vos besoins ... Principalement, avec l'arborescence utilisée :
        General / Installation directory : /mnt/sda#/RT
        General / Linux source tree : /mnt/sda#/SRC/KERNEL/linux-3.8.13

26-make


27-make install

Si tout va bien, les modules RTAI  sont en /mnt/sda#/RT/modules

28-tester à l'aide de testsuite

Le script "tstSuite.sh" vous aidera (voir en  /mnt/sda#/SRC/SCRIPTS)
Sinon, N'oubliez pas de  modifier le path :
       export PATH=/mnt/sda#/RT/bin:$PATH

Exemple de test , en "manuel" :
       cd /mnt/sda#/RT/testsuite/kern/latency
       export PATH=/mnt/sda#/RT/bin:$PATH
       ./run

Les résultats peuvent montrer de nombreux "overruns": les interruptions de SMI (System Management Interrupt) en sont la source, elles introduisent  des perturbations critiques por les systèmes temps réel. Désactivez toute source SMIs avec EXTREME PRECAUTION !
Assurez vous que votre carte mère ne surchauffe pas et qu'aucun reboot intempestif ne survient.

Vous pouvez les désactiver avec
       /mnt/sda#/RT/bin/setsmi
.. et redémarrer le test.

A la fin, restaurez les avec /mnt/sda#/RT/bin/rstsmi.
"tstSuite.sh" devrait faire ça