打印
[学习笔记]

AC8015笔记

[复制链接]
1965|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2023-3-14 10:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1360

主题

13960

帖子

8

粉丝