Несколько месяцев назад мы писали, что Western Digital работает над поддержкой Linux и BusyBox RISC-V NOMMU, и ей удалось загрузить минимально возможную ОС Linux на плате Sipeed Maix Go с процессором Kendryte K210.
Поддержка RISC-V NOMMU была запланирована для версии Linux 5.5, и теперь, когда новое ядро было выпущено, Дэмиен Ле Моал (Damien Le Moal) разработал код, позволяющий создавать Linux и busybox на базе 64-битных платформ RISC-V NOMMU с использованием buildroot.
Мы могли бы начать сборку, следуя инструкциям на Github, но нам это не удалось, так как отсутствовал tarball Linux 5.6 RC1. Мы обратили внимание на то, что «Vowstart» подхватил работу Дэмиена и написал подробные инструкции. Итак, давайте попробуем выполнить сборку на устройстве с Ubuntu 18.04.
Сначала мы должны убедиться, что установлены зависимости:
sudo apt install build - essential device - tree - compiler bison \
flex file git curl wget cpio python unzip rsync bc texinfo
Затем мы можем получить исходный код и сделать некоторые приготовления (например, извлечь tarball Linux 5.6 RC1):
git clone https : // github .com / vowstar / k210 - linux - nommu .git
cd k210 - linux - nommu
export PROJ_ROOT = $ ( pwd )
sh . / prepare_buildroot .sh
Следующим шагом является создание набора инструментов. Это займет много времени, потому что есть много кодов для сборки и загрузки из Интернета:
cd "$PROJ_ROOT/riscv64-nommu-buildroot"
make riscv64_nommu_defconfig
make - j8
Этот шаг выполнен успешно:
mkdir - p / home / jaufranc / edev / Kendryte / k210 - linux - nommu / riscv64 - nommu - buildroot / output / target / etc
( \
echo "NAME=Buildroot" ; \
echo "VERSION=2020.02-git-g6cb52b1e6" ; \
echo "ID=buildroot" ; \
echo "VERSION_ID=2020.02-git" ; \
echo "PRETTY_NAME=\"Buildroot 2020.02-git\"" \
) > / home / jaufranc / edev / Kendryte / k210 - linux - nommu / riscv64 - nommu - buildroot / output / target / usr / lib / os - release
ln - sf . . / usr / lib / os - release / home / jaufranc / edev / Kendryte / k210 - linux - nommu / riscv64 - nommu - buildroot / output / target / etc
> > > Sanitizing RPATH in target tree
PER_PACKAGE_DIR =/ home / jaufranc / edev / Kendryte / k210 - linux - nommu / riscv64 - nommu - buildroot / output / per - package / home / jaufranc / edev / Kendryte / k210 - linux - nommu / riscv64 - nommu - buildroot / support / scripts / fix - rpath target
touch / home / jaufranc / edev / Kendryte / k210 - linux - nommu / riscv64 - nommu - buildroot / output / target / usr
Теперь мы можем установить набор инструментов RISCV64, который будет использоваться для кросс-компиляции:
sudo cp - r output / host / opt / riscv64 - uclibc
export PATH =/ opt / riscv64 - uclibc / bin : $ PATH
Далее идет сборка buildroot для процессора Kendryte K210 NOMMU:
cd "$PROJ_ROOT/busybox"
make k210_nommu_defconfig
make SKIP_STRIP = y
make SKIP_STRIP = y install
Последний шаг — копируем файл в папку $PROJ_ROOT/rootfs_k210
.
Они также решили собрать Tiny C Compiler, чтобы иметь возможность создавать код на самой плате. В этом нет необходимости, так как на таком недорогом оборудовании большинство людей, скорее всего, предпочтут вместо этого кросс-компилировать свой код, но в любом случае давайте продолжим:
cd "$PROJ_ROOT/tinycc"
. / configure -- prefix =/ usr -- cross - prefix = riscv64 - linux - -- cpu = riscv64 -- extra - cflags = "-DCONFIG_TCC_STATIC=1" -- extra - ldflags =- Wl , - elf2flt =- r
make
make DESTDIR = . . / rootfs_k210 install
Они также создали скрипт для установки и копирования образа CPIO rootfs k210 в linux-kernel/k210.cpio
.
< span class = "pl-c1" > cd < / span > < span class = "pl-smi" > $ PROJ_ROOT < / span >
sh . / prepare_k210_cpio .sh
Теперь мы можем наконец собрать ядро Linux 5.6-RC1:
cd "$PROJ_ROOT/linux-kernel"
make ARCH = riscv CROSS_COMPILE = riscv64 - linux - nommu_k210_defconfig
make ARCH = riscv CROSS_COMPILE = riscv64 - linux - - j
У нас нет под рукой платы Sipeed MAIX, поэтому мы не пробовали эту часть, но вы можете сохранить получившейся образ следующим образом, если ваша плата подключена через / dev / ttyUSB:
sudo usermod - a - G uucp $ ( whoami )
sudo usermod - a - G dialout $ ( whoami )
sudo python3 - m pip install kflash
kflash - B dan - b 3000000 - p / dev / ttyUSB0 arch / riscv / boot / loader .bin
python3 - m serial .tools .miniterm -- raw -- filter colorize / dev / ttyUSB0 115200
Первые две строки — добавить текущего пользователя в группу dialout, чтобы получить доступ к / dev / ttyUSB0 без необходимости быть пользователем root. Третья — устанавливает утилиту kflash, за которой следует команда, которая сбрасывает образ на внутреннюю флеш-память, а последняя — получить терминальный доступ к плате.

Это означает, что теперь вы можете запускать Linux на недорогом оборудовании RISC-V, таком как Sipeed MAIX Bit, которое продается примерно за 14 долларов и выше. Обратите внимание, что технически это uCLinux, вам придется работать с 8 Мб ОЗУ и решать проблемы переполнения стека, которые обычно возникают в процессорах без блока управления памятью.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.