AUTOSAR入门-AS代码运行补充知识1

原创 thatway 那路谈OS与SoC嵌入式软件 2022-05-09 07:30

“**工欲善其事,必先利其器**  

”,AUTOSAR入门系列的一系列模块的学习都依赖于试验:
AUTOSAR入门-基于以太网诊断

,而这个试验依赖于:AUTOSAR入门-AS开源代码运行环境搭建
,搭试验环境。可能对很多人比较难上手代码进行实践
操作,这也是本文的目的,分两次
文章进行一个
引导
。先看一个图:大鱼吃小鱼
。很形象的说明了AS代码运行在什么上面:计算机硬件
-》
Windows
(安装有VituralBox
)-》
Ubuntu
(安装有qemu
)-》
AS

你可能有疑问,这些都是些啥?首先**Windows**和**Ubuntu**都是操作系统,那么**AS**也是一个操作系统,这三个名词是等价的,都是**操作系统**  

,都可以运行在独立的电路板上。但是如果没有三块电路板,我还想同时运行这三个系统怎么办?答案就在虚拟机软件

  1. 在Windows上安装VituralBox虚拟机软件后,就可以在VituralBox里面再安装一个操作系统Ubuntu,

  2. 同理在Ubuntu上安装qemu虚拟机软件后,就可以在Ubuntu里面再安装一个操作系统AS。

大鱼吃小鱼,俄罗斯套娃

0. 本篇文章主要讲些啥?

我预感到很多人对Linux不熟悉,对C语言也不熟悉,对编程也不熟悉,那么想学习代码怎么办?我感觉AS平台的代码是一个不错的编程学习入口,首先其涉及的编程知识非常全面
,比如虚拟机、git、系统编译、C语言、Python语言、RTOS、应用、驱动、网络协议栈、QT界面、文件系统
等,几乎包含了嵌入式系统
所有的软件技术,但是其又都是比较浅的应用,用到了每一部分很少很简单的一部分,所以学习起来很容易,适合作为入门

这里挑一些可能**卡壳**  

的技术做一些说明,希望帮助大家都运行起来这套AS代码
,真的没什么成本,没板子就可以学习AUTOSAR,了解汽车软件。特别是当你打起来log,移植起来代码的时候,你也可以说:Talk is cheap,show me the code!

  1. VituralBox+Ubuntu虚拟机环境搭建

    首先假定大家都有一个Windows的电脑,安装的Win10
    操作系统。Win10这个操作系统,运行在你的电脑硬件上。如果现在有一个事情需要你用Ubuntu
    操作系统去完成,比如你写了一个网络程序,客户端需要一个运行在Win10电脑,服务端需要运行在Ubuntu电脑。但是你没有两个电脑,怎么办?

    没有条件创造条件
    ,这里有个词叫模拟
    。Ubuntu运行需要硬件,那么我们用Win10来模拟一个电路板,Ubuntu需要硬件干什么事就告诉虚拟机模拟软件,虚拟机软件去做。VituralBox就是一个可以在Win10上模拟电脑硬件工具,就是虚拟机软件

什么是Ubuntu?

世界上的操作系统不止Windows,但是Windos占有量的最大的,首先有一个缺点那就是这个操作系统是**收费**  

的。所以有人就想用一个不收费的操作系统,目前最出名的就是Linux
系统,其中一个最常用的发行版就是Ubuntu
。其次Windows的代码是不开源
的,但是Linux的代码是完全公开的,所以在Linux上可以做更多的开发性代码相关的工作,特别是跟硬件有关的嵌入式开发,几乎都是在Linux下做的。这里可以理解Windows
Win10
)《--》Linux
Ubuntu
)等价关系。

具体操作:

需要我们做的就是在Win10上安装VituralBox,然后在VituralBox上再安装一个Ubuntu系统,这个可以去**CSDN**  

上搜索VituralBox+Ubuntu
安装就可以了,可以参考参考:
https://zhuanlan.zhihu.com/p/35619204

下载VituralBox和Ubuntu可以参考下面两个网址:

https://www.virtualbox.org/wiki/Downloads

http://mirrors.ustc.edu.cn/ubuntu-releases/22.04/

2. github与git

Ubuntu运行起来后,下面就是**下载代码**  

了。

首先github
是一个代码托管平台
,特别是开源代码
,需要这么一个网站,大家都能从这个网站上下载别人的开源代码。而github就是全球性的最大的源代码托管网站。主要帮助开发者存储和管理其项目源代码
,且能够追踪、记录并控制用户对其代码的修改。甚至你可以简单粗暴的把它当作一个网盘,用来存储任何东西。

我见很多**博客**  

也是在上面写的,很多写书的也在上面写,用了github托管静态网页的功能,一般网址是github.io这种的,例如:

https://autoas.github.io/as/index.html

上面说到了github上代码可以追踪、记录并控制用户对其代码的修改,这就要用到**代码版本控制软件git**  

。大家都知道软件版本会不断更新,比如版本A发展到了版本B,这个时候代码是版本B的,但是要想回到版本A的代码,这个时候就需要一个版本控制软件,可以让代码回退
到某个状态。另外还有一个重要的功能:一个项目的代码可能有很多个开发者,这样使用git建立一个代码库,大家就都可以对一份代码进行修改,进行协作开发
。所以,一般从学校刚毕业进入公司团队工作,刚开始就要学git。

这里说一个**插曲**  

,很早大家都是用svn这个版本控制软件,的确很好用,界面很友好,但是就是收费的。Linux的发明人Linus
刚开始也使用收费的版本控制软件,但是被发现
Linux
开发人员在破解收费软件,就不让开发
Linux
的人用了。本来老大
Linus
道歉下就可以,但是对这些顶级软件开发人员来说是不可能的,绝对的从技术上藐视
任何商业公司,不让我用,我就自己搞个,并且要搞一个比现在市场上能买到的更牛逼的。
Linus
花了两周
时间自己用
C
写了一个分布式版本控制系统,这就是
Git
一个月
之内,
Linux
系统的源码已经由
Git
管理了!其最大创新就是分布式
的,任何一台电脑上的
git
代码都可以是本地库,人人可以建代码库
,不用搭建服务器。

下载代码实操:

Ubuntu上安装git

sudo apt-get install git

下载代码:

mkdir as
cd as
git clone https://github.com/thatway1989/as

代码下载下来,执行ls命令可以看到

这里用到了一个tree命令,不是Ubuntu自动的,可以自己练习下怎么安装tree软件。

3. 编译工具Scons

代码下载好了,需要编译成系统bin文件,然后在硬件上运行。参考:AUTOSAR入门-AS开源代码编译过程详解

什么是编译器gcc?

不知道大家看过刘慈欣的《三体
》没。里面有一个介绍古代用人力实现了计算机,首先让很多人站在一个广场上,排列的整整齐齐,然后对第一队的人进行输入,然后在最后一队的人的状态就能得到结果。这就是计算机CPU的设计逻辑
,有一些寄存器作为输入,就可以进行计算输出。

那么输入的是什么?答:二进制机器码

有一个笑话说历史上最牛修电脑
,问你怎么把人家电脑修好了,你可以说我带了一个光盘和一个针,然后用针在光盘上一顿扎
,扎出来一个系统,安装上就好了。这个梗就是光盘是否有凹槽
代表二进制的0和1
,关键是可以用针写二进制,太牛了。现实是我们不可能写二进制代码,我们要控制电脑,需要跟电脑进行交流,就像两个物种没有共同的语言
,我们人类的语言是汉语或者英语
等,但是计算机的语言就是二进制

英语
=》二进制
,怎么转换
,这是个问题。首先是汇编语言
,就是把计算机要执行的命令进行一个抽象
,以指令
为单位进行编写。然后需要一个汇编编译器
把汇编语言翻译成机器码
。但是这样也不可能写出来一个很大的程序,因为复杂到一定程度,人搞不定了。所以汇编语言是一种低级语言,所以要用高级语言对齐进行抽象,这时候高级语言C语言诞生了。这里有一个操作系统的故事,UNIX操作系统的发明人DennisRitchie
为了写一个操作系统,而发明了C语言,见os内核入门-linux0.11诞生的故事和源码初探
。那么C语言怎么变成汇编语言,答案也是需要一个编译器把C语言变成汇编语言,进而变成机器码。具体可以参考os内核入门-linux0.11编译介绍
的过程。

可以说编译器的技术含量非常的高,其中比较出名的就是gcc
。这里要扯出来一个开源软件组织GUN
,其发起人Stallman
搞出来了
gcc,
Linus
也是用这个
GCC
做出来了
Linux
系统。

什么是Scons?

   Gcc是编译器,但是**编译的规则**  

还是要写,经常用的工具是MakeFile
,但是其还不够高级,经常需要写的MakeFile文件比较多,于是就有人搞了一个Scons
工具,可以生成MakeFile
。这从另一个角度也算是一种语言的提升
,一种抽象
。对事物进行抽象是个好方法,弊端就是抽象越高,其适用范围就越窄。比如肢体语言大家都懂,但是汉语只有中国人懂。

Scons就是AS采用的编译工具,语法直接使用了**python**  

,想学python的朋友可以多了解下Scons的脚本代码。具体参考:AUTOSAR入门-AS开源代码编译过程详解

什么是Python?

   上面说的**C语言**  

是编译成机器码后运行的,这就像你看一本外国的书,翻译成中文印刷出来
给你看了。但是你也可以对着英文说,看一行自动给你翻译一行
,看多少行翻译多少行,这就是python
,一种解释性语言,代码不参与编译,在运行的时候有python程序现翻译,这也就是执行的时候直接拿python源码就可以执行的原因。

编译工具安装实操:

sudo apt install curl scons autoconf libtool-binpython2python3-sip python3-sip-dev sip-dev python3-pip flex bison gperflibncurses-devnasm gnome-terminal gcc-arm-none-eabi libreadline-devpython3-pyqt5libcurl4-openssl-dev libgtk-3-dev pkg-config libglib2.0-dev

可以看到上面安装scons
python
,其他的都是一些辅助工具,可以自己百度查查

4. 代码编译

编译工具也安装好了,下面就是编译代码了,
执行下面命令:

cd as
scons
export BOARD=x86
export RELEASE=ascore
scons

什么是环境变量?

比如你要运行一个程序**ls**  

,查看当前目录的文件有哪些。那么操作系统怎么找到这个ls程序呢,答案就是环境变量PATH
。在Ubuntu中可以通过echo $PATH
命令查看环境变量PATH的值,可以理解为这是整个操作系统的一个全局变量
。在任何地方执行ls命令都可以访问环境变量PATH,从而找到ls这个程序的路径
,去执行。那么echo命令执行也是同样的道理去找路径。

除了PATH,程序的运行环境也可以设置一些**自定义**  

的环境变量,使用上面的export命令
进行设置,特别是设置板卡的类型
版本的类型
,在编译代码的时候到处
都要用到,这里直接设置到环境变量里面了。

执行Scons就开始了编译过程,最后会生成**TINIX.IMG**  

文件,就编译成功了

后记:

这只写了一半,代码编译完了。下一步是运行,要涉及  

qemu虚拟机。运行起来后要发包做实验,涉及到网络编程。然后调试代码要涉及到gdb调试手段,下次文章介绍。

最近有很多读者询问问题,这里可以加我微信**thatway1989**,备注**进群**。然后进一个AUTOSAR开源软件交流的群,可以**群策群力**搭环境,一起学习。  


Talk is cheap  

,show me the code
,后续会继续更新,纯干货分析,无广告,不打赏,欢迎
转载
,欢迎
评论交流

results matching ""

    No results matching ""