# Лабораторная работа № 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
```
Повторите данные действия несколько раз.