mclinux36 - Linux 2.6.36.3 для Elvees Multicore (прежде всего, NVCom01) ----------------------------------------------------------------------- Состав директории: linux-2.6.36 - исходные коды ядра tests - исходные коды тестов Для сборки использовался buildroot, исходники и готовые бинарные файлы расположены в папке ../toolchain. В переменной окружения PATH должен присутствовать путь к папке, содержащей компилятор и прочие утилиты (mipsel-linux-*), а в LD_LIBRARY_PATH - путь к папке, содержащей основные динамически линкуемые библиотеки. При использовании готовых бинарных файлов из данного репозитория это папки ../toolchain/usr/bin и ../toolchain/usr/lib, соответственно. Можно один раз это сделать в ~/.bashrc. Подробнее сборка и использование buildroot описаны в файле ../toolchain/README.txt Для сборки ядра необходимо перейти в папку linux-2.6.36 и выполнить команду: ARCH=mips make Конфигуратор ядра можно вызвать командой: ARCH=mips make menuconfig Сборка по умолчанию подразумевает, что сообщения ядра и консоль выводятся на интерфейс UART0 со следующими настройками: 115200, 8-битные символы, без контроля четности. Выбор UART для консоли: ----------------------- Выбор на каком из UART будет работать консоль осуществляется в конфигурации ядра, с помощью задания командной строки ядра (Kernel Hacking -> Default kernel command string). Если в параметре console указан файл ttyS0, то консоль будет выведена на UART0; если ttyS1 - UART1. Строка для UART0 должна содержать: console=ttyS0,115200N8 Строка для UART1 должна содержать: console=ttyS1,115200N8 Выбор корневой файловой системы: -------------------------------- В командной строке ядра (Kernel Hacking -> Default kernel command string) можно указать, где находится корневая файловая система. Есть, по крайней мере, два варианта: 1. Корневая файловая система входит в состав elf-файла с ядром линукс. В этом случае командная строка должна содержать: root=/dev/ram0 При этом в конфигурации в разделе "General Setup" должна стоять галочка напротив "Initial RAM filesystem and RAM disk (initramfs/initrd) support", а в строке ниже ("Initramfs source file(s)") должен быть указан путь к папке с образом корневой файловой системы (обычно ../target_exp). 2. Корневая файловая система монтируется по NFS. В этом случае командная строка должна содержать: root=/dev/nfs nfsroot=:/path/to/rootfs ip=:::::eth0:none: где - ip-адрес машины, на которой запущен сервер NFS. /path/to/rootfs - полный путь к папке с корневой файловой системой на машине с сервером NFS. - ip-адрес, который необходимо установить плате при загрузке Про запуск и настройку сервера NFS на ПК - см. ниже. Настройка сервера NFS: ---------------------- Ниже описаны шаги по установке сервера NFS в Ubuntu (проверено на 10.10 и 11.04). а) установить NFS: sudo apt-get install nfs-kernel-server nfs-common portmap б) отредактировать /etc/exports sudo gedit /etc/exports В него нужно добавить строку вида: /path/to/rootfs 192.168.1.190/24(rw,sync,no_subtree_check,no_root_squash,no_all_squash) где первое поле - путь к экспортируемой папке (той, которая будет видна извне), далее ip-адрес клиента, которому будет разрешен доступ к данной папке и маска (24 означает 255.255.255.0), далее опции подключения в) перезапустить сервер: sudo /etc/init.d/nfs-kernel-server restart Ethernet: --------- Запуск Ethernet интерфейса осуществляется командой: ifconfig eth0 В случае, когда корневая система монтируется по NFS, запускать данную команду не обязательно - интерфейс уже запущен и имеет адрес, указанный в параметре ip командной строки ядра. Также, вместо выполнения команды можно добавить строчку в /etc/inittab корневой файловой системы (лучше раскомментировать - она там уже есть): ::sysinit:/sbin/ifconfig eth0 У драйвера Ethernet есть поддержка функций ethtool (пока только двух): 1) можно посмотреть информацию о версии драйвера, набрав в консоли платы: ethtool -i eth0 2) можно посмотреть текущее состояние интерфейса eth0 с помощью команды: ethtool eth0 Проверка работоспособности Ethernet: Тесты Ethernet лежат в папке mclinux36/tests/sockets. Для сборки необходимо в этой папке дать команду make. Возможны два варианта тестов: передача данных по протоколам UDP и TCP. Какой вариант тестов будет собран - зависит от того, установлена ли директива препроцессору TCP_SOCKET в Makefile или нет (если установлена, то TCP, иначе UDP). Идея тестов следующая. Клиент передает на сервер постоянно увеличивающееся значение счетчика (один пакет содержит несколько таких значений для повышения эффективности передачи). Сервер контроллирует, что нет потерь при передаче по этому счетчику, а также оценивает текущую "чистую" скорость передачи данных. И сервер, и клиент могут быть запущены как на плате, так и на ПК, поэтому после команды make в папке появляются 4 elf-файла: server_targ, client_targ - сервер и клиент для платы; server_host, client_host - сервер и клиент для ПК. Запуск сервера: server_[targ, host] Запуск клиента: client_[targ, host] SpaceWire (сетевой драйвер): ---------------------------- Драйвер SpaceWire доступен только на платформе с MC24R2. Для его включения необходимо в конфигурации ядра: 1) установить платформу MC24R2. Для этого в меню Machine Selection-> Elvees Multicore platform options-> Subplatform выбрать пункт MC24R2 Evaluation board; 2) В меню Type of SpaceWire driver выбрать пункт Network; 3) В появившемся меню SpaceWire Options выбрать или пометить для сборки в виде модуля ядра (последнее доступно только если включена поддержка модулей ядра) пункт Enable driver. Поддержка модулей ядра включается в главном меню выбором пункта Enable loadable module support. 4) Кроме того, в меню можно указать скорость, на которой будет происходить подключение (пункт Start Speed), и скорость, которая будет установлена автоматически после успешного подключения (пункт Default working speed). Сетевой драйвер SpaceWire представляется ядру как драйвер Ethernet, поэтому работа с устройствами SpaceWire схожа с устройствами Ethernet. Для включения интерфейса SWIC0 необходимо дать команду: ifconfig eth0 Для задействования интерфейса SWIC1 необходимо в этой команде заменить eth0 на eth1. Также, вместо выполнения команды можно добавить строчку в /etc/inittab, тогда она будет выполняться автоматически при каждом запуске системы. Поскольку сетевой драйвер SpaceWire для системы не отличим от драйвера Ethernet, на прикладном уровне можно использовать те же приемы программирования, что и при использовании Ethernet, прежде всего, сокеты. Тестировать связь по SpaceWire можно двумя способами. 1) Соединить две платы с MC24R2 по интерфейсу SpaceWire. Дать соединенным устройствам ip-адреса из одной подсети. Использовать команду ping для проверки соединения. 2) Соединить две платы с MC24R2 по интерфейсу SpaceWire. На одной из плат запустить server_targ, на другой client_targ (см. Проверку работоспособности Ethernet выше). Данный тест не только покажет наличие соединения, но и сообщит померенную скорость односторонней передачи по протоколу TCP/IP поверх SpaceWire. На текущий момент скорость передачи составляет приблизительно 350 Кбайт/с. SpaceWire (драйвер символьных устройств): ----------------------------------------- Драйвер SpaceWire доступен только на платформе с MC24R2. Для его включения необходимо в конфигурации ядра: 1) установить платформу MC24R2. Для этого в меню Machine Selection-> Elvees Multicore platform options-> Subplatform выбрать пункт MC24R2 Evaluation board; 2) В меню Type of SpaceWire driver выбрать пункт Character; 3) В появившемся меню SpaceWire Options выбрать или пометить для сборки в виде модуля ядра (последнее доступно только если включена поддержка модулей ядра) пункт Enable driver. Поддержка модулей ядра включается в главном меню выбором пункта Enable loadable module support. 4) Кроме того, в меню можно указать скорость, на которой будет происходить подключение (пункт Start Speed), и скорость, которая будет установлена автоматически после успешного подключения (пункт Default working speed). Работа с драйвером символьных устройств происходит через файлы /dev/spw0 и /dev/spw1 для контроллеров SWIC0 и SWIC1, соответственно. При разработке программ, использующих интерфейс Spacewire, используются стандартные функции для работы с файлами: open, close, read, write, ioctl. Причем драйвер берёт на себя логику работы с дескрипторами пакетов Spacewire, т.е. при записи (с помощью write) драйвер самостоятельно создает дескриптор для пакета переданного размера, а при чтении (с помощью read) драйвер проверяет правильность приёма и передаёт пользователю только чистые данные. Размер пакета Spacewire, который может принять или передать драйвер, ограничен 2000 байт. Драйвер поддерживает следующие ioctl-вызовы (описаны в spw.h): - получение значения частоты приема; - получение значения частоты передачи; - установка значения частоты передачи; - вызовы для получения статистики по работе драйвера; - сброс статистики. Тесты лежат в папке mclinux36/tests/test-spw. Собираются просто командой make, которая также перенесёт исполняемые файлы в target. Запускать тест нужно так: rxspw /dev/spw0 & nice txspw /dev/spw1 <скорость в Мбит/с> Второй параметр txspw можно не указывать, тогда скорость будет по умолчанию 10 Мбит/с. Тест передаёт счётчик (пакетами 1024 байта) в одну сторону: от txspw к rxspw. На приёмной стороне контролируется непрерывность значений счётчика. В случае обнаружения "разрыва" в значениях выдается сообщение. Кроме того, приёмник оценивает реальную скорость приёма и периодически печатает её на экране. nice в вызове txspw нужен для того, чтобы понизить приоритет передатчика. Иначе, поскольку и принимающая, и передающая программы работают на одном процессоре, то стохастически передатчику может быть выделено больше времени. И тогда принимающая программа не успеет вовремя откачать принятые данные из драйвера, и произойдет их потеря в результате перезаписи новых пакетов поверх самых старых (в драйвере реализован приёмный кольцевой буфер). На текущий момент скорость передачи составляет приблизительно 450 Кбайт/с.