Документ взят из кэша поисковой машины. Адрес оригинального документа : http://rtm-cs.sinp.msu.ru/new/can/candrv.html
Дата изменения: Tue Dec 22 12:21:45 1998
Дата индексирования: Mon Oct 1 19:49:46 2012
Кодировка: koi8-r
candrv users manual
              _/_/_/_/_/    _/_/_/_/       _/_/_/      _/_/
            _/_/          _/_/  _/_/     _/_/_/_/    _/_/
          _/_/          _/_/   _/_/    _/_/  _/_/  _/_/
	_/_/	      _/_/_/_/_/_/   _/_/    _/_/_/_/
      _/_/_/_/_/_/  _/_/     _/_/  _/_/      _/_/_/  driver.



1. Введение. Драйвер candrv (Controller Area Network DRiVer) был создан для поддержки карт PC-I 03 фирмы STZP в среде ОС Linux. Основные характеристики его следующие: o candrv поддерживает до двух одноканальных плат PC-I 03 с CAN контроллерами PCA 82c200 или две двухканальных. В последнем случае каждый CAN контроллер двухканальной карты должен рассматриваться как логическая карта и конфигурироваться отдельно (см. п. 3). o обеспечивает буфферизацию входящих и исходящих пакетов с исполь- зованием высокопроизводительных буферов FIFO. o обеспечивает конфигурирование адреса карты и номера прерывания с помощью proc filesystem, что позволяет настраивать драйвер на работу с различными PC-I 03 картами без перекомпилляции ядра. o предоставляет прикладному программисту стандартный в мире U*IX интерфейс вызовов для осуществления ввода/вывода, дополненый удобным структурированным типом данных can_msg. candrv может функционировать в двух различных режимах отсылки пакетов. В режиме по умолчанию драйвер отсылает пакеты с использованием прерываний от PC-I 03. Этот режим позволяет передавать данные со скоростью, близкой к теоретическому пределу для шины CAN bus. Однако, могут возникнуть ситуации, когда нужно сократить нагрузку на систему со стороны слишком часто приходя- щих прерываний(например при высокой активности на шине CAN bus). Для таких ситуаций предусмотрен специальный режим работы драйвера, в котором отсылка данных происходит без участия прерываний. Приём сообщений ВСЕГДА происходит по прерываниям. 2. Установка драйвера. Установку драйвера должен осуществлять человек знакомый с системой конфигурации ядра ОС Linux. За детальными обьяснениями обращайтесь к чтению Kernel-HOWTO. Основные шаги, необходимые для установки драйвера, следующие: o Перейти в каталог /usr/src/linux/drivers/char o В файл config.in ввести следующую строку... bool 'Support for PC-I 03 board' CONFIG_CAN_BUS_DRIVER o В файл Makefile добавить... ifeq ($(CONFIG_CAN_BUS_DRIVER),y) L_OBJS += candrv.o else ifeq($(CONFIG_CAN_BUS_DRIVER),m) M_OBJS += candrv.o endif endif o В файл mem.c, в функцию chr_dev_init(void) #ifdef CONFIG_CAN_BUS_DRIVER can_init(); #endif o Перейдите в каталог /usr/src/linux/init o В начало (до определения или вызова любой функции) файла main.c впишите следующее: #ifdef CONFIG_CAN_BUS_DRIVER extern void can_setup(char* str, int* ints); #endif o В массив структур static struct kernel_param cooked_params[] файла main.c впишите следующее: #ifdef CONFIG_CAN_BUS_DRIVER {"candrv=", can_setup}, #endif o Перейдите в каталог /usr/src/linux/include/linux и в файле major.h после определения всех MAJOR NUMBERS введите следующее: #define CAN_MAJOR xx Здесь xx - число, которое ещё не было использовано другими драйверами, например для ядра версии 2.1.119 это число - 77. o При конфигурации ядра в секции "Chracter devices" выберете поддержку карты PC-I 03. o Создайте специальные файлы устройств, для взаимодействия ваших CAN при - ложений с драйвером candrv. Для этого перейдите в каталог /dev и выпол - ните следующие команды: mknod can0 c 77 0 ....... mknod can3 c 77 3 Эти команды должны выполняться с правами root пользователя. Придержи - вайтесь принятых соглашений об именах специальных файлов, а именно, имя должно состоять из слова can и приписанного к нему номера. Этот номер должен совпадать со значением minor number данного файла. o Скомпиллируйте новое ядро и установите его. После перезагрузки системы и конфигурирования драйвера ВЫ получите доступ к вашей сети CAN bus из Linux системы. candrv может быть включён в ядро, как было показано выше, либо может быть скомпилирован как модуль. Последний способ предпочтительнее если Вы используете candrv не постоянно или не имеете в своей Linux системе достаточно много памяти. Компилируя candrv в ядро помните, что в резуль- тате Вы увеличете размер образа ядра в памяти примерно на 20Kbytes. 3. Конфигурирование драйвера. В процессе конфигурирования драйвера устанавливается соответствие между специальными файлами устройств canX и собственно картами PC-I 03 и вместе с тем дрйвер "узнаёт" адресса ввода/вывода карт и номера используемых ими прерываний. Конфигурирование любой из установленных в системе карт можно осуществить несколькими способами. Способ 1. Этот способ позволяет настроить вышеуказанные параметры во время загрузки ядра Linux в память при старте системы. Делается это при помощи передачи парметров ядру с помощью загрузчика LILO. Общий формат параметров для драйвера candrv таков: candrv=addr_0,irq_0,addr_1,irq_1 Здесь адрес addr_0 это адрес can карты, которой будет соответсвовать специальный файл can0. irq_0 - номер прерывания данной карты. Например команда vmlinuz candrv=0xC8000,10,0xD0000,11 которую нужно ввести после приглашения загрузки LILO boot: , настроит две одноканальных карты. Способ 2. Конфигурирование параметров вводв/вывода карт можно осуществлять и после загрузки системы. Делается это с помощью специального механизма ОС Linux - файловой системы proc. Перейдите в каталог /proc/CAN. Здесь ВЫ увидете файлы Can0, Can1. Чтение файла с номером N позволит ВАМ получить информацию о статусе карты номер N и её настройках. Никогда не редактируйте эти файлы с помощью текстовых редакторов, такие действия не принесут жела- емого результата. Вместо этого пользуйтесь сомандой: cat -> /proc/CAN/CanN [Return] param=value [Return] Где N - номер карты, которую ВЫ конфигурируете. param - это ключевое слово, одно из следующих: base_address - адрес ввода/вывода карты irq - номер прерывания карты transmit_mode - режим отсылки value: 0 - без использования прерываний 1 - с использованием прерываний (установлен по умолчанию) value - значение, которое ВЫ хотите присвоить данному параметру. Например команда cat -> /proc/CAN/Can0[Return] base_address=0xc8000[Return] irq=10[Return] установит адрес и прерывание для карты номер 0. Изменение параметров всту- пят в силу при следующей попытке открыть специальный файл, соответствующий конфигурируемой карте (в нашем примере при открытии файла /dev/can0). Если ваша карта PC-I 03 двухканальная, то ВЫ можете рассматривать второй канал как отдельную карту. При этом адрес такой логической карты должен быть таким: base_address + 0x200 , где base_address - это адрес первого канала, то есть адрес карты как таковой. 4. Тестирование драйвера. Целью тестирования является проверка того, насколько хорошо candrv работает в Вашей системе. Первым и наиболее важным шагом является проверка потерь паке- тов по вине драйвера(сеть CAN сама по себе пакеты терять не может). Для про - ведния этого теста предлагается использовать две программы - bcalc, для приёма и подсчёта пакетов и bpingt для посылки заданного числа пакетов. Обе программы находятся в каталоге candrv/tools/bping. Далее предполагается что тестируются две одноканальных карты, установленные в одном и том же компьютере. Порядок действий таков: На консоли #1 bcalck [Enter] На консоли #2 bpingt can1 1000 [Enter] Программа bpingt посылает 1000 блоков по 10 пакетов в каждом через спец. файл can1. Программа bcalck принимает пакеты по умолчанию из файла can0. После за- вершения передачи на консоли #1 должно быть сообщение о количестве полученых пакетов. Если это число меньше чем 1000 * 10 + 2, то у Вас имеется потеря пакетов. Возможная причина в том что Ваша система работает или на медленной машине или сисема в целом загружена ещё чем-то, причём это что-то выполняется в режиме ядра и к тому же блокирует все прерывания от аппаратуры. Если пакетов вообще не пришло попробуйте запустить на двух консолях программу canterm. Эта программа позволяет посылать единичные пакеты по CAN сети. canterm - имеет встроенную подсказку и не должен везывать затруднений при использовании. Если у Вас опять не заметно никакого движения пакетов по CAN сети, проверьте правильность физических соединений CAN сети. Если проверка ничего не дала, убедитесь в том что candrv действительно функционирует. Для этого посмотрите существуют ли файлы Can1, Can2 в каталоге /proc/CAN и если они существуют то из их содержимого Вы сможете узнать о возникших ошибках аппаратуры. А если этих файлов нет, то вернитесь в пункт 2 данного руководства, так как это означает отсутствие драйвера в составе ядра. Если первый шаг тестирования прошёл успешно, то приступим ко второму. Он состоит в измерении пропускной способности Вашей CAN сети. Запустите на консоли #1 bpingr [Enter] на консоли #2 bpingt can1 1000 [Enter] После завершения работы bpingt на консоли #1 Вы увидите характеристики Вашей CAN сети. С программой bpingt Вы уже знакомы по тесту #1, а программа из того же каталога bpingr является усовершенствованной версией bcalc. Денис Комиссаров. 1998 год.

This site is optimized for Netscape 4.0

Last modified 10 Dec 1998
© 1998 RTM-CS Lab, Moscow, Russia