# Лабораторная работа № 2 # Исследование процессорной архитектуры RISC_V на основе микропроцессорного модуля BL808 Цели работы: 1. Исследование процессорной архитектуры RISC_V 2. Исследование аппаратного таймера процессора 3. Интеграция пользовательского модуля низкоресурсного криптографического алгоритма Данная лабораторная работы выполняется на основе процессорного модуля M1s DOCK установленного на плате. ### 1. Подготовка к работе <div style="text-align: justify "> На данном шаге будет выполнена компиляция и загрузка образа ОС Linux на носитель в виде microSD Для выполнения работы Вам потребуется аппаратное обеспечение в виде процессорного модуля M1s DOCK и набора соединительных кабелей USB type C. 1.1 Для загрузки управляющей микропрограммы (УМП) ("прошивки") потребуется установить программное обеспечение - система сборки пакетов - buildroot и тулчейн от производителя - Sipeed. Загрузите программное обеспечение - DevCube с официального сайта или возьмите из репозитория проекта: http://dev.bouffalolab.com/download </div> 1.1.1 Загрузите комплект программного обеспечения с сервера производителя. ```bash mkdir buildroot_bouffalo && cd buildroot_bouffalo git clone https://github.com/buildroot/buildroot git clone https://github.com/openbouffalo/buildroot_bouffalo export BR_BOUFFALO_OVERLAY_PATH=$(pwd)/buildroot_bouffalo cd buildroot ``` 1.2 Осуществите сборку. Сборка выполняется в однопоточном режиме ```bash make BR2_EXTERNAL=$BR_BOUFFALO_OVERLAY_PATH pine64_ox64_defconfig make -j1 ``` Если на этапе компиляции не произошло никаких ошибок, то в директории `output/` появятся собранные файлы. - m0_lowload_bl808_m0.bin - d0_lowload_bl808_d0.bin - bl808-firmware.bin - sdcard-*.tar.xz 1.3 Осуществите настройку среды DevCube и укажите системные файлы, которые будут загружены Загрузка УМП осуществляется следующим способом: 1) Запустите программу DevCube, что у нее есть доступ к последовательному порту (UART). Рекомендуется запускать программу с правами суперпользователя - `sudo`. 2) Подключить Sipeed через Type-C к компьютеру. 3) Нажмите и удерживайте кнопу BOOT на процессорному модуле M1s DOCK, подключите питание с помощью второго разъема Type-C и отпустите кнопку BOOT. 4) В программе DevCube выберите виртуальный файл устройства для загрузки УМК. Выберите устройство`/dev/ttyAM1`, установите скорость обмена данными (baudrate) 2000000; 5) Перейти на вкладку MCU. 6) В пункте M0 Group[Group0] Image Addr [0x58000000] [Путь до m0_lowload_bl808_m0.bin] укажите путь полученный на шаге 1.2 8) В пункте D0 Group[Group0] Image Addr [0x58100000] [Путь до d0_lowload_bl808_d0.bin] укажите путь полученный на шаге 1.3. 9) Нажмите Create & Download 10) Перейдите на вкладку IOT 11) Выберите пункты 'Single Download', выставите адрес 0x800000, выберете бинарный файл УМП [bl808-firmware.bin] 12) Нажмите Create & Download 13) Загрузите упакованное ядро ОС Linux с УМП sdcard-*.tar.xz на SD карту памяти. Данное действие возможно организовать при помощи инструкции `dd`. Пример ```bash sudo dd if=sdcard.tar.gz of=/dev/sdb ``` 13) Вставьте карту памяти microSD в процессорный модуль и нажмите кнопку RST. 14) Откройте последовательный порт UART через виртуальный файл устройства `/dev/ttyAM0` со скоростью обмена (baudrate) 2000000. Например ```bash $ sudo minicom -D /dev/ttyAM0 -d 2000000 ``` 15) При запуске ОС загрузчик предложит выбрать ядро: Pine64 или Sipeed. Выберите Sipeed нажав соответсвующий кнопку. ### Вероятные проблемы В текущем загрузчике u-boot некорректно работает драйвер для mmc, поэтому чтение с SD карты может быть затруднено. Решение проблемы Выполните нижеуказанные действия в командной строке u-boot. Для этого нажмите любую кнопку на процессорном модуле и дождитесь появления загрузчика GRUB. ``` bash => mmc rescan => run bootcmd_mmc0 ``` Возможно, потребуется несколько попыток. С какой-то попытки должно получится. Команда технической поддержки Siped подтверждает проблемы в работе модуля mmc # Работа с модулем <div style="text-align: justify "> Перейдите в каталог с файлом сборки `./Makefile` и под каталог `./lkm/Makefile` необходимо корректно указать пути до тулчейна с образа ОС. Тулчейн и образ ОС был получен на прошлом шаге </div> Выполните ```bash= make target ``` <div style="text-align: justify "> Установите карту памяти в модуль и нажмите сброс. На карте памяти будет 3 раздела, смонтируйте третий раздел в директорию `/root/`. Скопируйте `lkm/hello.ko` и `userspace/hello` при помощи следующих инструкции: </div> ```bash sudo mount /dev/sdb3 /mnt2 sudo cp lkm/hello.ko userspace/hello /mnt2/root sync ``` # Возможные проблемы при работе с картой памяти <div style="text-align: justify "> Из-за ошибок в работе модуля может потребоваться несколько раз повторить нижеуказанные шаги. При перезапуске процессорного модуля кнопкой `reset` запустится загрузчик `grobe`, который запустит ОС через 5 секунд. При запуске модуля нажмите любую кнопку, после этого появиться консоль загрузчика. В загрузчике выполните повторное сканирование и запуск основного загрузчика. ``` => mmc rescan => bootcmd_mmc0 ``` Повторите данные действия несколько раз.