Несколько месяцев назад мы писали, что 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.
Сначала мы должны убедиться, что установлены зависимости:
1 2 |
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):
1 2 3 4 |
git clone https : // github .com / vowstar / k210 - linux - nommu .git cd k210 - linux - nommu export PROJ_ROOT = $ ( pwd ) sh . / prepare_buildroot .sh |
Следующим шагом является создание набора инструментов. Это займет много времени, потому что есть много кодов для сборки и загрузки из Интернета:
1 2 3 |
cd "$PROJ_ROOT/riscv64-nommu-buildroot" make riscv64_nommu_defconfig make - j8 |
Этот шаг выполнен успешно:
1 2 3 4 5 6 7 8 9 10 11 12 |
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, который будет использоваться для кросс-компиляции:
1 2 |
sudo cp - r output / host / opt / riscv64 - uclibc export PATH =/ opt / riscv64 - uclibc / bin : $ PATH |
Далее идет сборка buildroot для процессора Kendryte K210 NOMMU:
1 2 3 4 |
cd "$PROJ_ROOT/busybox" make k210_nommu_defconfig make SKIP_STRIP = y make SKIP_STRIP = y install |
Последний шаг – копируем файл в папку $PROJ_ROOT/rootfs_k210
.
Они также решили собрать Tiny C Compiler, чтобы иметь возможность создавать код на самой плате. В этом нет необходимости, так как на таком недорогом оборудовании большинство людей, скорее всего, предпочтут вместо этого кросс-компилировать свой код, но в любом случае давайте продолжим:
1 2 3 4 |
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
.
1 2 |
< span class = "pl-c1" > cd < / span > < span class = "pl-smi" > $ PROJ_ROOT < / span > sh . / prepare_k210_cpio .sh |
Теперь мы можем наконец собрать ядро Linux 5.6-RC1:
1 2 3 |
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:
1 2 3 4 5 |
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.
Оригинал статьи вы можете прочитать здесь.