Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://jet.sao.ru/hq/sts/linux/comedi/doc/x57.html
Дата изменения: Unknown Дата индексирования: Tue Oct 2 07:16:08 2012 Кодировка: Поисковые слова: р п р п р п р п р п р п р п р п р п р п р п р п п р п п р п п р п |
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 ni_atmio 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_atmio: 0x0200 can't find board
When it does work, I get:
comedi0: ni_atmio: 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: ni_atmio 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: ni_atmio 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.