This section covers compiling, installing, and configuring comedi and comedlib.
This section has not been written.
This section has not been written.
I assume that your hardware device is in your computer, and that you know the relevant details about it, i.e., what kind of card it is, the I/O base, the IRQ, jumper settings related to input ranges, etc.
To tell the comedi kernel module that you have a particular device, and
some information about it, you will be running the comedi_config
command. Perhaps you should read the man page now.
In this tutorial, I will go through the process of configuring comedi for two devices, a National Instruments AT-MIO-16E-10 and a Data Translation DT2821-F-8DI.
The NI board is plug-and-play, and the man page tells me that I need to configure the PnP part of the board with isapnptools. The isapnptools package is a little cryptic, but the concepts are simple. Once I learned how to use it, I settled on a /etc/isapnp.conf file that contained the lines:
# ANSI string -->National Instruments, AT-MIO-16E-10<--
(CONFIGURE NIC2400/10725401 (LD 0
(IO 0 (BASE 0x0260))
(INT 0 (IRQ 3 (MODE +E)))
# (DMA 0 (CHANNEL 5))
# (DMA 1 (CHANNEL 6))
(ACT Y)
))
It also contains a few lines about overall configuration and about my sound card. I found out after a bit of trial-and-error that the NI board does not always work with interrupts other than IRQ 3. YMMV. Currently, the driver doesn't use DMA, but it may in the future, so I commented out the DMA lines. It is a curious fact that the device ignores the IRQ and DMA information given here, however, I keep the information here to remind myself that the numbers aren't arbitrary.
When I run comedi_config (as root, of course), I provide the same information. Since I want to have the board configured every time I boot, I put the line
/usr/sbin/comedi_config /dev/comedi0 atmio-E 0x260,3
into /etc/rc.d/rc.local
. You can, of course, run this command at
a command prompt. The man page tells me that the option list
is supposed to be "(I/O base),(IRQ)", so I used the same numbers
as I put in /etc/isapnp.conf, i.e., 0x260,3.
For the Data Translation board, I need to have a list of the jumper settings. Fortunately, I wrote them all down in the manual -- I hope they are still correct. However, I had to open the case to figure out which board in the series I had. It is a DT2821-f-8di. The man page of comedi_config tells me that I need to know the I/O base, IRQ, DMA 1, DMA 2. However, since I wrote the driver, I know that it also recognizes the differential/single-ended and unipolar/bipolar jumpers. As always, the source is the final authority, and looking in module/dt282x.c tells me that the options list is interpreted as:
(ai=analog input, ao=analog output.) From this, I decide that the appropriate options list is
0x200,4,,1,1,1
I left the differential/single-ended number blank, since the driver already knowns (from the board name), that it is differential. I also left the DMA numbers blank, since I don't want the driver to use DMA. (Don't want it to interfere with my sound card -- life is full of difficult choices.) Keep in mind that things commented in the source, but not in the documentation are about as likely to change as the weather, so I put good comments next to the following line when I put it in rc.local.
/usr/sbin/comedi_config /dev/comedi1 dt2821-f-8di 0x200,4,,1,1,1
So now I think that I have my boards configured correctly. Since data acquisition boards are not typically well-engineered, comedi sometimes can't figure out if the board is actually there. If it can't, it assumes you are right. Both of these boards are well-made, so comedi will give me an error message if it can't find them. The comedi kernel module, since it is a part of the kernel, prints messages to the kernel logs, which you can access through the command 'dmesg' or /var/log/messages. Here is a configuration failure (from dmesg):
comedi0: ni_E: 0x0200 can't find board
When it does work, I get:
comedi0: ni_E: 0x0260 at-mio-16e-10 ( irq = 3 )
Note that it also correctly identified my board.
So now that we have comedi talking to the hardware, we want to talk to comedi. Here's some pretty low-level information -- it's sometimes useful for debugging:
cat /proc/comedi
Right now, on my computer, this command gives:
comedi version 0.6.4
format string
0: atmio-E at-mio-16e-10 7
1: dt282x dt2821-f-8di 4
This is a feature that is not well-developed yet. Basically, it currently tells you driver name, device name, and number of subdevices.
In the demo/
directory, there is a command called
info
, which provides information about each subdevice on the
board. The output of it is rather long, since I have 7
subdevices (4 or fewer is common for other boards.)
Here's part of the output of the NI board (which
is on /dev/comedi0
.) ('demo/info /dev/comedi0')
overall info:
version code: 0x000604
driver name: atmio-E
board name: at-mio-16e-10
number of subdevices: 7
subdevice 0:
type: 1 (unknown)
number of channels: 16
max data value: 4095
...
The overall info gives information about the device -- basically the same information as /proc/comedi.
This board has 7 subdevices. Devices are separated into subdevices that each have a distinct purpose -- e.g., analog input, analog output, digital input/output. This board also has an EEPROM and calibration DACs that are also subdevices.
Subdevice 0 is the analog input subdevice. You would have known this from the 'type: 1 (unknown)' line, if I've updated demo/info recently, because it would say 'type: 1 (analog input)' instead. The other lines should be self-explanitory. Comedi has more information about the device, but demo/info doesn't currently display this.