|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: 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 |
_/_/_/_/_/ _/_/_/_/ _/_/_/ _/_/
_/_/ _/_/ _/_/ _/_/_/_/ _/_/
_/_/ _/_/ _/_/ _/_/ _/_/ _/_/
_/_/ _/_/_/_/_/_/ _/_/ _/_/_/_/
_/_/_/_/_/_/ _/_/ _/_/ _/_/ _/_/_/ 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