• AC8015笔记


    1. 系统组成

            AC8015 Hypervisor 系统分为HSM,Safety,Xen Hypervisor,VM0(Linux),VM1(Android),以及Trustzone。其中HSM和Safety运行在其SRAM上,其他OS运行在DRAM上。

    2. Autochips修改目录

    1. autochips主要会修改到的目录如下:
    2. device:修改device相关配置
    3. frameworks:定制化Android服务
    4. kernel-4.9:添加autochips驱动
    5. packages:修改部分packages
    6. system:优化启动
    7. vendor:添加非ASOP代码
    8. device:
    9. device/autochips/$(project), e.g. ac8x,平台相关通用客制化的配置
    10. device/autochips/$(device), e.g. ac8x_car,设备相关客制化的配置
    11. device/autochips/common, 针对所有平台的通用配置
    12. kernel-4.9:
    13. kernel-4.9/drivers/soc/autochips:Autochips私有drivers
    14. kernel-4.9/arch/{arm,arm64}/configs:编译config配置
    15. kernel-4.9/arch/{arm,arm64}/boot:dts配置
    16. vendor:
    17. vendor/autochips/proprietary/external:Autochips开发的native程序
    18. vendor/autochips/proprietary/frameworks:Autochips对AOSP frameworks 代码的扩展
    19. vendor/autochips/proprietary/hardware:Autochips开发的HAL程序
    20. vendor/autochips/proprietary/packages:Autochips开发的应用
    21. vendor/autochips/proprietary/system:Autochips对AOSP system 代码的扩展

    3. kernel配置文件

    1. kernel-4.9/Android.mk
    2. ifeq ($(TARGET_BUILD_VARIANT), eng)
    3. KERNEL_DEFCONFIG ?= $(PRODUCT_MODEL)_eng_defconfig
    4. else ifeq ($(TARGET_BUILD_VARIANT), userdebug)
    5. KERNEL_DEFCONFIG ?= $(PRODUCT_MODEL)_defconfig
    6. else
    7. KERNEL_DEFCONFIG ?= $(PRODUCT_MODEL)_user_defconfig
    8. device/autochips/ac8x_car/full_ac8x_car_hypv.mk:32:PRODUCT_MODEL := ac8x_car_hypv
    9. device/autochips/ac8x_car/full_ac8x_car_hypv_D1.mk:32:PRODUCT_MODEL := ac8x_car_hypv_D1
    10. device/autochips/ac8x_car/full_ac8x_car.mk:28:PRODUCT_MODEL := ac8x_car
    11. device/autochips/ac8x_demo/full_ac8x_demo.mk:28:PRODUCT_MODEL := ac8x_demo
    12. 通过lunch选择之后,会具体包含full_ac8x_car_hypv.mk
    13. 或者full_ac8x_car_hypv_D1.mk
    14. 或者full_ac8x_car.mk
    15. 或者full_ac8x_demo.mk
    16. 目前使用的是./allmake.sh -p ac8x_car命令编译的源码
    17. 所以PRODUCT_MODEL := ac8x_car
    18. 分析allmake.sh可知,此种情况下使用的是默认模式userdebug。
    19. 综上所述: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

    1. vendor/autochips/proprietary/tinysys/viss/os
    2. 链接脚本指定入口函数为Start:os/build/ac8015_android.lds
    3. ==>在main/start.S中定义Start函数,最终跳转到main()函数
    4. ==>main/main.c总定义main函数,调用freertos接口的应用程序,获取logo/倒车图片/DRAM初始化等等,其中调用了startAp(0x08100000)-->猜测0x08100000是LK的地址,
    5. ==>startAp是一个宏定义(include/power_util.h),指向start_ap()函数
    6. ==>start_ap()函数定义在drivers/power_util.c中

    6. Little Kernel

    1. vendor/autochips/proprietary/bootable/lk
    2. LK 代码结构:
    3. app 应用相关
    4. arch arm 体系
    5. dev 设备相关
    6. include 头文件
    7. kernel lk系统相关
    8. platform 相关驱动
    9. projiect makefile文件
    10. scripts Jtag 脚本
    11. target 具体板子相关
    12. LK流程分析:
    13. lk/arch/arm/ssystem-onesegment.ld 连接文件中 ENTRY(_start)指定 LK 从_start 函数开始,_start 在 lk/arch/start.S 。
    14. start.S主要做一些基本的CPU的初始化再通过 bl lk_main ;跳转到 C代码中。
    15. lk/top/main.c中有lk_main()函数的定义
    16. lk_main() //lk/top/main.c
    17. apps_init(); //lk/app/app.c
    18. app->init(app); //调用到lk/app/atc_boot/boot_kernel.c中的boot_kernel_init
    19. start_app(app); //调用到lk/app/atc_boot/boot_kernel.c中的boot_linux_from_emmc
    20. theKernel (FDT_LOAD_ADDR_PHYS, 0, 0); //启动kernel
    21. apps_start和apps_end都是在lk/app/app.ld文件中指定的,表示".apps"
    22. 代码中通过APP_START宏向".apps"段添加代码
    23. APP_START宏定义如下:
    24. #define APP_START(appname) const struct app_descriptor _app_##appname __ALIGNED(sizeof(void *)) __SECTION(".apps") = { .name = #appname,
    25. #define APP_END };
    26. 例如:(lk/app/atc_boot/boot_kernel.c)
    27. APP_START(atc_boot)
    28. .init = boot_kernel_init,
    29. .entry = boot_linux_from_emmc,
    30. APP_END

    7. 专业术语缩写

    1. VISS Vehicle Interface Sub System 类似之前的ARM2系统,用于提供显示和快速倒车的独立CPU
    2. HSM Hardware Security Module Preloader功能
    3. LK Little Kernel 作为Android系统的boot loader
    4. eMMC Embedded Multi Media Card 手机等嵌入式设备上常用的内嵌式存储器
    5. LCM Liquid Crystal Module 液晶显示模组
    6. MIPI Mobile Industry Processor Interface 移动产业处理器接口
    7. DSI Display Serial Interface 显示串行接口,MIPI的一种接口类型
    8. LVDS Low-Voltage Differential Signaling 低压差分信号,一种信号传输模式
    9. ATF Arm Trusted Firmware ARM可信环境框架
    10. AP Application Processor 应用处理器,用于提供系统功能的CPU
    11. PE Processing Element
    12. VHL Vehicle Hardware Abstraction Layer Android Automotive中的HAL层实现
    13. PM Power Management 电源管理
    14. MCU Micro programmed Control Unit 用于自动化测试的,或车载控制的外部单片机模块
    15. NCM Network Control Module
    16. MFI Made For IOS
    17. iAP2 iPod Accessory Protocol version 2
    18. BT Bluetooth 蓝牙
    19. BRFCOMM 串口仿真协议
    20. AIDL Android Interface Definition Language
    21. HIDL Hardware Interface Definition Language
    22. OEM Original Equipment Manufacturer
    23. ATC Autochips 杰发科技公司名称
    24. GAP Generic Access Profile 通用访问协议
    25. SDP Service Discovery Protocol 服务发现协议
    26. SPP Serial Port Profile 串口协议
    27. HFP Hand Free Profile 免提协议
    28. PBAP Phone Book Access Profile 电话本访问协议
    29. A2DP Advanced Audio Distribution Profile 音频传输协议
    30. AVRCP Audio/Video Remote Control Profile 音频/视频远程控制协议
    31. AAC Advanced Audio Coding 一种音频编码方式
    32. OPP Object Push Profile 标文件传输协议
    33. PAN Personal Area Networking Profile 蓝牙热点协议
    34. LE low Energy 蓝牙低功耗
    35. SSP Secure Simple Pairing 简单配对方式
    36. DTMF Dual-tone multifrequency 电话按键编码
    37. I2S Inter-IC Sound
    38. DO Data Out I2S的Data Out PIN
    39. DIO Data In/Out 可以做IN也可以做OUT,但全双工时只能作为IN
    40. I2S SC I2S single channel 每组I2S具有一根DIO和一根DO PIN
    41. I2S MC I2S Multi channel 此I2S有三根DO PIN
    42. TDM Time Division Multiplexing 通过时分复用方式,支持传输多个声道的数据
    43. AEC Acoustic Echo Cancellation 声学回声消除
    44. NDC Noise reducer + Dynamic range Control 降噪+动态范围控制
    45. AWB Audio Write Back DSP输出的音频数据写回Dram
    46. BT656 paraller digital Interface 一种并行数字接口
    47. HPW Horizontal Pulse Width 水平同步脉冲宽度
    48. HFP Horizontal Front Porch 水平前肩
    49. HBP Horizontal Back Porch 水平后肩
    50. VPW Vertical Pulse Width 垂直同步脉冲宽度
    51. HFP Vertical Front Porch 垂直前肩
    52. HBP Vertical Back Porch 垂直后肩
    53. FPS Frame Per Second 每秒钟帧率
    54. BPP Bit Per Pixel 每个像素所用Bit位数
    55. SOC System on Chip SOC称为系统级芯片,也有称为片上系统
    56. PQ Picture Quality 图像质量
    57. UI User Interface 用户界面
    58. APP Application 一般指手机应用程序
    59. AOSP Android Open Source Project android开源项目
    60. POR Power-on-RESE

  • 相关阅读:
    webpack打包gz文件,nginx开启gzip压缩
    用baostock库获取上证50成分股
    【React框架基础知识】虚拟DOM与JSX语法
    回归预测 | MATLAB实现PSO-BiLSTM(粒子群优化双向长短期记忆神经网络)多输入单输出
    Excel 技巧记录-那些复杂的公式和函数
    Windows 交叉编译之 make
    Vue-basic 06.数据代理
    嵌入式为何钟爱SourceInsight,主要因为这个功能~
    [ERROR] COLLATION ‘utf8_unicode_ci‘ is not valid for CHARACTER SET ‘latin1‘
    XXL-Job与Elastic-Job详细对比
  • 原文地址:https://blog.csdn.net/qq_41076734/article/details/125979427