前言

在车企和航空领域都呆过,感觉autosar、arinc653这些操作系统,其实都是封装了传统的rtos,方便应用层调用,所以在学653之前,建议先学ucosii。

问了好多家ai,学arinc653都建议先学pok,可惜我鼓捣了半天,发现github仓库里的issue问题没有解决,example里,只有不基于aadl的几个例子能跑,不方便初学者。仓库不再更新维护了,但是使用的工具orcaina还在更新,二者不兼容了。

在github上搜索,arinc653,按星星排名,惊喜地发现了某位大佬的仓库jrinx:risc-v是在大力发展的国产芯片,仓库里注释也都是中文的,说明了国产化的大潮流啊,很有好感,很多人在做国产化的事情,未来学习会越来越方便,不再老是对着一堆英文苦恼了。更新时间很近,也许大家提问题,不会像pok那样得不到解决。

里面的安装教程面面俱到,本来我不该赘述的,不过安装编译运行调试的过程中估计可能还会有环境的问题,因此写了这篇博客,记录安装过程。

ps:仓库地址
https://github.com/Jrinx/Jrinx.git

git@github.com:Jrinx/Jrinx.git

如果你没法科学上网,可以先导入到gitee (本质是gitee访问github)

https://gitee.com/wangchuan12137/Jrinx

目标

导出包含所有运行环境的虚拟机供其他同学学习使用,在最新的vmware直接导入即可

作者提供了两种方式,readme是自己安装需要的环境,issue里提到了docker,在docker网站搜索,镜像确实存在,但需要科学上网,还是麻烦。

我打算在自己的电脑上从头安装最新的vmware,ubuntu22.04 (不装最新的,一是因为jrinx仓库是23年的,二是因为航空领域使用稳定的比较老的操作系统,windows、vmware、ubuntu版本都比较低),安装docker,运行一个多分区切换运行的例子,能调试,单步和观察变量,修改编译后,能看到运行效果。

所以推荐的学习路径是,先jrinx(参考arinc653的标准,把各个接口的例子快速跑一遍),后pok(资料多点)。

把整个ubuntu22.04上传到csdn,所以大家可以直接在vmware中导入我的虚拟机,然后就可以开始直接学习了。

过一段时间,会更新进一步的虚拟机,如果能解决pok的aadl例子无法运行的问题,思路就是用aadl生成代码,然后将应用层代码移植到pok中不基于aadl的例子里,这样大家最后可以得到两个可以直接跑起来的学习资源。

ps:虚拟机给别人用有两种方式,一是导出,二是整个文件夹拷贝,我会导出两个版本———vmware17.4,和我工作电脑使用的版本,如果需要别的版本,可以评论一下。

vmware安装教程

获取安装包

最新版免费了,不需要破解了
官网里点击products/see desktop hypervisors

点击download now,会要求你注册,注册完成之后,注意页面上的一个通知,点击here,选择wordstation pro下载,下载速度非常快

安装注意

 参考这个博客:
VMware安装虚拟机(超简单!!超级详细!!)_vmware虚拟机-CSDN博客

1 以管理员身份运行安装包(我猜测,不用管理员,有的软件安装过程中,会弹窗要求你授权,跟手机一样)

2安装路径默认吧,改了后弹出个告警,不知道啥影响

ubuntu安装教程

获取安装包

在官网搜 ubuntu 22,点击desktop image,10分钟,也很快

安装注意

参考这个博客:

基于VMware虚拟机的Ubuntu22.04系统安装和配置(新手保姆级教程)_虚拟机ubuntu22.04安装教程-CSDN博客

1用通用的名字,避免大家有强迫症,所有密码都是1

2 Ubuntu22  D:\File\Ubuntu22

3网络选择NAT模式

嵌入式不需要桥接,每次ip不固定,vscode用ssh连接不方便

4 40G是因为编译pok要安装很多工具,立即分配是因为反正要用到不如先分配了,单个文件说是读写快一丢丢

5 我还是选CHINESE,其实进去后也还是英文,需要进一步修改才是中文

6 选最小安装

7 默认打开终端,user@machine,这样提示词短一点,我一般喜欢su root,所有代码都放在root的家目录,密码还是1,以前用wsl时就喜欢用root登录。

8 设置root密码,切换到root,后面所有命令都不需要加sudo

9 暂时所有的命令只能手打,步骤六七八九跳过,走我下面的教程即可,都是对ubuntu的一些配置

我发现nat模式,我的电脑换不同的wifi,虚拟机的ip地址也是固定的,所以可以跳过。

10拍摄一个快照,这个算刚刚安装成功,且换源和更新。

(虚拟机有个坑,如果你想扩容,就得删掉所有快照,所以一开始设置为40GB,应该够用了。)

复制粘贴

apt install open-vm-tools open-vm-tools-desktop

windows复制->linux粘贴:

ctrl+c -> shift+insert (shift+fn+insert)

linux复制->windows粘贴:

ctrl+insert(ctrl+fn+insert)->ctrl+v

修改文件

一般双击打开系统文件,都是只读的

在命令行修改又有点麻烦

sudo nano /etc/ssh/sshd_config

用管理员身份打开文本编辑器

sudo gedit /etc/ssh/sshd_config

docker

安装docker

参考这个博客:
【Docker】在 Ubuntu 22.04 以下版本上安装 Docker 的详细指南_ubuntu 安装docker-CSDN博客

1 会报错,要换成国内的镜像源,一般遇到问题,直接复制丢给ai就可以了

# 安装依赖
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

# 添加阿里云 Docker 镜像源
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 添加软件源
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

2再安装docker

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

3验证

sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
newgrp docker
docker --version
sudo systemctl status docker
docker run hello-world

run hello-world失败,docker去pull hello-world也失败了,需要在虚拟机里也实现科学上网


5需要科学上网,才能用docker获取镜像。验证hello-world的拉取和运行。

获取ARINC653操作系统——jrinx

1 拉取jrinx镜像,默认存放于/var/lib/docker/,多个分散的文件,不过可以完整的导出

docker pull coekjan/jrinx-devel:latest

2 进入到jrinx工作目录

3 jrinx目录映射到容器的workdir,运行容器

容器尽量把你需要的东西都打包好,但是如果还需要别的东西呢,就放到pro/jrinx目录下

最终我们在容器内的运行环境就是本身自带的文件+映射目录中的文件

退出容器后,对映射目录的修改依然存在,方便我们下次调用

docker run -v /root/pro/jrinx:/workdir -w /workdir --rm -it coekjan/jrinx-devel:latest /bin/bash

我们在容器内的运行环境就是本身自带的文件+映射目录中的文件:

1所有二进制工具,容器里都帮我们准备好了

2源代码需要去github或gitee里下载,然后拿到容器里去编译和运行

那可以直接在pro目录下,git clone

然后把pro目录映射成容器里的/pro/git-clone-仓库

编程环境

git

1 将https://github.com/Jrinx/Jrinx.git导入到自己的gitee仓库,

2 在ssh下载方式中,按网页教程配置公钥

3 删除之前测试的jrinx文件夹,然后在pro目录下克隆仓库

ssh

ai搜索,vscode如何用ssh远程连接nat模式的ubuntu

后面在windows的vscode里编辑完代码后,在ubuntu里启动docker编译运行。

一般不允许root用户使用ssh连接

ssh user@192.168.127.128 -p 22

ssh root@192.168.127.128 -p 22

可以修改配置文件

sudo gedit /etc/ssh/sshd_config

在#PermitRootLogin prohibit-password下方插入一行,PermitRootLogin yes

重启ssh

sudo systemctl restart ssh

docker

docker run -v /root/pro/Jrinx:/workdir -w /workdir --rm -it coekjan/jrinx-devel:latest /bin/bash

编译

1 如果是手动安装需要的所有环境,那么在vscode里,直接make就可以

   但是我们是安装了docker,所以需要在docker里编译

make run 或者 make run SYSCONF=./sys-conf/ping-pong.yml都报错了,需要先拉取opensbi

同样的方法,先导入到gitee,后git clone

(标准说法,一个仓库里包含另一个仓库,叫子模块,应该用git submodule init +git submodule update)

#没有这一步,会报错找不到编译器,参考https://github.com/Jrinx/Jrinx/issues/1
export CROSS_COMPILE=riscv64-linux-gnu-

#以调试模式构建 Jrinx,参考README.md
make

#克隆子模块
git submodule init
git submodule update

#运行,直接make run会报错init.c,参考https://github.com/Jrinx/Jrinx/issues/3
make run SYSCONF=./sys-conf/ping-pong.yml

运行结果:

修改后再次运行

很多时候,嵌入式调试都是不方便的,一般直接修改然后运行(复杂的逻辑可以先在mingw或qemu里模拟运行)

1修改打印 + [chuan]

2 make

3 make run SYSCONF=./sys-conf/ping-pong.yml

调试和代码分析

1 make的时候,已经把所有分区配置(yml)对应的app文件都编译好了

2 make run的时候,根据参数不同,加载(init.c)不同的分区并运行(注意此时已经没有编译过程了)

make run SYSCONF=./sys-conf/ping-pong.yml

make run SYSCONF=./sys-conf/put-a-b-multi-part.yml

单步调试(有坑待解决)

docker里好像没有gdb,需要先在vscode安装,即在宿主机/ubuntu里安装

apt install make
 
apt-get install -y gdb-multiarch

ctrl +alt +t 重新打开终端
su root

cd ~/pro/Jrinx

!!!!!!!!需要把虚拟机的1234端口,映射到docker的1234端口

docker run -p 1234:1234 -v /root/pro/Jrinx:/workdir -w /workdir --rm -it coekjan/jrinx-devel:latest /bin/bash

export CROSS_COMPILE=riscv64-linux-gnu-

make dbg SYSCONF=./sys-conf/put-a-b-multi-part.yml

make dbg SYSCONF=./sys-conf/ping-pong.yml

make dbg SYSCONF=./sys-conf/put-a-b-multi-part.yml

make gdb

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐