ARINC653操作系统的学习教程
arinc653学习教程
前言
在车企和航空领域都呆过,感觉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
更多推荐



所有评论(0)