AC8015笔记
Posted 四季帆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AC8015笔记相关的知识,希望对你有一定的参考价值。
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接口的应用程序,获取logo/倒车图片/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
MFI Made For ios
iAP2 iPod Accessory Protocol version 2
BT Bluetooth 蓝牙
BRFCOMM 串口仿真协议
AIDL Android Interface Definition Language
HIDL Hardware Interface Definition Language
OEM Original Equipment Manufacturer
ATC Autochips 杰发科技公司名称
GAP Generic Access Profile 通用访问协议
SDP Service Discovery Protocol 服务发现协议
SPP Serial Port Profile 串口协议
HFP Hand Free Profile 免提协议
PBAP Phone Book Access Profile 电话本访问协议
A2DP Advanced Audio Distribution Profile 音频传输协议
AVRCP Audio/Video Remote Control Profile 音频/视频远程控制协议
AAC Advanced Audio Coding 一种音频编码方式
OPP Object Push Profile 标文件传输协议
PAN Personal Area Networking Profile 蓝牙热点协议
LE low Energy 蓝牙低功耗
SSP Secure Simple Pairing 简单配对方式
DTMF Dual-tone multifrequency 电话按键编码
I2S Inter-IC Sound
DO Data Out I2S的Data Out PIN
DIO Data In/Out 可以做IN也可以做OUT,但全双工时只能作为IN
I2S SC I2S single channel 每组I2S具有一根DIO和一根DO PIN
I2S MC I2S Multi channel 此I2S有三根DO PIN
TDM Time Division Multiplexing 通过时分复用方式,支持传输多个声道的数据
AEC Acoustic Echo Cancellation 声学回声消除
NDC Noise reducer + Dynamic range Control 降噪+动态范围控制
AWB Audio Write Back DSP输出的音频数据写回Dram
BT656 paraller digital Interface 一种并行数字接口
HPW Horizontal Pulse Width 水平同步脉冲宽度
HFP Horizontal Front Porch 水平前肩
HBP Horizontal Back Porch 水平后肩
VPW Vertical Pulse Width 垂直同步脉冲宽度
HFP Vertical Front Porch 垂直前肩
HBP Vertical Back Porch 垂直后肩
FPS Frame Per Second 每秒钟帧率
BPP Bit Per Pixel 每个像素所用Bit位数
SOC System on Chip SOC称为系统级芯片,也有称为片上系统
PQ Picture Quality 图像质量
UI User Interface 用户界面
APP Application 一般指手机应用程序
AOSP Android Open Source Project android开源项目
POR Power-on-RESE
以上是关于AC8015笔记的主要内容,如果未能解决你的问题,请参考以下文章
ESP32 单片机学习笔记 - 03 - MCPWM脉冲输出/PCNT脉冲计数
报错 POST http://192.168.79.165:8015/marketing/manager 400 (BAD REQUEST) 解决办法