• 247查看
  • 0回复

[Autosar] AUTOSAR入门-AS平台工具命令和目录介绍

[复制链接]


该用户从未签到

发表于 3-3-2024 09:26:21 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


AUTOSAR入门-AS平台工具命令和目录介绍w1.jpg

         上一篇说了编译的过程,这里再补充介绍几个重要的scons工具命令。scons run是运行qemu虚拟机加载镜像运行的命令,scons studio是运行配置代码生成工具的命令,scons –menuconfig是配置系统宏的命令。还有一些其他命令例如acons run asone,还没来得及研究。下面一一介绍。

1.   scons run命令

执行这个命令qemu虚拟机就运行起来了,但是过程是怎样的,还是要在代码中找。scons run执行后,还是会安装根目录SConstruct文件往下执行,
objs = SConscript('SConscript',variant_dir=BDIR, duplicate=0)
在SConscript函数加载脚本的时候,会加载as.application/board.x86/SConscript在这个文件中,有如下代码:
if('run' in COMMAND_LINE_TARGETS):    qemu = Qemu()                                                                              target =  '%s/release/%s/TINIX.IMG'%(ASROOT,asenv['RELEASE'])    qemu.Run('-fda %s -boot a -m  64M'%(target))
这个run命令放board.x86里面,是因为虚拟机跟板卡的cpu类型有关系,需要根据不同的板卡组装qemu的运行命令。

      在com/as.tool/config.infrastructure.system/building.py中,有一个Qemu的类。初始化的时候ocateASQemu函数会找到qemu工具。

qemu工具为:/release/download/qemu/i386-softmmu/qemu-system-i386

如果没有找到qemu工具则会自动去github下载源码,编译出来这个qemu工具。

在qemu.Run函数中会先生成qemu.sh和telnet.sh,在as/build/posix/x86/ascore目录下。然后执行:
sudo pgrep qemu-system-x86 | xargs -i sudo kill -9 {}  //有在运行的qemu就杀死cd %s && chmod +x %s/*.sh && sudo gnome-terminal -x%s/qemu.sh
这里%s就是as/build/posix/x86/ascore目录,等效于执行:

sudo gnome-terminal -x /home/XXX/autosar/as/build/posix/x86/ascore/qemu.sh

gnome-terminal命令用于打开一个新的终端。-X是自动执行,这里不加这个-X也可以自动执行。

qemu.sh
/home/XXX/work/as/release/download/qemu/i386-softmmu/qemu-system-i386-fda /home/XXX/work/as/TINIX.IMG -boot a -m 64M -serialtcp:127.0.0.1:1104,server -net nic -net user,hostfwd=tcp::13400-:1234  -device pci-ascan -device pci-asnet -devicepci-asblk & sh /home/XXX/work/as/build/posix/x86/ascore/telnet.sh
telnet.sh
sudomodprobe vcansudo iplink add dev can0 type vcansudo iplink set up can0sudo iplink set can0 mtu 72sleep0.5telnet127.0.0.1 1104
执行的情况如下:

AUTOSAR入门-AS平台工具命令和目录介绍w2.jpg

2. scons studio启动

输入命令scons studio就会出来下面的界面:

AUTOSAR入门-AS平台工具命令和目录介绍w3.jpg

可以在界面上进行配置,保存成arxml文件,再生成Lcfg代码。

building.py中building函数里面:
if(('studio' in COMMAND_LINE_TARGETS) and (env == Env)):    studio=os.path.abspath('%s/com/as.tool/config.infrastructure.system/'%(env['ASROOT']))      assert(arxml)    pd = os.path.abspath(cfgdir)    RunCommand('cd %s && %s  studio.py %s'%(studio,env['python3'],pd))       exit(0)
studio的路径为:com/as.tool/config.infrastructure.system

cfgdir :as/build/posix/x86/ascore/config

command打印出来为:
cd /home/XXX/autosar/as/com/as.tool/config.infrastructure.system&& python3 studio.py /home/XXX/autosar/as/build/posix/x86/ascore/config

下面看studio.py
if(__name__ == '__main__'):    if(len(sys.argv)==2):                                                                           gDefault_GEN = sys.argv[1]    easySAR()
easySAR函数的定义如下:
def easySAR():                                                                                 qtApp = QApplication(sys.argv)    if(os.name == 'nt'):         qtApp.setFont(QFont('Consolas'))       elif(os.name == 'posix'):         qtApp.setFont(QFont('Monospace'))    else:        print('unKnown platform.')    qtGui = easySARGui()    qtGui.show()    qtApp.exec_()
easySARGui函数具体生成Gui,是使用了python+Qt编程,这里不具体分析了。os.name 打印出来为posix

3.scons --menuconfig启动

执行scons --menuconfig会启动配置界面。了解linux内核裁剪,应该很熟悉这个界面。

AUTOSAR入门-AS平台工具命令和目录介绍w4.jpg

代码根目录SConstruct文件中,会调用building.py里面的PrepareEnv函数,如下:
senv = PrepareEnv()PrepareBuilding(asenv)
AddOption('--menuconfig',                                                                       dest = 'menuconfig',        action = 'store_true',        default = False,        help = 'make menuconfig for  Automotive Software AS')
if(GetOption('menuconfig')):    menuconfig(env)
首先找到工具com/as.tool/kconfig-frontends/kconfig-mconf,如果没有就编译:下面来看menuconfig这个函数,也在building.py中

cd /com/as.tool/kconfig-frontends && make

然后执行cmd命令,打印出来为:
cmd=export BOARD=x86 && export ASROOT=/home/XXX/autosar/as  && rm -f .config&& /home/XXX/autosar/as/com/as.tool/kconfig-frontends/kconfig-mconf Kconfig  && cp -fv .config  /home/XXX/autosar/as/build/posix/x86/ascore/.config
然后使用kconfig-mconf工具加载根目录下Kconfig文件,出来配置界面。当我们配置保存后,会生成.config文件,最后把.config文件复制到build/posix/x86/ascore/.config目录下。首先删除代码根目录下.config文件

这里关注下根目录下Kconfig 文件
mainmenu  "Automotive Software AS Configuration"
source "$ASROOT/com/as.application/Kconfig"  source "$ASROOT/com/as.infrastructure/Kconfig"source "$ASROOT/com/as.tool/Kconfig"if !IS_ASTOOLsource "$ASROOT/release/$RELEASE/Kconfig"endif
menu "Run Time Environment"source可以引用其他Kconfig文件,例如com/as.application/Kconfig中
config RTE     bool "Run Time  Environment"    default  y if ARCH_POSIX
config RTE_SWC_TELLTALE    bool "demo telltale software component"    default y if ARCH_POSIX  && DIO     depends  on RTE
menu表示一个菜单,主界面上可以看到

AUTOSAR入门-AS平台工具命令和目录介绍w5.jpg

然后进入这个菜单可以看到两个选项

AUTOSAR入门-AS平台工具命令和目录介绍w6.jpg

可以看到bool "Run Time Environment" 显示了,bool为变量取值的类型,可为y或n

config RTE这个RTE就是变量,最后会以宏的形式在.config文件中表示这个变量,值为y或者n

demo telltale software component没有显示,是因为

depends on RTE指此菜单的出现与否依赖于另一个定义RTE,这里RTE的值

default y if ARCH_POSIX,因为ARCH_POSIX没定义,所以RTE是n,这个菜单就不显示了。

下面看下生成的.config文件
## Run Time Environment## CONFIG_RTE is not setCONFIG_COMMONXML=y
里面都是像CONFIG_COMMONXML=y这样的宏定义

最后如果build/posix/x86/ascore/.config文件有改动,会重新生成asmconfig.h ksm_cfg.h文件
if(mtime != mtime2):    GetConfig(fn,env)    cfgdir = '%s/config'%(BDIR)    MKDir(cfgdir)    xcc.XCC(cfgdir,env)
GetConfig(fn,env)中,fn就是build/posix/x86/ascore/.config
fp = open(cfg)for el in fp.readlines():    if(reOne.search(el)):        name,value =  reOne.search(el).groups()        name =  name.replace('CONFIG_','')        if(value=='y'):            env['MODULES'].append(name)        else:            if(value[0]=='"'):  value = value[1:]             if(value[-1]=='"'): value = value[:-1]            env['CONFIGS'][name]=valuefp.close()
CONFIG_ARCH_X86=y //值是y,把ARCH_X86保存到env['MODULES']name,value是获取的宏名字和值,这里比较典型的两种如下:

CONFIG_ARCH="x86" //值是字符串,把'ARCH': 'x86'保存到env['CONFIGS']中

cfgdir的值为build/posix/x86/ascore/config

xcc.XCC(cfgdir,env)在2.3中讲过,主要是生成宏到asmconfig.h文件中。

4. 代码目录分析


├── build

│   └── posix #编译后产生的临时目录

├── com

│   ├── as.application #编译的板卡类型相关配置

│   ├── as.infrastructure #Arccore开源代码

│   ├── as.tool #studio、Asone等工具

│   ├── as.virtual

│   └── SConscript #scons 脚本文件

├── Console.bat #在windows下运行的脚本文件,用于准备运行环境

├── Kconfig #kcongig文件

├── kernel.bin #编译后产生的bin文件,由autosar的代码编译而来

├── README.md #说明文件,还包括作者的一些参考网址记录

├── release

│   ├── asboot #bootloader

│   ├── ascore #示例应用程序的核心

│   ├── askar #一种RTOS

│   ├── aslinux #

│   ├── asminix #

│   ├── asslave #

│   ├── download #从网络上下载的一些工具,例如编译器、lwip组件、库文件等

│   ├── README.md #说明文件

│   ├── SConscript #scons脚本

│   └── ucos_ii #一种RTOS

├── SConscript #scons 脚本

├── SConstruct #scons 脚本

└── TINIX.IMG #编译出来的目标文件

4.1 as.application

查看as.application/SConscript里面包括三类文件:

objs += SConscript('board.%s/SConscript'%(BOARD))

objs += SConscript('common/SConscript')

objs += SConscript('swc/SConscript')

as.application/board.%s平台对应BOARD参数,如x86,stm32,mpc56等。以x86为例:board.x86


├── Kconfig #提供了板卡上芯片构架的宏定义

├── SConscript #定义了MODULES、环境变量声明、qemu参数定制、c文件编译定制

└── script

    └── linker-app.lds

as.application/common下主要是配置文件、rte文件、测试文件

├── autosar.arxml #配置工具根据这个arxml生成下面config文件夹里面Cfg配置文件

├── config #Cfg配置文件,跟BSW的代码一块参加编译,为各个模块初始化的全局变量声明

├── diagnostic.dml #AsOne工具使用

├── infrastructure.xml #内核编译使用

├── rte #rte对应C代码的基本范式

├── SConscript #scons编译工具脚本文件,定义编译那些模块

├── test #一些测试程序

└── xcp.cml #AsOne工具使用

diagnostic.dml在com/as.tool/as.one.py/asdcm.py:740中打开使用,运行AsOne工具,可以看到

AUTOSAR入门-AS平台工具命令和目录介绍w7.jpg

.dml是使用DynaScript(一种专门的动态HTML脚本语言)编写的Web脚本;包含可用于动态生成HTML的代码;可以在安装DynaScript的任何Web服务器上执行。

infrastructure.xml 在release/aslinux/automotive-message-broker/plugins/autosar/Makefile中调用

xcp.cml在com/as.tool/as.one.py/asxcp.py:397中打开使用,运行AsOne工具,可以看到

AUTOSAR入门-AS平台工具命令和目录介绍w8.jpg

as.application/swc 包含了gauge,linapp,telltale三个SWC,里面分别有一个swc.py

import autosar  这里的autosar是一个开源软件模块,代码路径在:

com/as.tool/config.infrastructure.system/third_party/autosar

github对应的网址为:https://github.com/cogu/autosar

4.2 as.infrastructure

这里面是arccore的源码,比较老一些,最新的autosar源码参考:

https://github.com/openAUTOSAR/classic-platform

4.3 as.tool

├── as.one.py #AsOne工具

├── cancasexl.access #

├── config.infrastructure.gui #仪表盘UI

├── config.infrastructure.system #工具脚本的集中存放地方,例如studio、AsOne等

├── Kconfig

├── kconfig-frontends #Kconfig工具

├── lua #can、lin驱动相关的一些代码

├── py.can.database.access #

├── qemu #qemu虚拟机相关的一些驱动

└── SConscript

4.3.1 as.one.py

python写的一个工具,集成了很多功能,例如 CAN、DoIP(以太网)或 XCP(通用校准协议)上的 BOOTLOADER、诊断通信控制(UDS iso14229)等

AUTOSAR入门-AS平台工具命令和目录介绍w9.jpg

这个工具运行在PC上,通过各种通信方式(eth、can等)可以给汽车发送报文消息,用于测试

43.3.2 config.infrastructure.system

├── argen #工具生成cfg配置文件的python脚本

├── aroil #

├── arxml #处理arxml文件的脚本,在生成配置文件中使用

├── AS.xlsm #在misc.py中引用

├── building.py #scons命令的主要执行python脚本,执行完后进行编译c文件组装目标文件

├── misc.py #

├── plugin #

├── __pycache__ #运行python后会产生,见下面解释

├── studio.py #cfg配置文件生成工具

├── third_party #包括autosar和cfile两个开源工具

└── xcc.py #根据模块MODULES生成对应的配置文件时候使用

__pycache__文件夹的意义何在呢?

因为第一次执行代码的时候,Python解释器已经把编译的字节码放在__pycache__文件夹中,这样以后再次运行的话,如果被调用的模块未发生改变,那就直接跳过编译这一步,直接去__pycache__文件夹中去运行相关的 *.pyc 文件,大大缩短了项目运行前的准备时间。

AUTOSAR入门-AS平台工具命令和目录介绍w10.jpg

4.3.3 third_party

Autosar

用来读/解析/写arxml,也包含了配置rte等方法,但内容比较少。as在此基础上做了二次开发,如asSWCGen方法。

代码地址:https://github.com/cogu/autosar

手册地址:https://autosar.readthedocs.io/en/latest/index.html

cfile python生成c代码的工具

4.3.4 lua

can驱动相关的一些代码,在AsOne工具里面会用到

4.4 release

存放C和C++发布的应用程序

4.5 支持的RTOS

AUTOSAR入门-AS平台工具命令和目录介绍w11.jpg

十余种ROTS,可以使用scons --menuconfig配置,默认为askar

askar是as的作者自己搞的一个os很强大,也可以换成freeRTOS或者freeosek。

后记:

      编译的东西到这告一段落,这部分跟编译脚本python等相关,有点乏味,想仔细研究AS代码,或者后续要修改的时候可以再看看。后续的文章将围绕网络协议栈和诊断展开,进入真正的autosar业务和c代码编程的世界。

Talk is cheap,show methe code,持续更新,纯干货分享,无广告,不打赏,欢迎转载,欢迎评论交流!

往期回顾:

AUTOSAR入门-江湖
AUTOSAR入门-AS开源代码运行环境搭建

AUTOSAR入门-AS开源代码编译过程详解

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 1-2-2025 11:00 , Processed in 0.200808 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.