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笔记的主要内容,如果未能解决你的问题,请参考以下文章

AC8015笔记

使用快速更新的脉冲响应实现卷积混响

声学基础20210918课堂笔记

ESP32 单片机学习笔记 - 03 - MCPWM脉冲输出/PCNT脉冲计数

声压级衰减变化曲线

报错 POST http://192.168.79.165:8015/marketing/manager 400 (BAD REQUEST) 解决办法