---
# System prepended metadata

title: Лабораторная работа № 2

---

# Лабораторная работа № 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
```

Повторите данные действия несколько раз.