Как собрать и запустить Linux на процессоре Kendryte K210 RISC-V NOMMU


Несколько месяцев назад мы писали, что 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.

Оригинал статьи вы можете прочитать здесь.

0 0 vote
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Inline Feedbacks
View all comments