-
Notifications
You must be signed in to change notification settings - Fork 2
/
README.INSTALL
352 lines (280 loc) · 13 KB
/
README.INSTALL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
# Copyright (C) 2005-2017 The RTAI project
# This [file] is free software; the RTAI project
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
Installing RTAI-3.x
===================
0. RTAI 3.6
================================
RTAI uses only the leanest and fastest RTAI+Linux combination now, i.e. it
dispatches real time interrupts immediately. Moreover within such a scheme
i386 has the possibility of completely avoiding the dispatching of critical
internal timers and interprocessor scheduling interrupts by vectoring them
directly to their handlers. Such an option strongly enhances performances
on low end machines and comes by default. You can disable it while configuring
RTAI though. See the related configuration helper.
What above requires you to patch Linux just with patches found wihin this
distribution.
Notice also that this release is for use with:
- i386,
- x86_64,
- PPC.
On recent distributions, managing udev/sysfs, devices created by following
this installation procedure will disappear at each machine halting. Then they
will be available nomore at the next reboot. RTAI should manage udev/sysfs
support but in case something weird will impede it you can solve your problem
quickly by restoring RTAI devices before running your application. For that
the following short script containing:
------------------------------ cut here -------------------------------------
if test \! -c /dev/rtai_shm; then
mknod -m 666 /dev/rtai_shm c 10 254
fi
for n in `seq 0 9`; do
f=/dev/rtf$n
if test \! -c $f; then
mknod -m 666 $f c 150 $n
fi
done
------------------------------ cut here -------------------------------------
should suffice.
1. How to build
===============
1.1 Standard procedure
----------------------
The RTAI build system is a merge of Linux's Kconfig with
autoconf/automake/libtool. Therefore, you can either build RTAI:
1.1.1 Interactive configuration
-------------------------------
1) Into the source tree like with 24.1.x (your_source_dir ==
your_build_dir). Just run either:
$ make xconfig # (Qt-based)
$ make gconfig # (GTK-based)
$ make menuconfig (dialog-based as in 24.1.x)
Save your configuration, wait for the shell prompt to come back after
the configuration script has fully finished, then run "make".
2) Outside the source tree. From your fresh build directory,
either run:
$ make -f $source_tree/makefile srctree=$source_tree xconfig
$ make -f $source_tree/makefile srctree=$source_tree gconfig
$ make -f $source_tree/makefile srctree=$source_tree menuconfig
If you are using a version of make >= 3.80, then you can even get rid
of the "srctree=$source_tree" setting. The makefile will infere its
value properly.
1.1.2 Non-interactive configuration
-----------------------------------
Since RTAI 3.x has autoconf inside, people needing automatic
non-interactive configuration can directly use the provided GNU
configure script for this purpose. The available configuration
switches can be listed by running ./configure --help. The
RTAI-specific switches are:
--enable-trace Enable trace support
--enable-math Enable math support
--enable-bits Enable bits IPC support
--enable-fifos Enable fifo IPC support
--enable-netrpc Enable netrpc support
--enable-netrpc-rtnet Enable use of RTNet
--enable-sem Enable semaphore support
--enable-msg Enable messaging support
--enable-mbx Enable mailbox support
--enable-tbx Enable typed mailbox support
--enable-mq Enable POSIX-like message queue support
--enable-shm Enable shared memory support
--enable-malloc Enable real-time malloc support
--enable-tasklets Enable tasklets support
--enable-usi Enable user-space interrupt support
--enable-watchdog Enable watchdog support
--enable-leds Enable leds-based debugging support
--enable-sched-lxrt Enable scheduler support without RTAI own ktasks
--enable-ktasks-sched-lxrt Enable scheduler support with RTAI own ktasks
--enable-sched-lock-isr Enable scheduler lock in ISRs
--enable-sched-8254-latency= Set 8254 tuning latency
--enable-sched-apic-latency= Set APIC tuning latency
--enable-sched-lxrt-numslots= Set number of LXRT slots
--enable-cplusplus Build in-kernel C++ support
--enable-comedi-lxrt Enable comedi/LXRT support
--enable-serial Build real-time serial driver
--enable-testsuite Build RTAI testsuite
--enable-rtailab Build RTAI-Lab
--enable-fpu Enable FPU support
--enable-math-c99 Enable math C99 support
--enable-malloc-vmalloc Enable vmalloc support in malloc
--enable-malloc-heap-size Set size of real-time malloc heap
--enable-cpus Enable CPUs
--enable-dox-doc Build Doxygen documentation
--enable-dbx Build Docbook XML documentation.
--enable-dbx-network Try to access Docbook DTD and XSL stylesheets through
network.
--enable-latex-doc Build LaTeX documentation
--enable-verbose-latex Uses LaTeX non-stop mode
--enable-compat Enable compatibility mode
--enable-module-debug Enable debug information in kernel modules
--enable-user-debug Enable debug information in user-space programs
Some configuration targets in base/ can either produce a module,
or be statically linked to the RTAI schedulers. Either pass "m" for
the modular build to their respective --enable-xxx switch, or "y" for
selecting the built-in mode.
1.1.3 Recycling a configuration file
------------------------------------
You can also recycle an existing .rtai_config file from a previous
build by running:
$ cp -rp $old_builddir/.rtai_config \
$new_builddir/.rtai_config
$ cd $new_builddir
$ make -f $source_tree/makefile srctree=$source_tree oldconfig
1.1.4 Selecting alternate compilers
-----------------------------------
Compiler selection must be done at _configuration_ time. One only
needs to pass the right values for the standard environment variables
CC and CXX, respectively for compiling C and C++ source files. In any
case, using a GCC toolchain is mandatory. When unspecified, these
variables's values respectively default to "gcc" and "g++".
WARNING: this selection is not aimed at toggling the cross-compilation
mode on. In order to do so, please refer to 1.2.
Examples:
# Start configuring using the Qt-based GUI with alternate compilers
$ make xconfig CC=/my/favourite/c/compiler CXX=/my/favourite/c++/compiler
# Reconfiguring a previous build tree, changing the compilers on-the-fly.
$ make reconfig CC=/my/favourite/c/compiler CXX=/my/favourite/c++/compiler
# Rebuild all [and optionally install]
$ make [all [install]]
CAVEAT: Since the autoconf-based engine needs to analyze the
compilers's features and crams the CC and CXX values into the
Makefiles it produces, passing CC and CXX variables at build time
simply does _not_ work for the purpose of selecting alternate compiler
toolchains. Again, you need to let the configuration engine know about
these new settings as explained above.
1.2 Cross-compilation support
-----------------------------
Simply add ARCH and CROSS_COMPILE variables as usual to the standard
command lines, e.g.
$ make -f $source_tree/makefile ARCH=arm CROSS_COMPILE=arm-linux-
Names of available architectures can be found under base/arch/*.
1.3 Installing the software
---------------------------
When the standard (or cross-) compilation has finished:
$ cd $builddir
$ make install
Everything needed to use the RTAI distribution will be copied there
out of the build tree. From now on, you should be able to refer to the
installation directory as the root of a complete standalone binary
RTAI distribution.
One may also choose to install the RTAI programs under a temporary
staging tree by passing the standard DESTDIR variable to "make" while
installing. e.g.
$ make install DESTDIR=/mnt/target
will create a standard RTAI hierarchy under /mnt/target, keeping the
original prefix information unmodified. If the installation directory
selected at configuration time was "/usr/realtime", then the command
above will put the RTAI binary distribution under
/mnt/target/usr/realtime.
WARNING: running "make install" is required to run several standard
RTAI programs correctly. RTAI 3.x enforces the actual split between
the source distribution tree, the build tree where RTAI is going to be
compiled, and the final installation directory where RTAI programs can
be run eventually. In any case, you should only rely on the
installation directory contents to run RTAI programs.
NOTE: Do not pay attention to the "*** Warning" messages appearing on
module compilation output. They are harmless and will be fixed later.
1.4 Compiling parts of the tree
-------------------------------
RTAI developers may want to recompile parts of the tree from times to
times. This automake-based build system allows it: just go to the
proper directory level, then issue "make", as usual. This process will
recurse as needed.
The "makefile" (small caps) found in the root source directory is used
to bootstrap the build system when it is about to be configured for
the first time. After the first configuration has been successful, one
just need to run "make xconfig|gconfig|menuconfig|..." as usual.
1.5 Changing the configuration
------------------------------
Each time you want to change your configuration, just run "make
xconfig|gconfig|menuconfig" in your build dir, then "make" (or "make
all").
If you only want to rerun the "configure" script using the current
RTAI configuration, just run "make reconfig", there is no need to
restart any GUI for that.
When invoked for the first time in an empty build directory, the
default "make" goal is "menuconfig" in a regular terminal, or
"xconfig" in an emacs-term.
1.6 Modifying the autotool template files
-----------------------------------------
If you have to change some template files used by any of the autotools
(i.e. Makefile.am, configure.in, acinclude.m4), then you will need the
following pack to rebuild the derived files:
o autoconf 2.59
o automake 1.9.2
o aclocal 1.9.2
o libtool 1.5.8
1.7 Using the integrated calibration tool
-----------------------------------------
RTAI 3.x comes with a brand new calibration tool which should help you
determining if your hardware platform is up to the hard real-time
duties. You can find this tool under $installdir/calibration. Here is
the output of this tool's help message for x86-based platforms:
$ ./calibration --help
OPTIONS:
-h, --help
print usage
-r, --r8254
calibrate 8254 oneshot programming type
-k, --kernel
oneshot latency calibrated for scheduling kernel space tasks
-u, --user
oneshot latency calibrated for scheduling user space tasks
-p <period (us)>, --period <period (us)>
the period of the underlying hard real time task/intr, default 100 (us)
-t <duration (s)>, --time <duration (s)>
set the duration of the requested calibration, default 5 (s)
-c, --cpufreq
calibrate cpu frequency
-a, --apic
calibrate apic frequency
-b, --both
calibrate both apic and cpu frequency
-i, --interrupt
check worst case interrupt locking/contention on your PC
-s<y/n>, --scope<y/n>
toggle parport bit to monitor scheduling on a scope, default y(es)
2. Bootstrapping with vulcano in 7 steps
========================================
>1. patch and build a vanilla Linux kernel tree with the RTAI support as
usual. Patches for x86 are available from
vulcano/base/arch/i386/patches/. Apply only one of them
that matches the Linux kernel version, like this:
$ cd $linux-src-dir
$ patch -p1 < base/arch/$arch/patches/patchfile
>2. $ mkdir $builddir && cd $builddir
>3. $ make -f ../vulcano/makefile srctree=../vulcano
>4. a GUI should pop up, allowing you to configure RTAI:
o default settings should be ok for most platforms
o in the "General" section, set your site values for the RTAI
installation directory (defaults to /usr/realtime) and
Linux kernel tree (defaults to /usr/src/linux).
o save and exit.
--
At this point, you should see the typical output of a GNU configure
script. Your RTAI settings are being used to setup the
autoconf/automake-based build system.
--
>5. $ make install
RTAI will be compiled then installed under the directory you specified
at configuration time (ensure that your shell can write to the
destination directory).
Remember to add $installdir/bin to your shell PATH variable, where
$installdir is your site value for the RTAI installation directory.
--
>6. $ cd $installdir/testsuite/kern/latency
>7. $ ./run
If "sudo" is installed on your box, the application loader script
(rtai-load) will attempt to use it for running privileged commands
(e.g. insmod, rmmod et al.) If sudo is not available, just "su"
manually before running the run script. You should then see the
typical output of the latency calibration program running in kernel
space. Hit ^C to stop it.
--
<rpm@xenomai.org>
12/5/2004