Nuttx在riscv的qemu上的运行经验1.前言2.环境准备2.1安装riscv32交叉编译工具链2.2安装qemu 2.3获取Nuttx源代码2.4安装kconfig-frontends 3.编译并运行3.1编译3.2运行3.3调试4总结1前言在引入Ali OS,华为的宏梦OS,腾讯的TencentOStiny之后,小米还高调推出了小米Vela。所有主要的互联网公司都在制作自己的IoT操作系统,并且IoT操作系统呈现出百花齐放的趋势。本文主要讨论Nuttx的使用。 11月5日,在小米开发者大会(MIDC2020)上,小米Vela正式发布。小米物联网平台部门总经理兼AIoT战略委员会主席范殿安在新闻发布会上介绍说:“ Xiaomi Vela是基于开源嵌入式操作系统NuttX的物联网软件平台。” NuttX是Gregoy Nutt在2007年发布的实时平台。嵌入式操作系统在发布之初就没有Linux那样快。但是,由于NuttX在设计之初就被设计为考虑与更广泛使用的Linux的兼容性以及对POSIX的原生支持,所以在过去的几年中,我们看到Sony,三星和其他主要制造商加入了这一阵营。本文主要介绍nutcx在riscv32的qemu上的编译和执行过程。 2.该环境已准备好在Ubuntu20.04平台上编译并运行。 2.1安装riscv32交叉编译工具链InstallRISC-Vtoolchains $ gitclone--recursivehttps://github.com/riscv/riscv-gnu-toolchain国内下载地址,每天更新一次#gitclone--recursivegit@gitee.com:mirrors / riscv- gnu-toolchain.git $ cdriscv-gnu-toolchain / $ mkdirbuild&& cdbuild $ .. / configure--prefix = / opt / riscv--enable-multilib $ sudomake $ exportPATH = $ PATH:/ opt / riscv / bin编译和下载过程非常慢,您可以下载直接编译的https://www.sifive.com/software,然后导入环境变量exportPATH = / xxxx / riscv64-unknown-elf-gcc-8.3.0-2020.04.0 -x86_64-linux-设置ubuntu14 / bin /:$ PATH后,它可以在此终端中生效。 2.2安装qemu首先需要下载qemu,可以从qemu的官方网站下载。 https://www.qemu.org/可以选择要下载的最新版本。解压缩后,输入qemu-5.2 $。/ configure--target-list = riscv32-softmmu $ make $ sudomakeinstall,您可以输入qemu-system-riscv32--version验证是否成功。 2.3获取Nuttx源代码$ gitclonehttps://github.com/apache/incubator-nuttx.gitnuttx$gitclonehttps://github.com/apache/incubator-nuttx-apps.gitapps$gitclonehttps:// starcat-io @ bitbucket。 org / nuttx / tools.gittools可以下载上述三个存储库的代码。 2.4安装kconfig-frontends首先进入工具目录,然后进行配置和安装。 $ cd $ {CURDIR} / tools / kconfig-frontends $。/ configure--enable-mconf--disable-nconf--disable-gconf--disable-qconf $ make $ sudomakeinstall配置完成后,将进行以下编译和可以执行操作。 3.编译并运行3.1要进行编译,请首先进入nuttx目录,然后输入./tools/configure.shhifive1-revb:nsh。输入makemenuconfig以输入配置并选择开发板。将发生以下错误。加载共享库时出错:libkconfig-parser-4.11.0.so:无法打开共享目标文件:Nosuchfile或目录解决方案sudovim / etc / ld.so.conf如图所示,在include / usr / local / lib下添加一行,然后执行sudoldconfigmakemenuconfig选择FE310_QEMU开发平台。选择完成后,输入make开始编译,编译完成。 3.2进入nuttx目录,输入qemu-system-riscv32-nographic-machinesifive_e-kernel./nuttx,可以看到有一个类似于Linux的设备描述节点。 3.3您可以输入以下命令进行调试。 qemu-system-riscv32-nographic-machinesifive_e-kernel./nuttx-s-S主要关注-s-S。只需打开一个终端。 riscv64-unknown-elf-gdbnuttx 4.总结Nuttx是物联网系统,其特点是与Linux兼容并支持本机posix接口。这对使用Linux的人非常友好。通过初步阅读此代码,系统功能十分强大。对于rtos,实时性非常重要。实时指示器不仅是快速响应,而且是可预测的时间,也就是说,预制程序执行的下一个过程需要时间确定性。对于物联网操作系统,硬实时性能不是最关键的,对应用程序和程序的兼容性,强大的可移植性则更为关键。 nuttx系统的兼容性与Linux很好地结合在一起。