Мы продолжаем серию публикаций об электронных компонентах тайваньской компании Realtek, которые можно использовать для разработки мультимедийной и сетевой электроники.
На днях в нашем распоряжении оказалась демо-плата многопортового коммутатора RTL_8332M_DDR3_DEMO_P2L_V1.0 на базе свитч-процессора Realtek 8332M, а также фирменный комплект средств разработки. Под катом мы расскажем, что собой представляет эта плата, опишем процесс сборки прошивки на основе Realtek SDK, ее загрузку и тестирование пропускной способности полученного коммутатора с проверкой работоспособности QoS.
Устройство предназначено для разработки и отладки ПО для управляемого многопортового коммутатора c 24 портами Fast Ethernet и 4 портами Gigabit Ethernet. Основа используемых свич-процессоров — CPU MIPS-4KEc 32bit@500MHz, они позволяет управлять всеми функциями коммутатора.
Возможно, у читателя возникнет вопрос: для чего в наше время, «когда космические корабли бороздят просторы вселенной» может понадобиться разработка коммутатора Fast Ethernet. На наш взгляд, данное недорогое решение может быть востребовано в системах, где не требуется высокая скорость передачи данных. Например, подключение IP-телефонии и камер видеонаблюдения.
Для начала дадим небольшое описание свитч-процессора:
- Порты: 24-port Fast Ethernet + 4-port Gigabit Ethernet
- Встроенный Fast Ethernet PHY на 8 портов
- Поддержка двух независимых XSMII-интерфейсов к внешним Fast Ethernet PHY
- Интерфейс QSGMII либо 2 пары интерфейсов RSGMII/SGMII/1000Base-X/100Base-FX
- Поддержка Serial/Dual I/O mode 32 МБ SPI Flash
- Интерфейс к внешней памяти до 128 МБ DDR1/DDR2 либо 256 МБ DDR3
- Ядро MIPS-4KEc с поддержкой адресации виртуальной памяти (MMU) на частоте 500 МГц
- Встроенная память SRAM объемом 128 Кбайт
- Два последовательных порта для отладки и контроля через интерфейс командной строки (CLI)
- Поддержка отладочного интерфейса EJTAG
- Поддержка интерфейсов EEPROM, I2C и SPI
- Поддержка EAV, 1588v2
- Поддержка диагностики Cable Diagnostics (RTCT)
- Поддержка режимов энергосбережения IEEE 802.3az Energy Efficient Ethernet (EEE)
Максимальное количество VLAN 4096
Поддержка до 64 независимых процессов для MSTP (IEEE 802.1s), RSTP и STP
Тегирование Q-in-Q и VLAN
Функционал L2 MAC
Длина сетевых пакетов до 10 КБ
Таблица на 8K L2 MAC-адресов
Таблица на 512 мультикаст-адресов
Поддержка IGMPv1/2/3 и MLDv1/2 snooping
Другая функциональность уровня L2
Контроль трафика broadcast, multicast, unknown- multicast и unknown-unicast
Поддержка зеркалирования траффика
Поддержка агрегации каналов (IEEE 802.3ad)
Поддержка распознавания и изоляции закольцованного траффика (RLPP/RLDP)
Функционал Access Control List (ACL)
Поддержка формата L2/L3/L4 (DMAC, SMAC и Ether-Type)
IPv6 ACL
Функции QoS
8 очередей на порт
Обработка очередей по алгоритмам Strict Priority (SP), Weighted Fair Queue (WFQ) и Weighted Round Robin (WRR)
Комплект поставки RTL_8332M_DDR3_DEMO_P2L_V1.0
Плата включает в себя:
- 24 порта 10/100М Ethernet
- 4 порта Gigabit Ethernet
- 4 порта SFP
- свитч-процессор RTL8332M
- 2 8-портовых 10/100Base-TX трансивера RTL8208L
- 4-портовый Gigabit Ethernet трансивер RTL8214B
- DDR3 SDRAM-память (128M)
- Панель LED-индикации
- Вывод UART интерфейса
- SPI Flash (16M)
Структурная схема устройства:
На фото ниже представлен вид платы сбоку, на нем хорошо видно порты:
Полученные нами средства разработки включают в себя toolchain, SDK с исходниками Linux и u-boot, а также некоторую документацию.
Сборка прошивки из Realtek SDK
Распаковываем toolchain и сразу прописываем пути к нему в PATH, чтобы bash знал, где его искать:
$ tar -zxf 01_toolchain/linux/v2.6.32.58/msdk-4.3.6-mips-EB-2.6.32-0.9.30.3-m32-120424.tar.bz2 $ export PATH=$PATH:<project dir>/msdk-4.3.6-mips-EB-2.6.32-0.9.30.3-m32-120424/bin/
Распаковываем SDK, а также исходники u-boot и uClinux:
$ cd 02_SDK/V2.1.2.41872/Package $ tar zxf rtk-ms-sdk-src-2.1.2.41872.tar.gz $ tar zxf rtk-ms-uboot-2011.12-src-svn41872.tar.gz $ tar zxf rtk-ms-uboot-src-1.3.0.41872.tar.gz $ tar zxf rtk-ms-uClinux-src-2.6.19-2.6.32.58-svn41872.tar.gz
Выбираем версю linux и uClibc:
В SDK было 2 версии ядра Линукс – 2.6.19 и 2.6.32.58. С версией ядра 2.6.19 используется uClibc 0.9.28, а с версией 2.6.32.58 – uClibc 0.9.30. Мы использовали последнюю версию.
$ make menuconfig
С версией ядра 2.6.19 используется uClibc 0.9.28, а с версией 2.6.32.58 – uClibc 0.9.30.
В настройках SDK включаем поддержку свитч-процессора 8332M:
$ make sdkconfig
В опциях Chip Support и SDK Driver указываем чип 8380:
В menuconfig-е ядра нужно изменить параметры загрузки на ”debug console =ttyS0,115200 mem=128M”, т.к. у нас используется чип с 128M памяти:
$ make -C kernel/uClinux/linux-2.6.32.x menuconfig
Сборка (сборка проходит успешно только с правами рута, поэтому нужно экспортировать вышеуказанные пути также и в PATH рута):
# export PATH=$PATH:<project dir>/msdk-4.3.6-mips-EB-2.6.32-0.9.30.3-m32-120424/bin/ # make
При сборке, не смотря на проведенную настройку в menuconfig-е, в консоль высыпается пара вопросов по настройке RTK BSP. Указываем чип 8380:
* * Restart config... * * * RTK Universal BSP selection * Realtek RTL8390/50 Board (RTL8390_SERIES) [N/y/?] (NEW) n Realtek RTL8380/30 Board (RTL8380_SERIES) [N/y/?] (NEW) y Realtek RTL8328 Board (RTL8328_SERIES) [N/y/?] (NEW) n
Если всё сработало, на экране выводится информация о собранном образе, результаты сборки кладутся в image/:
Image Name: 3.0.0.beta Created: Fri Mar 13 15:06:27 2015 Image Type: MIPS Linux Kernel Image (gzip compressed) Data Size: 2787086 Bytes = 2721.76 kB = 2.66 MB Load Address: 80000000 Entry Point: 80003a70
Загрузка собранного ядра
1) На хосте необходимо установить сервер tftp. Установка и настройка например под Ubuntu описана здесь: http://askubuntu.com/questions/201505/how-do-i-install-and-run-a-tftp-server.
2) В расшаренную через tftp папку скинуть собранный образ ядра:
# cp images/vmlinux.bix /tftpboot
3) Подключиться к плате через UART, настройки для minicom следующие:
A - Serial Device : /dev/ttyUSB0 B - Lockfile Location : /var/lock C - Callin Program : D - Callout Program : E – Bps/Par/Bits : 115200 8N1 F - Hardware Flow Control : No G - Software Flow Control : No
4) На плате грузится u-boot, нужно из него загрузить собранное ядро через tftp:
Hit any key to stop autoboot: 0 RTL838x# # RTL838x# # setnenv ipaddr 192.168.1.1 ← IP платы RTL838x# # setenv serverip 192.168.1.111 ← IP хоста RTL838x# # rtk network on RTL838x# # tftp 0x81000000 vmlinux.bix RTL838x# # bootm 0x81000000
После загрузки Линукса запускаем DiagShell – command line interface для управления настройками свича.
В нем включаем нужные порты (или все):
# diag RTK.0> port set port all state enable
Прошивка запущена, коммутатор работает.
Тестирование скорости
Замеры скорости мы проводили, подключив к плате 2 ПК c помощью программы iperf в двух режимах –LAN- и VLAN-подключение свича.
Через DiagShell VLAN был настроен следующим образом (например, настройка для портов 25, 26, 27 и vlan id = 20):
RTK.0> vlan create vlan-table vid 20 RTK.0> vlan set pvid inner port 25-27 20 RTK.0> vlan set vlan-table vid 20 member 25-27 RTK.0> vlan set vlan-table vid 20 untag-port 25-27
При тестировании VLAN проявляется интересный эффект: если VLAN настроить на диапазон портов, включающий порты 100М и 1000М, то скорость будет ограничена на уровне 100 Мбит/с, даже если оба ПК подключены в гигабитные порты.
Вот такие получились результаты тестирования:
Порт | Режим тестирования | Замеренная скорость (Мбит/с) |
---|---|---|
100M | LAN | 96,2 |
1000M | LAN | 936 |
100M | VLAN | 95,7 |
1000M | VLAN | 936 |
Можно сказать, что пропускная способность соответствует заявленной.
Теперь попробуем настроить QoS. Данная функция очень пригодится при настройке офисной IP-телефонии.
Как мы уже говорили, коммутатор поддерживает два алгоритма обработки очередей: Strict Priority и WFQ.
Мы ограничились проверкой Strict Priority. Для проверки подключили к плате три ПК. На одном из ПК запустили iperf-сервер:
$ iperf –s
На двух других ПК — клиенты:
$ iperf -c server_ip -i 1 -t 300
При этом на одном из клиентов установили в IP-пакетах в поле DS значение 0x20 (DSCP 0x8), используя не очень задокументированную опцию -S:
$ iperf -c server_ip -i 1 -t 300 –S 0x20
Результаты замеров пропускной способности показали, что трафик распределился примерно поровну.
Теперь попробуем настроить QoS. Для этого зададим для DSCP 0x8 максимальное значение приоритета (7).
RTK.0> qos set remapping dscp system dscp 8 internal-priority 7
В результате маркированный трафик занял всю полосу пропускания. Что ж, похоже, QoS действительно работает.
Добавим несколько слов про DiagShell. На наш взгляд, этот CLI довольно функционален и вполне может использоваться при разработке готового устройства. Конечно, в идеале хотелось бы иметь некий интуитивный веб-интерфейс, который на данный момент отсутствует в SDK. Для конечного устройства его придется разрабатывать.
В целом можно сказать, что в результате мы получили тестовую плату многопортового коммутатора с возможностью разработки ПО. Такую программно-аппаратную платформу можно использовать для разработки недорогих управляемых коммутаторов Fast Ethernet для подключения к основной сети через порты Gigabit Ethernet.
Спасибо за внимание!
Другая хорошая статья на эту тему — Запуск Linux на медиапроцессоре Realtek RTL-1185.
ссылка на оригинал статьи http://habrahabr.ru/post/254781/
Добавить комментарий