vak: (Daemon)
За последние три дня я могучим рывком, броском, пинком и нахрапом закончил таки переделку RetroBSD под компилятор Clang. Теперь не нужно бегать искать GCC для mips32. Ставите стандартный Clang и вперёд. Инструкция по сборке лежит в корневом файле README. Для запуска на симуляторе годится обновлённый QEMU для pic32. Если кому понадобится старая версия с GCC - она лежит в бранче gcc.

Поддержку устаревшего хардвера я убрал. Оставил только две платы, обе имеются в продаже:Из минусов: потеряны две фичи.
  • MIPS16e - компактная система команд - не поддерживается компилятором Clang. Формально она там есть, но код генерится совершенно нерабочий. Так что приходится довольствоваться стандартным набором инструкций. Из-за этого некоторые "толстые" приложения не лезут в память, к примеру компилятор SmallerC.
  • Не удаётся собрать библиотеку libc.а в формате a.out для того же компилятора SmallerC. Потому что имеющийся ассемблер mips32 не понимает некоторые навороченные конструкции, порождаемые компилятором Clang. Надо будет допиливать.
Но в целом система фурычит довольно неплохо. Открывается путь для переноса на другие платформы: esp32, stm32, riscv и другие.
vak: (Daemon)
Хотите взглянуть, как грузится RetroBSD с точки зрения последовательности системных вызовов? Стартует /sbin/iuit, из-под него /bin/sh выполняет скрипт /etc/rc, проверяет файловую систему, запускает cron и в конце концов getty. Я сделал флажок в QEMU для pic32, чтобы трассировать системные вызовы. Вывод слегка обработал вручную, вот результат.

gist.github.com/sergev/c0c21f47220e2d3ec6eee4b5b076ec0f
vak: (Daemon)
Нашёлся умный человек, подсказал как собрать на нынешнем Debian 12 (bookworm) симулятор pic32, который я сварганил десять лет назад. Приятно вспомнить.

Главная хитрость - установить Python 2.7. Официально делать это крайне не рекомендуется, но оно работает, как ни странно.
wget http://ftp.debian.org/debian/pool/main/libf/libffi/libffi7_3.3-6_amd64.deb
wget http://ftp.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.1w-0+deb11u1_amd64.deb
wget http://ftp.debian.org/debian/pool/main/p/python2.7/libpython2.7-minimal_2.7.18-8+deb11u1_amd64.deb
wget http://ftp.debian.org/debian/pool/main/p/python2.7/python2.7-minimal_2.7.18-8+deb11u1_amd64.deb
wget http://ftp.debian.org/debian/pool/main/p/python2.7/libpython2.7-stdlib_2.7.18-8+deb11u1_amd64.deb
wget http://ftp.debian.org/debian/pool/main/p/python2.7/python2.7_2.7.18-8+deb11u1_amd64.deb
sudo dpkg -i libffi7_3.3-6_amd64.deb \
libssl1.1_1.1.1w-0+deb11u1_amd64.deb \
libpython2.7-minimal_2.7.18-8+deb11u1_amd64.deb \
python2.7-minimal_2.7.18-8+deb11u1_amd64.deb \
libpython2.7-stdlib_2.7.18-8+deb11u1_amd64.deb \
python2.7_2.7.18-8+deb11u1_amd64.deb
Теперь соберём и установим QEMU для pic32:
sudo apt install libpixman-1-dev libfdt-dev zlib1g-dev libglib2.0-dev libsdl1.2-dev
git clone https://github.com/sergev/qemu.git
mkdir qemu-build
cd qemu-build
../qemu/configure --prefix=/usr/local/qemu-mips \
--target-list=mipsel-softmmu \
--python=/usr/bin/python2.7 \
--disable-werror
make CFLAGS="-O3 -Wno-error -isystem /usr/include/glib-2.0 -isystem /usr/lib/$(uname -m)-linux-gnu/glib-2.0/include" -j "$(nproc)"
make install
Бинарник QEMU будет установлен как /usr/local/qemu-mips/bin/qemu-system-mipsel. Запустим LiteBSD:
wget https://raw.githubusercontent.com/wiki/sergev/qemu/binaries/boot-wifire.hex
wget https://raw.githubusercontent.com/wiki/sergev/qemu/binaries/vmunix.hex
wget https://raw.githubusercontent.com/wiki/sergev/qemu/binaries/litebsd.zip
unzip litebsd.zip
/usr/local/qemu-mips/bin/qemu-system-mipsel \
-machine pic32mz-wifire \
-nographic \
-monitor none \
-serial vc \
-serial vc \
-serial vc \
-serial stdio \
-bios "boot-wifire.hex" \
-kernel "vmunix.hex" \
-sd "litebsd.img"
Стартует классический юникс 30-летней давности:
Board: chipKIT WiFire
Processor: microAptivP
RAM size: 512 kbytes
Load file: 'boot-wifire.hex', 6916 bytes
Load file: 'vmunix.hex', 522408 bytes
Card0 image 'litebsd.img', 339969 kbytes
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.

4.4BSD-Lite build 13 compiled 2015-01-20
sergev@ubuntu-sergev:LiteBSD/sys/compile/WIFIRE.pic32
cpu: PIC32MZ2048ECG100 rev A4, 200 MHz
oscillator: system PLL div 1:6 mult x50
real mem = 512 kbytes
avail mem = 344 kbytes
using 18 buffers containing 73728 bytes of memory
spi1 at pins sdi=D14/sdo=C1/sck=D1
spi2 at pins sdi=F0/sdo=D11/sck=G6
spi3 at pins sdi=B10/sdo=C4/sck=B14
spi4 at pins sdi=F5/sdo=G0/sck=D10
uart1 at pins rx=F1/tx=D15, interrupts 112/113/114
uart4 at pins rx=F2/tx=F8, interrupts 170/171/172, console
sd0 at port spi3, pin cs=C3
sd0: type I, size 339968 kbytes, speed 12 Mbit/sec
sd0a: partition type b7, sector 2, size 204800 kbytes
sd0b: partition type b8, sector 409602, size 32768 kbytes
sd0c: partition type b7, sector 475138, size 102400 kbytes
bpf: sl0 attached
bpf: lo0 attached
WARNING: preposterous clock chip time -- CHECK AND RESET THE DATE!

starting file system checks.
/dev/rsd0a: file system is clean; not checking
starting network
clearing /tmp
standard daemons: update.
Wed Dec 10 21:07:36 PST 2014

4.4BSD-Lite (bsd.net) (tty4)

login: _
Заходите как root, без пароля. Остановить систему можно командой halt -q.
vak: (Default)
Казалось бы, какое может быть удовольствие от древних бинарников Windows, да еще с платформы MIPS. Но вот один весёлый чувак сбацал симулятор, на котором можно запускать такие файлы.

Все исходники и бинарники здесь: https://github.com/x86matthew/WoWMIPS

Подробности в его блоге: 1 2 3 4 5 6

Я погонял этот симулятор под Wine на линуксе и маке - отлично работает. Вот скриншоты.
wine ./WoWMIPS.exe winmine.exe

+5 )
vak: (Default)
Когда-то [personal profile] is39 подарил мне забавный прибамбас, в просторечии называемый манго. Миниатюрный роутер Wi-Fi, оказавшийся удивительно полезным в быту. К сожалению, только на диапазон 2.4ГГц. А тут понадобилось мне аналогичное, но на 5ГГц. Ну я недолго думая заказал с Амазона - оказалось той же фирмы, и тоже на процессоре MIPS. Мелочь, а приятно. Причём тот самый MIPS Interaptive, к симуляции и верификации которого я лично немало сил приложил. Вот теперь приносит пользу людям.

Часто при возне с разными компьютерами, особенно древними, бывает нужно подключить их к интернету через порт Ethernet. А по нынешним временам обычно имеется только Wi-Fi. Тут и спасает такой роутер. Достал из кармана, подключил - готово. Держу его преднастроенным на все актуальные беспроводные сетки: домашнюю, на работе, плюс xfinitywifi, если вдруг в дороге припекло. Роутер ещё много всякого умеет, но для меня Ethernet главная полезность.

Страничка на сайте производителя: gl-inet.com/products/gl-sft1200/

Ну и раз уж оно старый добрый MIPS с прошивкой OpenWRT, почему бы не запихнуть туда заодно и полноценный линукс. Благо USB имеется для внешней флешки под файловую систему. Много лет назад я излагал способ запускать Debian на андроидном таблете, посредством chroot. Тот же метод сработал и здесь, только инструкцию понадобилось обновить. Пусть будет хоть один живой MIPS-компьютер в хозяйстве. Жаль, памяти RAM всего 128 мегабайт.

Подробности конфигурации:Меряем скорость:
Nanoseconds for one run through Dhrystone: 514.7
Million Dhrystones per Second: 1.943
DMIPS: 1105.8
Это 14% от Raspberry Pi 4 или 30% от Raspberry Pi 3B.

Чтобы зайти в Debian на роутере:
1. Подаём на него питание. 
2. Появляется WiFi сеть с названием GL-SFT1200-abc-5G. Подключаемся к ней. 
3. Заходим через SSH по адресу 192.168.8.1. Нужны хитрые флаги.
ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostkeyAlgorithms=+ssh-rsa,ssh-dss -oCiphers=+aes128-ctr,aes256-ctr [email protected]
4. Пароль смотри в pass.
5. В шелле вызываем скрипт ./debian.sh.
vak: (Default)
Один клёвый чувак сделал красивую простую платку на процессоре PIC32MX250, и некоторое количество полезного софта для неё. Продаётся за $13 на tindie.com (плюс доставка).

Бутлоадер: github.com/dgtie/STICK250

Программатор для PIC32: github.com/dgtie/NPickit2

Программатор для ATmega: github.com/dgtie/STK500v2_clone

Конвертер USB - serial: github.com/dgtie/usbSerial



Схема )
vak: (Default)
Народ на днях задал мне вопрос, нет ли способа пересобрать RetroBSD из исходников на каком-нибудь современном линуксе, типа Ubuntu 22.04, не откатываясь на десять лет назад. Я потыркался маленько, и оказалось, что компилятор для mips32r2 найти не так уж легко. Нет способа просто установить GCC для MIPS из готовых пакетов ни на линуксе, ни на маке. Старые бинарные сборки устарели и на новых MacOS вообще не запускаются. Пытался скомпилировать последний GCC из исходников - валится где-то при сборке runtime библиотеки. Непруха в общем.

Неожиданно обнаружилось, что ситуацию может спасти Clang. Это другой Си компилятор, из проекта LLVM. Оказалось, что стандартный пакет типа clang-14 содержит бэкенд не только для x86-64, но и для кучи других архитектур, включая mips32. Вот полный список.
$ clang-14 -print-targets
Registered Targets:
aarch64 - AArch64 (little endian)
aarch64_32 - AArch64 (little endian ILP32)
aarch64_be - AArch64 (big endian)
amdgcn - AMD GCN GPUs
arm - ARM
arm64 - ARM64 (little endian)
arm64_32 - ARM64 (little endian ILP32)
armeb - ARM (big endian)
avr - Atmel AVR Microcontroller
bpf - BPF (host endian)
bpfeb - BPF (big endian)
bpfel - BPF (little endian)
hexagon - Hexagon
lanai - Lanai
m68k - Motorola 68000 family
mips - MIPS (32-bit big endian)
mips64 - MIPS (64-bit big endian)
mips64el - MIPS (64-bit little endian)
mipsel - MIPS (32-bit little endian)
msp430 - MSP430 [experimental]
nvptx - NVIDIA PTX 32-bit
nvptx64 - NVIDIA PTX 64-bit
ppc32 - PowerPC 32
ppc32le - PowerPC 32 LE
ppc64 - PowerPC 64
ppc64le - PowerPC 64 LE
r600 - AMD GPUs HD2XXX-HD6XXX
riscv32 - 32-bit RISC-V
riscv64 - 64-bit RISC-V
sparc - Sparc
sparcel - Sparc LE
sparcv9 - Sparc V9
systemz - SystemZ
thumb - Thumb
thumbeb - Thumb (big endian)
ve - VE
wasm32 - WebAssembly 32-bit
wasm64 - WebAssembly 64-bit
x86 - 32-bit X86: Pentium-Pro and above
x86-64 - 64-bit X86: EM64T and AMD64
xcore - XCore
У меня есть в запаснике пример прошивки для pic32. Пришлось повозиться, чтобы поправить его для Clang, но вроде неплохо выходит. Компиляция выглядит следующим образом:
$ make
/usr/lib/llvm-14/bin/clang -target mipsel -mcpu=mips32r2 -mabi=o32 -mfloat-abi=soft -DPIC32MX7 -c uart.c
/usr/lib/llvm-14/bin/ld.lld -m elf32ltsmip -T using-bootloader.ld -e _start -g uart.o -o uart.elf
/usr/lib/llvm-14/bin/llvm-objcopy -O ihex uart.elf uart.hex
/usr/lib/llvm-14/bin/llvm-objdump --mcpu=mips32r2 -d -S uart.elf > uart.dis
С компилятором разобрались, а теперь стоит большая задача поправить все исходники RetroBSD под него. Нынче Си гораздо более строгий, чем тридцать лет назад. Всяких глупостей не прощает.
vak: (Default)
Я по привычке продолжаю читать технические новости на российских сайтах, и в последнее время каждая новость оказывается враньём. Вот, к примеру.

"Россияне создали суперзащищенные роутеры на древних процессорах «Байкал»"
  • Не создали они никакие роутеры, а "анонсировали".
  • "Сроков начала производства у него пока нет."
  • "Расширенная защита от хакерских атак" - чистая туфта. Просто линукс на процессоре MIPS. Я знаю, я участвовал в разработке этого процессора.
  • Эти процессоры тупо отсутствуют в наличии. За шесть лет процессоров Baikal-T было выпущено всего 50 тыс. штук, и они давно разошлись. По причине войны с Украиной Тайвань отказался производить что-либо для России. "В России нет современных производственных мощностей для выпуска процессоров."

vak: (Default)
Вчера в GCC был заслан патч, добавляющий архитектуру nanoMIPS. С некоторыми из перечисленных авторов я работал в одной команде: Matthew Fortune, Faraz Shahbazker. Три года прошло, как мы закончили эту архитектуру, отгрузили процессор I7200 и закрыли контракт с MediaTek.

"MediaTek engineers haven't mentioned why in 2021 they are working on nanoMIPS support for upstream GCC" - гадает автор статьи. А между тем модем LTE5, сделанный на процессоре I7200 от MediaTek, нынче работает в половине выпускаемых мобильных телефонов. И оно не случайно так вышло. Протокол LTE5 на порядок увеличивает пропускную способность за счёт распараллеливания. Нужны не один-два-четыре процессора, а десятки параллельно работающих ядер, чтобы обработать поток. Всё это в реальном времени и с минимальным энергопотреблением. Процессор nanoMIPS I7200 с его аппаратной многозадачностью отлично подходит для этой задачи. Остальные рядом не стояли. Не зря AMD начал прицениваться купить MediaTek на корню. Там есть предмет разговора, а именно реализация LTE5 на процессоре nanoMIPS.

Это к вопросу увидеть результаты своего труда в электронике. :)
Много лет проходит.
vak: (Default)

- Папа, из чего сделаны облака?
- Из линуксных серверов, в основном.


Говорят, больше всего удовлетворения от работы получают парикмахеры и зубные врачи. Потому что они (а) работают с людьми, (б) сразу видят результат и (в) немедленно получают положительный отзыв от клиента.

Разработчикам процессоров приходится труднее всего. Клиентов мы вообще в глаза не видим, а результаты в виде готовых продуктов появляются только через несколько лет.

Но вот случился результат, и имеет смысл ним похвастаться. Процессоры от Fungible и сетевые хранилищи на их основе заслуживают внимания.

Статья на русском: http://www.storagenews.ru/news/2020/FSC_76.pdf

Процессоры Fungible F1 DPU и Fungible S1 DPU сделаны на основе ядра MIPS I6500, в разработке которого я принимал самое активное участие несколько лет назад. Чип F1 состоит из восьми кластеров обработки данных (48 ядер MIPS-64, в сумме 192 процессорных потока) и одного управляющего кластера (4 ядра, восемь процессорных потоков). Чип S1 чуть поменьше: 16 ядер, 56 процессорных потоков. Ядра MIPS работают на частоте 1.6 ГГц. Но самая фишка вовсе не в процессорах, а в сетевой системе общей пропускной способностью 800 гигабит в секунду. Десять 100-гигабитных портов Ethernet, плюс десять 40-гигабитных, двадцать 50-гигабитных, сорок 25-гигабитных и сорок 10-гигабитных портов. Какие-то сумасшедшие цифры.



А вот готовое изделие. Это невзрачное на первый взгляд устройство представляет собой... как бы флешку. Я сильно упрощаю, конечно, но по сути это такое же средство хранения данных, как и USB-флешка. Но только в три тысячи раз быстрее и в 20 тысяч раз ёмче. Скорость чтения данных 60 Гбайт/сек (у флешки порядка 20 Мбайт/сек). Это как минимум на порядок быстрее, чем любые другие известные решения.



Конечно, это не просто флешка. Это сервер не только хранения, но и обработки данных. Специализированная операционная система реального времени позволяет молотить данные с самыми разными целями. Сетевое хранилище - только одно из возможных применений.

На видео можно посмотреть испытания этого сетевого хранилища и реальные цифры.



Глава Fungible Прадип Синду - в прошлом основатель известной фирмы Juniper Networks, на маршрутизаторах которой построены все главные магистрали интернета. Похоже, и для облаков он приготовил нам кое-что интересное. И оно гораздо прикольнее, чем линуксные сервера.

Перед тем, как устроиться на работу в SiMa.ai, я сходил на собеседование в Fungible. Весьма неплохое место. Они готовы были меня взять, и я некоторое время колебался, но всё-таки выбрал Симу. У Fungible продукт был почти на выходе, а мне больше понравилась идея начать с нуля.
vak: (Default)
Я уже писал, как за два простых шага установить и запустить Debian на плате pic32mz-da. Компиляцию U-Boot для микроконтроллера pic32 я тоже описывал. Здесь я покажу, как собрать из исходников ядро Linux, и как с нуля построить образ файловой системы Debian на карточке micro-SD.

1. Строим ядро Linux для pic32

Исходные тексты ядра Linux для микроконтроллеров семейства pic32mz-da были опубликованы фирмой Microchip а 2015 году. Я внес два небольших исправления: доработал драйвер SDHC, чтобы обойти багу с короткими обменами (описанную в Errata sheet), и добавил флаги в ядре, нужные для корректного функционирования systemd.

Вот как выглядит компиляция под Ubuntu версии 18.04. Огромное спасибо Мите Коротину, который первым прошёл этот трудный путь и показал мне все хитрости. Устанавливаем кросс-компилятор:
sudo apt-get install gcc-mips-linux-gnu
Скачиваем тексты ядра Linux, с правками для PIC32:
git clone https://github.com/sergev/linux-pic32.git
Конфигурируем и собираем. Здесь я предполагаю, что в каталоге u-boot-pic32 находится U-Boot, готовый и собранный для pic32. Нам от него понадобится утилита mkimage:
cd linux-pic32
make ARCH=mips CROSS_COMPILE=mips-linux-gnu- pic32mzda_defconfig
make ARCH=mips CROSS_COMPILE=mips-linux-gnu-
gzip -9 < arch/mips/boot/vmlinux.bin > arch/mips/boot/vmlinux.bin.gz
../u-boot-pic32/tools/mkimage -A MIPS -a 0x88000000 -e 0x88000400 -d arch/mips/boot/vmlinux.bin.gz arch/mips/boot/vmlinux-pic32
mkdir -p ../boot
cp -a arch/mips/boot/uImage ../boot/vmlinux-pic32
cp -a arch/mips/boot/dts/pic32/pic32mzda_sk.dtb ../boot/pic32mzda.dtb
В результате мы имеем в папке boot бинарное ядро и дерево устройств, которое надо будет поместить в папку /boot файловой системы на SD-карточке.

Собираем загружаемые модули:
make ARCH=mips CROSS_COMPILE=mips-linux-gnu- INSTALL_MOD_PATH=$PWD/.. modules_install
Содержимое папки lib/modules/ надо будет скопировать в /lib/modules на SD-карточке.

2. Собираем файловую систему Debian для mips32

vak: (Default)
Шаг 1: U-Boot

Скачайте u-boot-pic32.zip и извлеките из него файл u-boot-pic32.hex. Прошейте его в плату с помощью MPLAB X. Или используйте один из прилагающихся скриптов для прошивки из командной строки. При необходимости U-Boot можно собрать из исходников: подробности смотрите в моём предыдущем посте.

Подключитесь к консольному порту платы на скорости 115200. При старте вы будете видеть общую информацию о плате:
U-Boot 2015.07-00021-g893592104d (Oct 29 2019 - 18:34:01 -0700)

Board: PIC32MZ[DA]
CPU Speed: 200 MHz
SPI: ready
DRAM: 32 MiB
Flash: 2 MiB
MMC: pic32-sdhci: 0
In: serial
Out: serial
Err: serial
Net: pic32_eth
Error: pic32_eth address not set.

Hit any key to stop autoboot: 0
dask # _
Жмите <Enter> чтобы остановить автоматическую загрузку и получить приглашение "dask #".

Нужно задать и записать в постоянную память команды для загрузки ядра Линукса и карты устройств:
setenv bootargs "root=/dev/mmcblk0p1 console=ttyS1,115200 rootwait"
setenv bootcmd "ext4load mmc 0:1 0x88500000 /boot/vmlinux-pic32 ; ext4load mmc 0:1 0x88C00000 /boot/pic32mzda.dtb ; bootm 0x88500000 - 0x88C00000"
saveenv
Всё, U-Boot готов грузить Линукс с карточки.

Шаг 2: SD-карточка

Скачайте файл pic32fs-minimal.zip и запишите на 8-гигабайтную карточку micro-SD с помощью balenaEtcher или аналогичного софта. Карточки большего размера тоже годятся.

Шаг 3: Запускаем Линукс

Вставьте карточку в плату и на приглашение загрузчика "dask #" введите "boot". Или передёрните питание и подождите пять секунд, загрузка начнётся автоматически. Вы увидите примерно такой протокол: boot-debian-pic32mz-dar169.log

Входите под именем "root" с паролем "mips".

Файловая система содержит минимальную конфигурацию Debian. Чтобы обновить или установить дополнительный софт, подключите кабель Ethernet и используйте команды apt или apt-get:
apt-get update
apt-get upgrade
apt-get install bsdgames
vak: (Default)
Спросили меня тут недавно, как приспособить дебаггер GDB для отладки софта на микроконтроллере PIC32. Подготовил краткий обзор.

Вам понадобится:
  • Компьютер с установленныи Линуксом. В принципе, всё то же самое можно проделать на Маке или на Windows, но мне с Линуксом удобнее.
  • Плата chipKIT Wi-Fire с каким-нибудь приложением. В качестве примера я задействую ядро опреационной системы LiteBSD, прошитое во Flash-память микроконтроллера, с файловой системой на карточке micro-SD.
  • Bus Blaster for MIPS для подключения к отладочному порту EJTAG через USB.
  • Два кабеля мини-USB, для подключения плат Wi-Fire и Bus Blaster к линуксному компьютеру.
  • Бинарник GDB из пакета MIPS Codescape GNU Toolchain, MTI Bare Metal release.

1. Подсоединяем Bus Blaster к отладочному порту

Подключите Bus Blaster через плоский кабель и переходник 14-на-6 контактов к разъёму JTAG платы Wi-Fire.



2. Втыкаем кабели USB

Подключите кабели мини-USB cables к Вашему линуксному компьютеру. Устройства должны быть видны как:
$ lsusb
Bus 002 Device 040: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 002 Device 041: ID 0403:6010 Future Technology Devices International, Ltd FT2232C Dual USB-UART/FIFO IC

3. Запускаем отлаживаемое приложение

В этом примере, мы входим в LiteBSD на PIC32 и запускаем утилиту vmstat.
Консольный порт доступен как /dev/ttyUSB0, со скоростью 115200 бит/сек:
$ kermit -c -l /dev/ttyUSB0 -b 115200

4.4BSD-Lite (bsd.net) (console)

login: root
/root # vmstat 1
procs --memory--- ---------page---------- disk ---faults--- --cpu---
r b w avm fre flt re pi po fr sr sd0 in sy cs us sy id
0 0 0 12968 16 294 15 84 25 0 110 143 104 150 289 17 18 64
0 0 0 12972 20 8 1 4 2 0 8 3 129 19 21 0 1 99
...

4. Запускаем ejtagproxy

Создайте новое окно терминала в Линуксе и запустите в нём утилиту ejtagproxy. Она создает TCP-порт с номером 2000 и ждёт подключения отладчика GDB:
$ ejtagproxy
GDB proxy for Microchip PIC32 processors, Version 1.0.34
...
ejtagproxy: waiting on TCP port 2000
Утилита ejtagroxy будет перенаправлять запросы от GDB через Bus Blaster к отлаживаемому микроконтроллеру PIC32.

5. Стартуем отладчик GDB

В случае, если у Вас имеется бинарный ELF-файл Вашего приложения - используйте его при запуске GDB. Без него отладчик не будет иметь представления об именах и адресах в Вашей программе, и все имена функций будут печататься как '??'.

Здесь я использую 'vmunix.elf', бинарный файл ядра LiteBSD.
$ mips-mti-elf-gdb vmunix.elf
GNU gdb (Codescape GNU Tools 2019.02-01 for MIPS MTI Bare Metal) 7.9.1
...
Reading symbols from vmunix.elf...done.
(gdb) _
GDB стартовал, но пока не соединился с отлаживаемой платой.

Подключимся, но сначала сообщим отладчику "остроконечность" нашего процессора, а также количество реализованных в аппаратуре точек останова и контроля данных. Эти значения можно узнать из документации на микроконтроллер PIC32:
(gdb) set endian little
The target is assumed to be little endian
(gdb) set remote hardware-breakpoint-limit 6
(gdb) set remote hardware-watchpoint-limit 2
(gdb) target remote localhost:2000
Remote debugging using localhost:2000
0x9d00197c in idle ()
(gdb) _
Отладчик подключился и остановил выполнение программы на процессоре PIC32.
В окошке ejtagproxy Вы можете видеть информацию об аппаратуре:
ejtagproxy: connected
adapter: Dangerous Prototypes Bus Blaster, id 0403:6010
processor: Microchip PIC32MZ2048ECG100
processor: reset occured
hardware: 8 breakpoints, 4 watchpoints
oscillator: internal Fast RC
Продолжим выполнение приложения:
(gdb) c
Continuing.
Чтобы остановить программу, нажмите ^C:
^C
Program received signal SIGTRAP, Trace/breakpoint trap.
0x9d00197c in idle ()
(gdb) _
Сделаем несколько шагов по одной машинной команде, и напечатаем текущую команду:
(gdb) si
0x9d000200 in _interrupt_vector ()
(gdb) si
0x9d000204 in _interrupt_vector ()
(gdb) si
0x9d000208 in _interrupt_vector ()
(gdb) si
0x9d000210 in _interrupt_vector ()
(gdb) x/i $pc
=> 0x9d000210 <_interrupt_vector+16>: j 0x9d000468 <kern_interrupt>
0x9d000214 <_interrupt_vector+20>: nop
(gdb) _
Посмотрим содержимое машинных регистров:
(gdb) i reg
zero at v0 v1 a0 a1 a2 a3
R0 00000000 a0000000 00000000 00004bbb c0106000 00000800 591b9a64 00000000
t0 t1 t2 t3 t4 t5 t6 t7
R8 00000000 00000000 00004bbc 00000000 00000000 00000000 00000000 00000000
s0 s1 s2 s3 s4 s5 s6 s7
R16 c0106000 00000001 c010e600 00000000 a0000878 c0106100 00412c9c 00410000
t8 t9 k0 k1 gp sp s8 ra
R24 00000001 00000000 00000000 9d00197c a0000000 ffffdf00 00410000 9d00b074
sr lo hi bad cause pc
00000003 851f6cb8 0000ce2b c010a509 40801800 9d000210
(gdb) _
Опять продолжим выполнение:
(gdb) c
Continuing.
И так далее.
vak: (Default)
Процедура установки: debian-mips64el-on-qemu

Протокол загрузки и информация об аппаратной конфигурации: protocol-debian-mips64el

Дерево устройств: device-tree-mips64el-on-qemu
vak: (Default)
Оказывается, народ уже успешно затащил операционную систему FreeBSD на плату Omega.



Omega это такая миниатюрная плата для IoT с процессором MIPS 600МГц и WiFi. Как бы старший брат ESP32.

Инструкция по установке здесь: https://github.com/freebsd/freebsd-wifi-build/wiki/Onion-Omega
vak: (Default)
Некоторое время назад MIPS выпустил операционную систему MEOS в открытое плавание со свободной лицензией типа BSD. Исходники выложены на Github: https://github.com/MIPS/meos

OSZAR »