1. 系统组成
AC8015 Hypervisor 系统分为HSM,Safety,Xen Hypervisor,VM0(Linux),VM1(Android),以及Trustzone。其中HSM和Safety运行在其SRAM上,其他OS运行在DRAM上。
2. Autochips修改目录
autochips主要会修改到的目录如下:
device:修改device相关配置
frameworks:定制化Android服务
kernel-4.9:添加autochips驱动
packages:修改部分packages
system:优化启动
vendor:添加非ASOP代码
device:
device/autochips/$(project), e.g. ac8x,平台相关通用客制化的配置
device/autochips/$(device), e.g. ac8x_car,设备相关客制化的配置
device/autochips/common, 针对所有平台的通用配置
kernel-4.9:
kernel-4.9/drivers/soc/autochips:Autochips私有drivers
kernel-4.9/arch/{arm,arm64}/configs:编译config配置
kernel-4.9/arch/{arm,arm64}/boot:dts配置
vendor:
vendor/autochips/proprietary/external:Autochips开发的native程序
vendor/autochips/proprietary/frameworks:Autochips对AOSP frameworks 代码的扩展
vendor/autochips/proprietary/hardware:Autochips开发的HAL程序
vendor/autochips/proprietary/packages:Autochips开发的应用
vendor/autochips/proprietary/system:Autochips对AOSP system 代码的扩展
3. kernel配置文件kernel-4.9/Android.mk
ifeq ($(TARGET_BUILD_VARIANT), eng)
KERNEL_DEFCONFIG ?= $(PRODUCT_MODEL)_eng_defconfig
else ifeq ($(TARGET_BUILD_VARIANT), userdebug)
KERNEL_DEFCONFIG ?= $(PRODUCT_MODEL)_defconfig
else
KERNEL_DEFCONFIG ?= $(PRODUCT_MODEL)_user_defconfig
device/autochips/ac8x_car/full_ac8x_car_hypv.mk:32:PRODUCT_MODEL := ac8x_car_hypv
device/autochips/ac8x_car/full_ac8x_car_hypv_D1.mk:32:PRODUCT_MODEL := ac8x_car_hypv_D1
device/autochips/ac8x_car/full_ac8x_car.mk:28:PRODUCT_MODEL := ac8x_car
device/autochips/ac8x_demo/full_ac8x_demo.mk:28:PRODUCT_MODEL := ac8x_demo
通过lunch选择之后,会具体包含full_ac8x_car_hypv.mk
或者full_ac8x_car_hypv_D1.mk
或者full_ac8x_car.mk
或者full_ac8x_demo.mk
目前使用的是./allmake.sh -p ac8x_car命令编译的源码
所以PRODUCT_MODEL := ac8x_car
分析allmake.sh可知,此种情况下使用的是默认模式userdebug。
综上所述:kernel使用的配置文件是ac8x_car_defconfig
4. 系统启动整体流程
1.系统上电,执行Boot Rom开始执行,检测eMMC/NAND device并做基本初始化,然后从device上读取HSM(preLoader)到internal SRAM,然后跳转到HSM执行。
2.HSM(preLoader)加载VISS,然后等待VISS初始化dram,然后加载trusty,LK到dram并跳转执行。
3.LK阶段初始化一些环境,最后跳转到kernel并执行。
4.kernel启动后将会做很多初始化,在配置完基本的平台环境以后,kernel将会挂载根文件系统并且运行第一个用户空间的程序“init”。
5.init程序会加载init.rc文件来启动Android Java世界程序。
【注】VISS其实是在独立cpu上跑rtos,rtos的应用程序main()函数中初始化dram后再启动主CPU,再加载LK到dram。
【注】系统启动时在HSMLoader中确定从哪个slot中启动,并且这个slot时Normal boot的。和uboot对比:VISS对应uboot的第一阶段,但是VISS跑的是rtos系统;LK对应uboot的第二阶段;HSM其实是可以固化在Boot Rom中的,不理解为什么要通过从设备读取HSM镜像的方式来运行。===》这也就能理解为什么HSM提供了镜像,但是没有提供源码。
5. VISS
vendor/autochips/proprietary/tinysys/viss/os
链接脚本指定入口函数为Start:os/build/ac8015_android.lds
==>在main/start.S中定义Start函数,最终跳转到main()函数
==>main/main.c总定义main函数,调用freertos接口的应用程序,获取**/倒车图片/DRAM初始化等等,其中调用了startAp(0x08100000)-->猜测0x08100000是LK的地址,
==>startAp是一个宏定义(include/power_util.h),指向start_ap()函数
==>start_ap()函数定义在drivers/power_util.c中
6. Little Kernel
vendor/autochips/proprietary/bootable/lk
LK 代码结构:
app 应用相关
arch arm 体系
dev 设备相关
include 头文件
kernel lk系统相关
platform 相关驱动
projiect makefile文件
scripts Jtag 脚本
target 具体板子相关
LK流程分析:
lk/arch/arm/ssystem-onesegment.ld 连接文件中 ENTRY(_start)指定 LK 从_start 函数开始,_start 在 lk/arch/start.S 。
start.S主要做一些基本的CPU的初始化再通过 bl lk_main ;跳转到 C代码中。
lk/top/main.c中有lk_main()函数的定义
lk_main() //lk/top/main.c
apps_init(); //lk/app/app.c
app->init(app); //调用到lk/app/atc_boot/boot_kernel.c中的boot_kernel_init
start_app(app); //调用到lk/app/atc_boot/boot_kernel.c中的boot_linux_from_emmc
theKernel (FDT_LOAD_ADDR_PHYS, 0, 0); //启动kernel
apps_start和apps_end都是在lk/app/app.ld文件中指定的,表示".apps"段
代码中通过APP_START宏向".apps"段添加代码
APP_START宏定义如下:
#define APP_START(appname) const struct app_descriptor _app_##appname __ALIGNED(sizeof(void *)) __SECTION(".apps") = { .name = #appname,
#define APP_END };
例如:(lk/app/atc_boot/boot_kernel.c)
APP_START(atc_boot)
.init = boot_kernel_init,
.entry = boot_linux_from_emmc,
APP_END
7. 专业术语缩写
VISS Vehicle Interface Sub System 类似之前的ARM2系统,用于提供显示和快速倒车的独立CPU
HSM Hardware Security Module Preloader功能
LK Little Kernel 作为Android系统的boot loader
eMMC Embedded Multi Media Card 手机等嵌入式设备上常用的内嵌式存储器
LCM Liquid Crystal Module 液晶显示模组
MIPI Mobile Industry Processor Interface 移动产业处理器接口
DSI Display Serial Interface 显示串行接口,MIPI的一种接口类型
LVDS Low-Voltage Differential Signaling 低压差分信号,一种信号传输模式
ATF Arm Trusted Firmware ARM可信环境框架
AP Application Processor 应用处理器,用于提供系统功能的CPU
PE Processing Element
VHL Vehicle Hardware Abstraction Layer Android Automotive中的HAL层实现
PM Power Management 电源管理
MCU Micro programmed Control Unit 用于自动化测试的,或车载控制的外部单片机模块
NCM Network Control Module
————————————————
版权声明:本文为CSDN博主「四季帆」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41076734/article/details/125979427
|