bfin: remove inline keyword
[xenomai-head.git] / README.INSTALL
blob30b51c1f2a40bf6408d0a3854be0b37615eea611
1 Installing Xenomai 2.6.5
3 -------------------------------------------------------------------------------
5 Table of Contents
7  
8 1. Introduction
9 2. Installation steps
11     2.1. Preparing the target kernel
12     2.2. Configuring and building the target kernel
13     2.3. Building the user-space support
15         2.3.1. Feature conflict resolution
16         2.3.2. Generic configure options
17         2.3.3. Arch-specific configure options
18         2.3.4. Cross-compilation
20 3. Typical installation procedures
22     3.1. Building for x86_32/64bit
23     3.2. Building for the PowerPC architecture
24     3.3. Building for the Blackfin
25     3.4. Building for ARM
26     3.5. Building for NIOS II
28         3.5.1. Minimum hardware requirements
29         3.5.2. Xenomai compilation for NIOS II
31 4. Testing the installation
33     4.1. Testing the kernel
34     4.2. Testing the user-space support
36 -------------------------------------------------------------------------------
38 The latest version of this document is available at this address: 
39 "http://www.xenomai.org/documentation/xenomai-2.6/html/README.INSTALL/".
41 For questions, corrections and improvements, write to the mailing list: 
42 "xenomai@xenomai.org".
45 1. Introduction
46 ---------------
48 Starting with version 2.1, Xenomai follows a split source model, decoupling the
49 kernel space support from the user-space libraries used in accessing the
50 former.
52 To this end, kernel and user-space Xenomai components are respectively
53 available under the ksrc/ and src/ sub-trees.
55 The ksrc/ sub-tree providing the kernel space support is seen as a built-in
56 extension of the Linux kernel, and no more as a collection of separate
57 out-of-tree modules. A direct benefit of such approach is the ability to build
58 the Xenomai real-time subsystem statically into the target kernel, or as
59 loadable modules as with earlier versions. therefore, the usual Linux kernel
60 configuration process will be normally used to define the various settings for
61 the Xenomai kernel components. Sections "Preparing the target kernel" and
62 "Configuring and building the kernel" document the installation process of this
63 kernel space support.
65 The src/ sub-tree contains the various user-space libraries and commands
66 provided by the Xenomai framework. This tree can be built separately from the
67 kernel support, even if the latter is absent from the build system. Section
68 "Building the user-space support" documents the installation process of this
69 user-space support.
71 If you are using a Debian based distribution, it is also possible to install,
72 and even build Xenomai as a set of Debian packages. For further details, see
73 this page: "http://www.xenomai.org/index.php/Building_Debian_packages".
76 2. Installation steps
77 ---------------------
80 2.1. Preparing the target kernel
81 --------------------------------
83 Xenomai provides a real-time sub-system seamlessly integrated to Linux,
84 therefore the first step is to build it as part of the target kernel. To this
85 end, scripts/prepare-kernel.sh is a shell script which sets up the target
86 kernel properly. The syntax is as follows:
88 $ scripts/prepare-kernel.sh --linux=<linux-srctree>
89 [--adeos=<adeos-patch>] [--arch=<target-arch>]
91 --linux
92     specifies the path of the target kernel source tree. Such kernel tree being
93     configured or not makes no difference and is valid either way.
94 --adeos
95     specifies the path of the Adeos patch to apply against the kernel tree.
96     Suitable patches are available with Xenomai under ksrc/arch/<target-arch>/
97     patches. This parameter can be omitted if Adeos has already been patched in
98     or the script shall suggest an appropriate one. In any case, the script
99     will not try to apply it again whenever a former patch is detected.
100 --arch
101     tells the script about the target architecture. If unspecified, the build
102     system architecture is detected and suggested as a reasonable default.
104 For instance, the following command would prepare the Linux tree located at /
105 usr/src/linux-2.6.23-ipipe in order to include the Xenomai support:
107 $ cd xenomai-2.4
108 $ scripts/prepare-kernel.sh --linux=/usr/src/linux-2.6.23-ipipe
110 Note: The script will infer the location of the Xenomai kernel code from its
111 own location within the Xenomai source tree. In other words, if /usr/src/
112 xenomai-2.4/script/prepare-kernel.sh is executing, then Xenomai’s kernel
113 support available from /usr/src/xenomai-2.4/ksrc will be bound to the target
114 kernel.
117 2.2. Configuring and building the target kernel
118 -----------------------------------------------
120 Once the target kernel has been prepared, the kernel should be configured
121 following its usual configuration procedure. All Xenomai configuration options
122 are available from the "Real-time subsystem" toplevel menu.
124 There are several important kernel configuration options, some are documented
125 in the TROUBLESHOOTING guide, others in the "Typical installation procedures"
126 for the architecture you are using.
128 Once configured, the kernel should be built as usual.
130 If you want several different configs/builds at hand, you can reuse the same
131 source by adding O=../build-<target> to each make invocation. See section
132 "Building for the PowerPC architecture" for an example
134 In order to cross-compile the Linux kernel, pass an ARCH and CROSS_COMPILE
135 variable on make command line. See sections "Building for the PowerPC
136 architecture", "Building for the Blackfin", "Building for ARM" and "Building
137 for NIOS II" for examples.
140 2.3. Building the user-space support
141 ------------------------------------
143 A regular autoconf script is provided in order to prepare for building the
144 user-space support. The options listed below can be passed to this script.
145 Those options only affect the libraries compiled as part of Xenomai’s
146 user-space support, but in any case, they never impact the kernel-based
147 support.
150 2.3.1. Feature conflict resolution
151 ----------------------------------
153 Because of the strong decoupling between the kernel and user-space build
154 procedures, Xenomai needs to make sure that all user-space options selected at
155 configuration time will be consistent with the actual support the runtime
156 libraries will get from the target kernel. For instance, enabling TSC support
157 in user-space for x86 albeit the kernel has been compiled with CONFIG_X86_TSC
158 disabled would certainly lead to runtime problems if uncaught, since Xenomai
159 and the application would not agree on the high precision clock to use for
160 their timings. Furthermore, most of these issues cannot be probed for during
161 compilation, because the target generally has different features than the host,
162 even when they are the same arch (ex 386 vs 686).
164 In order to solve those potential issues, each Xenomai architecture port
165 defines a set of critical features which is tested for consistency, each time a
166 user-space application binds itself to a real-time interface in kernel space.
167 Unresolvable conflicts are reported and the execution stops immediately in such
168 a case.
170 Options that need perfect matching between both sides are marked as "strong" in
171 the following lists, others that may differ are marked as "weak". The way
172 Xenomai deals with tolerated discrepancies is decided on a case-by-case basis,
173 depending on the option considered. When not applicable, the binding type
174 remains unspecified.
176 For instance, UP and SMP-enabled kernels can run either UP or SMP-enabled
177 user-space applications indifferently, since the SMP option’s binding is weak.
178 On the other hand, x86-based applications linked against Xenomai libraries
179 which have been compiled with the x86-tsc option on, must run on a kernel built
180 with CONFIG_X86_TSC set, since the x86-tsc option’s binding is strong.
183 2.3.2. Generic configure options
184 --------------------------------
186       NAME                         DESCRIPTION                    [BINDING,]
187                                                                  DEFAULT ^[a]
189 --prefix           Installation directory                       /usr/xenomai
191 --enable-debug     Enable debug symbols (-g)                    disabled
193 --enable-smp       Enable SMP support ^[a]                      weak, enabled
195 --with-atomic-ops  Selects which implementation of atomic       arch-dependent
196 =                  access operations shall be used within
197                    Xenomai libraries:
199                    --with-atomic-ops=builtins selects the GCC
200                    builtins, i.e. _sync*() services.
202                    --with-atomic-ops=ad-hoc selects the ad hoc
203                    Xenomai implementation.
205                    When this switch is not specified, a
206                    conservative choice is made depending on
207                    the target architecture.
209                    Unless the GCC toolchain is outdated (i.e.
210                    does not provide these operations) or
211                    broken, --with-atomic-ops=builtins should
212                    be used.
214 ^[a] The SMP switch is used to tell the build system whether CPU
215 synchronization instructions should be emitted in atomic constructs appearing
216 in some Xenomai libraries, enabling them for SMP execution. This feature is
217 turned on by default on all SMP-enabled architecture Xenomai supports, i.e.
218 x86_32/64, powerpc_32/64 and ARM. One may override this default setting by
219 passing --disable-smp explicitely for those architectures. SMP-enabled userland
220 code may run over SMP or UP kernels. However, Xenomai will deny running UP-only
221 userland code (i.e. when --disable-smp is in effect) over an SMP kernel.
224 2.3.3. Arch-specific configure options
225 --------------------------------------
227        NAME                          DESCRIPTION                    [BINDING,]
228                                                                    DEFAULT ^[a]
230 --enable-x86-sep     Enable x86 SEP instructions for issuing       strong,
231                      syscalls. You will also need NPTL.            enabled
233 --enable-x86-tsc     Enable x86 TSC for timings You must have TSC  strong,
234                      for this.                                     enabled
236 --enable-arm-tsc     Enable ARM TSC emulation. ^[b]                weak, kuser
238 --enable-arm-quirks  Enable quirks for specific ARM SOCs           weak,
239                      Currently sa1100 and xscale3 are supported.   disabled
241 ^[a] Each option enabled by default can be forcibly disabled by passing
242 --disable-<option> to the configure script.
244 ^[b] In the unusual situation where Xenomai kernel support for the target SOC
245 does not support the kuser generic emulation, pass this option to use another
246 tsc emulation. See --help for a list of valid values.
249 2.3.4. Cross-compilation
250 ------------------------
252 In order to cross-compile Xenomai user-space support, you will need to pass a
253 --host and --build option to the configure script. The --host option allow to
254 select the architecture for which the libraries and programs are built. The
255 --build option allows to choose the architecture on which the compilation tools
256 are run, i.e. the system running the configure script.
258 Since cross-compiling requires specific tools, such tools are generally
259 prefixed with the host architecture name; for example, a compiler for the power
260 PC architecture may be named powerpc-405-linux-gnu-gcc.
262 When passing the option --host=powerpc-405-linux-gnu to configure, configure
263 will automatically use powerpc-405-linux-gnu- as a prefix to all compilation
264 tools names and infer the host architecture name from this prefix. If configure
265 is unable to infer the architecture name from the cross-compilation tools
266 prefix, you will have to manually pass the name of all compilation tools using
267 at least the CC and LD, variables on configure command line. See sections
268 "Building for the PowerPC architecture" and "Building for the Blackfin" for an
269 example using the CC and LD variable, or "Building for ARM" for an example
270 using the --host argument.
272 The easiest way to build a GNU cross-compiler might involve using crosstool-ng,
273 available here: "http://crosstool-ng.org/".
275 If you want to avoid to build your own cross compiler, you might if find easier
276 to use the ELDK. It includes the GNU cross development tools, such as the
277 compilers, binutils, gdb, etc., and a number of pre-built target tools and
278 libraries necessary to provide some functionality on the target system. See
279 here: "http://www.denx.de/wiki/DULG/ELDK" for further details.
281 Some other pre-built toolchains:
283   * Mentor Sourcery CodeBench Lite Edition, available here: 
284 "http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/";
285   * Linaro toolchain (for the ARM architecture), available here: 
286 "https://launchpad.net/linaro-toolchain-binaries".
289 3. Typical installation procedures
290 ----------------------------------
292 The examples in following sections use the following conventions:
294 $linux_tree
295     path to the target kernel sources
296 $xenomai_root
297     path to the Xenomai sources
298 $build_root
299     path to a clean build directory
300 $staging_dir
301     path to a directory that will hold the installed file temporarily before
302     they are moved to their final location; when used in a cross-compilation
303     setup, it is usually a NFS mount point from the target’s root directory to
304     the local build host, as a consequence of which running make DESTDIR=
305     $staging_dir install on the host immediately updates the target system with
306     the installed programs and libraries.
309 3.1. Building for x86_32/64bit
310 ------------------------------
312 Since Linux 2.6.24, x86_32 and x86_64 trees are merged. Therefore, building
313 Xenomai for 2.6.24 or later is almost the same, regardless of the 32/64bit
314 issue. You should note, however, that it is not possible to run xenomai
315 libraries compiled for x86_32 with a kernel compiled for x86_64.
317 Assuming that you want to build natively for a x86_64 system (x86_32
318 cross-build options from x86_64 appear between brackets), you would typically
319 run:
321 $ $xenomai_root/scripts/prepare-kernel.sh --arch=x86 \
322   --adeos=$xenomai_root/ksrc/arch/x86/patches/adeos-ipipe-2.6.29.4-x86-X.Y-ZZ.patch \
323   --linux=$linux_tree
324 $ cd $linux_tree
325 $ make [ARCH=i386] xconfig/gconfig/menuconfig
327 …configure the kernel (see also the recommended settings here: 
328 "http://www.xenomai.org/index.php/Configuring_x86_kernels").
330 Enable Xenomai options, then install as needed with:
332 $ make [ARCH=i386] bzImage modules
333 $ mkdir $build_root && cd $build_root
334 $ $xenomai_root/configure --enable-x86-sep \
335   [--host=i686-linux CFLAGS="-m32 -O2" LDFLAGS="-m32"]
336 $ make install
338 Now, let’s say that you really want to build Xenomai for a Pentium-based x86
339 32bit platform running a legacy 2.6.23 kernel, using the native host toolchain;
340 the typical steps would be as follows:
342 $ $xenomai_root/scripts/prepare-kernel.sh --arch=i386 \
343   --adeos=$xenomai_root/ksrc/arch/x86/patches/adeos-ipipe-2.6.23-i386-X.Y-ZZ.patch \
344   --linux=$linux_tree
345 $ cd $linux_tree
346 $ make xconfig/gconfig/menuconfig
348 …configure the kernel (see also the recommended settings here: 
349 "http://www.xenomai.org/index.php/Configuring_x86_kernels").
351 Enable Xenomai options, then install as needed with:
353 $ make bzImage modules
354 $ mkdir $build_root && cd $build_root
355 $ $xenomai_root/configure --enable-x86-sep
356 $ make install
358 Similarly, for a legacy kernel on a 64bit platform, you would use:
360 $ $xenomai_root/scripts/prepare-kernel.sh --arch=x86_64 \
361   --adeos=$xenomai_root/ksrc/arch/x86/patches/adeos-ipipe-2.6.23-x86_64-X.Y-ZZ.patch \
362   --linux=$linux_tree
363 $ cd $linux_tree
364 $ make xconfig/gconfig/menuconfig
366 …configure the kernel (see also the recommended settings here: 
367 "http://www.xenomai.org/index.php/Configuring_x86_kernels").
369 Enable Xenomai options, then install as needed with:
371 $ make bzImage modules
372 $ mkdir $build_root && cd $build_root
373 $ $xenomai_root/configure
374 $ make install
376 Once the compilation has completed, /usr/xenomai should contain the user-space
377 librairies and header files you would use to build applications that call
378 Xenomai’s real-time support in kernel space.
380 The remaining examples illustrate how to cross-compile Xenomai for various
381 architectures. Of course, you will have to install the proper cross-compilation
382 toolchain for the target system first, in order to build Xenomai.
385 3.2. Building for the PowerPC architecture
386 ------------------------------------------
388 PowerPC has a legacy arch/ppc branch, and a newer, current arch/powerpc tree.
389 Xenomai supports both, but using arch/powerpc is definitely recommended. To
390 help the preparation script to pick the right one, you have to specify either
391 --arch=powerpc (current) or --arch=ppc (legacy). Afterwards, the rest should be
392 a no-brainer:
394 A typical cross-compilation setup, in order to build Xenomai for a lite5200
395 board running a recent 2.6.29.4 kernel. We use DENX’s ELDK cross-compiler:
397 $ $xenomai_root/scripts/prepare-kernel.sh --arch=powerpc \
398   --adeos=$xenomai_root/ksrc/arch/powerpc/patches/adeos-ipipe-2.6.29.4-powerpc-2.6-00.patch \
399   --linux=$linux_tree
400 $ cd $linux_tree
401 $ make ARCH=powerpc CROSS_COMPILE=ppc_6xx- xconfig/gconfig/menuconfig
403 …select the kernel and Xenomai options, save the configuration
405 $ make ARCH=powerpc CROSS_COMPILE=ppc_6xx- uImage modules
407 …manually install the u-boot image and modules to the proper location
409 $ cd $build_root
410 $ $xenomai_root/configure --host=powerpc-unknown-linux-gnu \
411   CC=ppc_6xx-gcc AR=ppc_6xx-ar LD=ppc_6xx-ld
412 $ make DESTDIR=$staging_dir install
414 Another cross-compilation setup, in order to build Xenomai for a powerpc64
415 PA-Semi board running a recent 2.6.29.4 kernel:
417 $ $xenomai_root/scripts/prepare-kernel.sh --arch=powerpc \
418   --adeos=$xenomai_root/ksrc/arch/powerpc/patches/adeos-ipipe-2.6.29.4-powerpc-2.6-00.patch \
419   --linux=$linux_tree
420 $ cd $linux_tree
421 $ make ARCH=powerpc CROSS_COMPILE=powerpc64-linux- xconfig/gconfig/menuconfig
423 …select the kernel and Xenomai options, save the configuration
425 $ make ARCH=powerpc CROSS_COMPILE=powerpc64-linux-
427 …manually install the vmlinux image and modules to the proper location
429 $ cd $build_root
430 $ $xenomai_root/configure --host=powerpc64-linux \
431   CC=powerpc64-linux-gcc AR=powerpc64-linux-ar LD=powerpc64-linux-ld
432 $ make DESTDIR=$staging_dir install
434 Yet another cross-compilation setup, this time for building Xenomai for a
435 PowerPC-405-based system running a legacy arch/ppc 2.6.14 kernel (we do support
436 recent ones as well on this platform):
438 $ $xenomai_root/scripts/prepare-kernel.sh --arch=ppc \
439   --adeos=$xenomai_root/ksrc/arch/powerpc/patches/adeos-ipipe-2.6.14-ppc-1.5-*.patch \
440   --linux=$linux_tree
441 $ mkdir -p $build_root/linux
442 $ cd $linux_tree
443 $ make ARCH=ppc CROSS_COMPILE=ppc_4xx- O=$build_root/linux xconfig/gconfig/menuconfig
445 …select the kernel and Xenomai options, save the configuration
447 $ make ARCH=ppc CROSS_COMPILE=ppc_4xx- O=$build_root/linux bzImage modules
449 …manually install the kernel image, system map and modules to the proper
450 location
452 $ make $build_root/xenomai && cd $build_root/xenomai
453 $ $xenomai_root/configure --build=i686-pc-linux-gnu --host=ppc-unknown-linux-gnu \
454   CC=ppc_4xx-gcc LD=ppc_4xx-ld
455 $ make DESTDIR=$staging_dir install
458 3.3. Building for the Blackfin
459 ------------------------------
461 The Blackfin is an MMU-less, DSP-type architecture running uClinux.
463 $ $xenomai_root/scripts/prepare-kernel.sh --arch=blackfin \
464   --adeos=$xenomai_root/ksrc/arch/blackfin/patches/adeos-ipipe-bf53x-*.patch \
465   --linux=$linux_tree
466 $ cd $linux_tree
467 $ make ARCH=blackfin CROSS_COMPILE=bfin-uclinux- xconfig/gconfig/menuconfig
469 …select the kernel and Xenomai options, then compile with:
471 $ make linux image
473 …then install as needed
475 $ cp images/linux /tftpboot/...
477 …build the user-space support
479 $ mkdir $build_root && cd $build_root
480 $ $xenomai_root/configure --host=blackfin-unknown-linux-gnu \
481   CC=bfin-linux-uclibc-gcc AR=bfin-linux-uclibc-ar LD=bfin-linux-uclibc-ld
482 $ make DESTDIR=$staging_dir install
484 You may also want to have a look at the hands-on description about configuring
485 and building a Xenomai system for the Blackfin architecture, available at this
486 address: "http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:adeos".
488 [Note] Note
489        Xenomai uses the FDPIC shared library format on this architecture. In
490        case of problem running the testsuite, try restarting the last two build
491        steps, passing the --disable-shared option to the "configure" script.
494 3.4. Building for ARM
495 ---------------------
497 Using codesourcery toolchain named arm-none-linux-gnueabi-gcc and compiling for
498 a CSB637 board (AT91RM9200 based), a typical compilation will look like:
500 $ $xenomai_root/scripts/prepare-kernel.sh --arch=arm \
501   --adeos=$xenomai_root/ksrc/arch/arm/patches/adeos-ipipe-2.6.20-arm-* \
502   --linux=$linux_tree
503 $ cd $linux_tree
504 $ mkdir -p $build_root/linux
505 $ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- O=$build_root/linux \
506   csb637_defconfig
507 $ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- O=$build_root/linux \
508   bzImage modules
510 …manually install the kernel image, system map and modules to the proper
511 location
513 $ mkdir $build_root/xenomai && cd $build_root/xenomai
514 $ $xenomai_root/configure CFLAGS="-march=armv4t" LDFLAGS="-march=armv4t" \
515   --build=i686-pc-linux-gnu --host=arm-none-linux-gnueabi
516 $ make DESTDIR=$staging_dir install
518 [Important] Important
519             Contrarily to previous releases, Xenomai no longer passes any arm
520             architecture specific flags, or FPU flags to gcc, so, users are
521             expected to pass them using the CFLAGS and LDFLAGS variables as
522             demonstrated above, where the AT91RM9200 is based on the ARM920T
523             core, implementing the armv4 architecture. The following table
524             summarizes the CFLAGS and options which were automatically passed
525             in previous revisions and which now need to be explicitely passed
526             to configure, for the supported SOCs:
528 Table 3.1. ARM configure options and compilation flags
530     SOC                    CFLAGS                      configure options
532 at91rm9200    -march=armv4t -msoft-float
534 at91sam9x     -march=armv5 -msoft-float
536 imx1          -march=armv4t -msoft-float
538 imx21         -march=armv5 -msoft-float
540 imx31         -march=armv6 -mfpu=vfp
542 imx51/imx53   -march=armv7-a -mfpu=vfp3 ^[a]
544 imx6q         -march=armv7-a -mfpu=vfp3 ^[a]
546 ixp4xx        -march=armv5 -msoft-float
548 omap3         -march=armv7-a -mfpu=vfp3 ^[a]
550 omap4         -march=armv7-a -mfpu=vfp3 ^[a]
552 orion         -march=armv5 -mfpu=vfp
554 pxa           -march=armv5 -msoft-float
556 pxa3xx        -march=armv5 -msoft-float          --enable-arm-quirks=xscale3
558 s3c24xx       -march=armv4t -msoft-float
560 sa1100        -march=armv4t -msoft-float         --enable-arm-quirks=sa1100
562 ^[a] Depending on the gcc versions the flag for armv7 may be -march=armv7-a or
563 -march=armv7a
566 It is possible to build for an older architecture version (v6 instead of v7, or
567 v4 instead of v5), if your toolchain does not support the target architecture,
568 the only restriction being that if SMP is enabled, the architecture should not
569 be less than v6.
572 3.5. Building for NIOS II
573 -------------------------
575 NIOS II is a softcore processor developped by Altera and is dedicated to the
576 Altera’s FPGA circuits.
578 NIOS II with no MMU enabled is supported by the uClinux distribution.
581 3.5.1. Minimum hardware requirements
582 ------------------------------------
584 You have to start with a minimal system with at least:
586   * A Nios II processor in f or s core version, with hardware multiplier,
587     (f-core suggested, s-core is slower) and with no MMU enabled.
588   * SDRAM (minimum requirement 8MB).
589   * One full featured timer named sys_clk_timer used for uClinux.
590   * A jtag/serial uart or a real serial uart (preferred).
592 Note in Linux, IRQ 0 means auto-detected, so you must not use IRQ 0 for ANY
593 devices.
595 The Xenomai port for NIOS II uses extra hardware that you have to add in SOPC
596 builder:
598   * A full featured 32-bit Timer named hrtimer with a 1 microsecond period.
599   * A full featured High Resolution 64-bit Timer named hrclock used for time
600     stamping (1 microsecond period for example).
602 [Important] Important
603             Please respect hrtimer and hrclock names, the Xenomai port depends
604             on them!
606 You have to use Altera’s Quartus II version 9.0 at least for synthesis.
608 A good start for your design is to use reference design shipped with your
609 target board.
611 For example, with an Altera’s board, you may use the standard design. Standard
612 reference designs for Altera’s boards are available here: 
613 "http://www.altera.com/support/examples/nios2/exm-nios2.html".
616 3.5.2. Xenomai compilation for NIOS II
617 --------------------------------------
619 You should first verify that uClinux without Xenomai can run on the target
620 board.
622 The typical actions for building the uClinux kernel for NIOS II (available
623 here: "http://www.nioswiki.com/") are:
625 If $uClinux-dist is the path of NIOS II uClinux release, for example:
627 /home/test/nios2-linux/uClinux-dist
629 $ cd $uClinux-dist
630 $ make menuconfig
631 $ make vendor_hwselect SYSPTF=<path to your system ptf>
632 $ make
634 If the NIOS II cross-compiler is called nios2-linux-gcc, a typical compilation
635 will look like:
637 $ $xenomai_root/scripts/prepare-kernel.sh --arch=nios2 \
638   --adeos=$xenomai_root/ksrc/arch/nios2/patches/adeos-ipipe-2.6.26-rc6-nios2-* \
639   --linux=$linux_tree
640 $ $xenomai_root/configure --host=nios2-linux
641 $ make install DESTDIR=$uClinux-dist/romf
642 $ cd $uClinux-dist
643 $ make
646 4. Testing the installation
647 ---------------------------
650 4.1. Testing the kernel
651 -----------------------
653 In order to test the Xenomai installation, you should first try to boot the
654 patched kernel. The kernel boot logs should show messages like:
656 I-pipe: head domain Xenomai registered.
657 Xenomai: hal/<arch> started.
658 Xenomai: scheduling class idle registered.
659 Xenomai: scheduling class rt registered.
660 Xenomai: real-time nucleus v2.6.1 (Light Years Away) loaded.
661 Xenomai: debug mode enabled.
662 Xenomai: starting native API services.
663 Xenomai: starting POSIX services.
664 Xenomai: starting RTDM services.
666 Where <arch> is the architecture you are using. If the kernel fails to boot, or
667 the log messages indicates an error status instead, see the TROUBLESHOOTING
668 guide.
671 4.2. Testing the user-space support
672 -----------------------------------
674 In order to test Xenomai user-space support, launch the latency test:
676 $ xeno latency
678 The latency test should display a message every second with minimal, maximal
679 and average latency values, such as:
681 # xeno latency -T 25
682 == Sampling period: 100 us
683 == Test mode: periodic user-mode task
684 == All results in microseconds
685 warming up...
686 RTT|  00:00:01  (periodic user-mode task, 100 us period, priority 99)
687 RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
688 RTD|      1.615|      1.923|      9.846|       0|     0|      1.615|      9.846
689 RTD|      1.615|      1.923|      9.692|       0|     0|      1.615|      9.846
690 RTD|      1.538|      1.923|     10.230|       0|     0|      1.538|     10.230
691 RTD|      1.615|      1.923|     10.384|       0|     0|      1.538|     10.384
692 RTD|      1.615|      1.923|     11.230|       0|     0|      1.538|     11.230
693 RTD|      1.615|      1.923|      9.923|       0|     0|      1.538|     11.230
694 RTD|      1.615|      1.923|      9.923|       0|     0|      1.538|     11.230
695 RTD|      1.615|      1.923|     11.076|       0|     0|      1.538|     11.230
696 RTD|      1.615|      1.923|     10.538|       0|     0|      1.538|     11.230
697 RTD|      1.615|      1.923|     11.076|       0|     0|      1.538|     11.230
698 RTD|      1.615|      1.923|     10.615|       0|     0|      1.538|     11.230
699 RTD|      1.615|      1.923|     10.076|       0|     0|      1.538|     11.230
700 RTD|      1.615|      1.923|      9.923|       0|     0|      1.538|     11.230
701 RTD|      1.538|      1.923|     10.538|       0|     0|      1.538|     11.230
702 RTD|      1.615|      1.923|     10.923|       0|     0|      1.538|     11.230
703 RTD|      1.538|      1.923|     10.153|       0|     0|      1.538|     11.230
704 RTD|      1.615|      1.923|      9.615|       0|     0|      1.538|     11.230
705 RTD|      1.615|      1.923|     10.769|       0|     0|      1.538|     11.230
706 RTD|      1.615|      1.923|      9.153|       0|     0|      1.538|     11.230
707 RTD|      1.538|      1.923|     10.307|       0|     0|      1.538|     11.230
708 RTD|      1.615|      1.923|      9.538|       0|     0|      1.538|     11.230
709 RTT|  00:00:22  (periodic user-mode task, 100 us period, priority 99)
710 RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
711 RTD|      1.615|      1.923|     11.384|       0|     0|      1.538|     11.384
712 RTD|      1.615|      1.923|     10.076|       0|     0|      1.538|     11.384
713 RTD|      1.538|      1.923|      9.538|       0|     0|      1.538|     11.384
714 ---|-----------|-----------|-----------|--------|------|-------------------------
715 RTS|      1.538|      1.923|     11.384|       0|     0|    00:00:25/00:00:25
718 If the latency test displays an error message, hangs, or displays unexpected
719 values, see the TROUBLESHOOTING guide.
721 If the latency test succeeds, you should try next to run a latency test under
722 load to evaluate the latency test of your system, the xeno-test script allows
723 doing that. see xeno-test(1) manual page for more details.