File: INSTALL

package info (click to toggle)
i2c 2.6.3-5
  • links: PTS
  • area: main
  • in suites: woody
  • size: 592 kB
  • ctags: 1,051
  • sloc: ansic: 6,419; perl: 637; makefile: 186
file content (224 lines) | stat: -rw-r--r-- 10,212 bytes parent folder | download
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
These are the installation instructions for the i2c package.

There are three ways in which you can compile and install this package. Each
has its own strong points. They are:

 1. Complete separate from kernel compilation
    This will generate a set of modules which can be inserted and removed
    as needed; nothing will be written into the kernel tree;

 2. Semi-integrated into the kernel 
    This will add some files to your kernel tree, but has the advantage
    that module symbols are supported; the end result is functionally very 
    like the previous way;

 3. Patching of the kernel
    This will patch your kernel source tree. You must recompile your kernel
    to take advantage of this. But it makes it possible to compile drivers
    into the kernel itself, instead of having to add them as modules.

Each of these ways will be described below in detail.
We recommend using either method 1 or 3;
method 2 is less well maintained.

NOTE: SUPPORT FOR 2.0 AND 2.1 KERNELS HAS BEEN DROPPED!
NOTE: METHOD 3 ONLY WORKS FOR 2.2 KERNELS AND 2.4 KERNELS (2.4.0 OR LATER)


Having a proper kernel tree (compilation options 1 and 2)
=========================================================

Usually, if you compile a user-space application, you can get away with
having a different version of the kernel running than the version of the
kernel header files against which you compiled it. But a perfect match
is needed for the first two compilation options above.

Let's say you want to use the i2c modules with the kernel 2.1.12 you
are running now. What you need, is the original tree in which you
compiled that 2.1.12 kernel. A freshly unpacked 2.1.12 kernel will not
cut it, because `make *config dep' creates some files that are needed.
And even then, you will run into trouble, because you may not have
selected the exact same configuration variables. Plain advise: if you
do not have your original kernel tree anymore, recompile your kernel
first.

Your I2C support must NOT be built-in your kernel already!
It must either be disabled or enabled as modules.
Look in Character Devices -> I2C Support in the kernel
configuration system to verify.

Note that there is no need for a perfect match at compilation time, just
at run-time. This means you can cross-compile against a different kernel
version, and the Makefile does not check for this.

Usually problems if the match is imperfect, is that either this package
won't compile at all (because it was a freshly unpacked tree without
some files generated by `make *config dep'), or that you can't insert
modules because of either a `kernel-module version mismatch' or because
of `unresolved kernel symbols'. If you get either of these messages,
check your kernel tree!

Note that some distributions are notably bad at this. To offset this
somewhat, not the files in /usr/include/{linux,asm} are used, but instead
those in /usr/src/linux/include/{linux,asm}. It is also possible to
tell the Makefile the kernel is somewhere else than at /usr/src/linux.

To keep problems to a minimum, please use a 'vanilla' kernel tree,
as distributed on ftp://ftp.kernel/org/pub/linux/kernel, and not one
patched by your distribution.


Separate from kernel compilation (compilation option 1)
=======================================================

This will compile and install the complete i2c package. Though nothing is
written to your kernel tree, a proper tree is still needed for this. See
earlier for what a proper kernel tree is.

At the top of the Makefile are a couple of configuration variables that
you may want to change. As far as possible, the Makefile tries to figure
out by itself their settings, but it is possible to overrule them. A list
is found below. Most important are the variables that determine where
your kernel is located (LINUX=/usr/src/linux) and where you want to
install your modules (MODDIR=/lib/modules/KERNELVERSION/misc) and
header files (LINUX_INCLUDE_DIR=/usr/local/include/linux). You can see
that the installation locations are choosen in such a way that they
are separate from the true kernel.

Compilation is done by `make all'; `make install' installs the package.
You will get a lot of warnings about files which are not found, all 
ending on `.d'. You can safely ignore this; they contain dependency
information, which is regenerated on the spot.

Please continue reading this file before you start compiling.


Semi-integrated into the kernel compilation (compilation option 2)
==================================================================

Please reconsider first whether you truly want to use this compilation
option. Often, it is better to use the previous compilation technique.

This will compile and install the complete i2c package, by using the
kernel build system. Some file will be written to your kernel tree
for this.

At the top of the Makefile are a couple of configuration variables that
you may want to change. Not all of those variables are used if you 
use this compilation option, though. A list of them is found below.

Compilation is done by `make all'; `make install' installs the package.

Please continue reading this file before you start compiling.


Makefile configuration variables (compilation options 1 and 2)
==============================================================

BUILD_SYSTEM (both) default: lm_sensors
  The build system which is used. lm_sensors corresponds with compilation
  option 1; i2c with compilatin option 2.
SHELL (both) (default: /bin/sh)
  You may have to specify the full path to Bash here, if /bin/sh is some
  other shell. There have been conflicting reports on whether this is 
  needed.
LINUX (both) default: /usr/src/linux
  The location of your kernel tree.
COMPILE_KERNEL (both) default: 1
  Determine whether you want to consider the kernel modules for compilation
  at all. By default, compilation option 1 will only compile and install
  those modules which are not built into the kernel; compilation option 2
  will compile and install all of them.  
  If some modules are built into your kernel, and this package is much 
  newer, you may find you can not insert the newly compiled modules. 
  Sorry.
  You may want to set this to 0 if you have just patched and compiled
  your kernel using the same version of this package, and just want to
  compile the user-space tools.
SMP (compilation option 1 only)
  This must be set to 1 for a SMP kernel. The magic invocation should
  determine this automatically, so you should not have to bother with 
  this.
MODVER (compilation option 1 only)
  This must be set to 1 if CONFIG_MODVERSIONS is defined. The magic
  invocation should determine this automatically, so you should not
  have to bother with this.
MODDIR (both) default: /lib/modules/KERNELVERSION/misc)
  The location where the kernel modules will be installed. 
LINUX_INCLUDE_DIR (compilation option 1 only) default: /usr/local/include/linux
  The location where the i2c header files will be installed
WARN (compilation option 1 only) default: 0
  Generate additional compilation warnings; mainly interesting for
  developers.


Handling the modules (compilation option 2)
===========================================

Run `depmod -a' to have new modules them recognised. Most
distributions run this command when you boot, so if you were cross-
compiling, you can skip this step.


Patching the kernel (compilation option 3)
==========================================

There is a special script which should be able to generate diffs against
any 2.2 and 2.4 kernel (2.4.0 and later). Note that 2.3 kernels are no 
longer supported.
Please report any problems to our mailinglist. Note that it may fail, 
and probably silently, if you have applied other patches to your kernel 
tree, or for very new kernels.  It *is* safe to run it if your kernel 
already has the i2c drivers, or if it was patched with the lm_sensors drivers.

The kernel diffs are generated by the program `mkpatch.pl' in the mkpatch
subdirectory. It needs two arguments: the first one is the root of the
i2c package, the second one is the root of the kernel tree against
which the diffs will be generated. For example:
  cd /tmp/i2c-2.0.3
  mkpatch/mkpatch.pl . /usr/src/linux > /tmp/i2c-patch
You can apply the diffs as usual:
  cd /usr/src/linux
  patch -p1 -E < /tmp/i2c-patch
Genearation and application can easily be done in one step:
  mkpatch/mkpatch.pl . /usr/src/linux | patch -p1 -E -d /usr/src/linux
The generated diffs are of course only valid for the kernel version 
against which mkpatch.pl was run.

Once you have applied the patches, you can configure and compile your
kernel as usual. You will see the I2C configuration screen under the
`Character Devices' menu in menuconfig.


Using the I2C package
=====================

You can now load the modules by using `modprobe'. For example,
`modprobe i2c-elv' will load the i2c-elv modules, and all i2c modules
on which it depends.

You can not use demand-loading; you will have to issue explicit modprobe
instructions. The one exception is the `i2c-dev' module. You can 
automatically load it by adding the following line to etc/conf.modules or 
/etc/modules.conf (use the one that exists):
    alias char-major-89 i2c-dev

Note that there are no client drivers in this package; you will have to
get them from somewhere else (for example, download the lm_sensors
package at http://www.lm-sensors.nu). Without additional drivers and
programs, this package is of very limited use to you.


Old and new I2C drivers
=======================

In the current 2.2 and older 2.3 kernels, there are already I2C drivers, but
they are not the same ones as in this package. They are much older, and
have a very limited functionality compared with the drivers included
here. Fortunately, they can co-exist peacefully, so you should not worry
about it. Except for one thing: `#include <linux/i2c.h>' can cause the
wrong header file to be included. If you patched the kernel (compilation
option 3), you will have to use `#include <linux/i2c-old.h>' to include
the old ones; in all other cases, including the old ones will probably
be impossible without copying them explicitly to some place that will
be checked first.