居于mtk芯片安卓车机系统具体流程
一:车机系统框架
MCU 功能
电源控制
Radio 控制(RDS)
按键检测(Panel/Remote/SW)
常见信号检查(倒车/大灯/刹车)
CAN 模块通讯
ARM-MCU 通讯
进出碟控制
翻转马达系统
屏驱(此种情况倒车一般用 mcu 控制)
AMR 功能
wifi 、BT、 gps、3/4G
显示、触摸
多媒体播放(SD 卡、U 盘)
倒车显示
语音
AUX
胎压、DVR、CMMB
CVBS 输出(后排输出)
二:安卓启动流程
第一阶段:Android 设备上电后,首先会从处理器片上 ROM 的启动引导代码开始执行,片上 ROM 会寻找 Bootloader
代码,并加载到内存。(这一步由“芯片厂商”负责设计和实现)
第二阶段:Bootloader 开始执行,首先负责完成硬件的初始化,然后找到 Linux 内核代码,并加载到内存。(这一
步由“设备厂商”负责设计和实现)
第三阶段:Linux 内核开始启动,初始化各种软硬件环境,加载驱动程序,挂载根文件系统,并执行 init 程序,
由此开启 Android 的世界。(这一步则是 Android 内核开发过程中需要涉及的地方)
init 程序最核心的工作主要有 3 点:
(1) 创建和挂载一些系统目录/设备节点,设置权限,如:/dev, /proc, and /sys
(2) 解析 init.rc 和 init..rc,并启动属性服务,以及一系列的服务和进程。
(3) 显示 boot logo,默认是“Android”字样
第四阶段:Zygote 进程、SystemServer 进程创建 Zygote 进程由 init 进程创建,SystemServer 进程由 Zygote 创建
第五阶段:订制的service 启动:例举包括以下服务( 添加的所有关键服务)
CBMService;
CanbusService;
McuService;
RadioService;
SettingService;
McuCBMService;
PandoraService;
SWCService;
第六阶段:启动完成阶段。当所有的服务都启动完毕后,SystemServer 会打印出“Making services ready”,然后
通过 ActivityManager 启动 Home 界面,并发送“ACTION_BOOT_COMPLETED”广播消息(到此真正看到了主界面)
三:代码结构
核心服务路径:\autochips\frameworks\base\services\java\com…
APP 路径:\autochips\packages
四:编译说明(AC8217平台代码而论)
全编译
1 . mbldenv.sh 导出编译需要的编译工具相关环境变量
2 . selfenv 拷贝 autochips 到相关目录主要拷贝以下目录:
3 . selfbuild
实际上 selfbuild 仅是 autochips\build\build.all 脚本的符号链接。在没有参数的情况下,selfbuild 会依次执行 build.env,
build.uboot,build.kernel,build.driver,build.arm2,build.android,build.otapackage,build.makeimage 这 7 个 sh 脚本。
相当分步执行以下:(当要单独编译部分时可以单独以下某句命令方法)
1.source./build.env设置编译环境2../selfbuild uboot 编译 uboot
3../selfbuilddriver编译ATC的driver4../selfbuild kernel 编译 linux kernel
5../selfbuildarm2编译arm26../selfbuild android 编译 android
7.$./selfbuild makeimage 生成最后需要烧写到板子上的 Image( 把多余的 apk 删除同时打包镜像)
模块编译
1 : 用 mm 或 mmm 编译相应模块
2: . selfbuild makeimage 生产镜像
附上编译脚本片段代码:
**
mbldenv.sh脚本文件
**
!/bin/bash
#
ALPS(Android4.1 based) build environment profile setting
#
Overwrite JAVA_HOME environment variable setting if already exists
PATH=/mtktools/mtk-toolchain/gnuarm-4.2.1/image-tools:PATHPATH=/mtktools/mtk−toolchain/gnuarm−4.4.1/cross−tools/usr/local/bin:PATH
PATH=/mtktools/mtk-toolchain/vfp_4.5.1_2.6.27_cortex-a9-rhel4_002/i686/bin:PATHANTHOME=/usr/local/antexportANTHOMEexportMTKJAVAHOME=”/usr/local/jdk1.6.032”exportPATH=MTK_JAVA_HOME/bin:ANTHOME/bin:PATH
export ANDROID_JAVA_HOME=MTKJAVAHOMEexportANDROIDJAVATOOLCHAIN=MTK_JAVA_HOME/bin/
export JAVA_HOME=MTKJAVAHOMEexportJREHOME={JAVA_HOME}/jre
export CLASSPATH=.:JAVAHOME/lib:{JRE_HOME}/lib
export PATH
unset USERNAME
SKIN1: SKIN2:
export SKIN=Skin2
selfenv脚本文件:
!/bin/sh
export ANDROID4=pwd
export ANDROID_SRC=ANDROID4exportKERNELSRC=ANDROID4/kernel
export KERNELDIR=KERNELSRC/exportAUTOCHIPSDIR=ANDROID4/autochips
export DRIVERS_DIR=AUTOCHIPSDIR/protect/platform/kernel/driversexportPUBLICDRIVERSDIR=AUTOCHIPS_DIR/platform/kernel/drivers
export DRIVERS_INC=AUTOCHIPSDIR/platform/kernel/drivers/incexportARM2SRC=AUTOCHIPS_DIR/platform/arm2
export DISPLAY_HARDWARE_INC=AUTOCHIPSDIR/hardware/atc/displayexportUBOOTSRC=AUTOCHIPS_DIR/platform/uboot
export SCRIPT_DIR=AUTOCHIPSDIR/buildexportANDROIDOUTPUT=ANDROID_SRC/out
export DRIVERS_OUTPUT=AUTOCHIPSDIR/platform/kernel/drivers/outputexportDRIVERSLIB=AUTOCHIPS_DIR/platform/kernel/drivers/lib
export AUTOCHIPS_TOOL=AUTOCHIPSDIR/toolsexportRELEASEFOLDERNAME=ANDROID4/image_release
export BOARD_CFG_FILE=$AUTOCHIPS_DIR/device/atc/ac8317/BoardConfig.mk
export PATH=ANDROIDSRC/autochips/external/gstreameraggregate/bin/:AUTOCHIPS_TOOL:$PATH
export JOB_NUM=grep processor /proc/cpuinfo |wc -l
export CHIP_VER=8317
find AUTOCHIPSDIR/device/atc/ac8317/.overlay/build/−typef|xargstouchcp−ruafAUTOCHIPS_DIR/device/atc/ac8317/.overlay/build/* $ANDROID_SRC/build/
copy /autochips/kernel/includeto/kernel/include
find AUTOCHIPSDIR/kernel/include−typef|xargstouchcp−ruafAUTOCHIPS_DIR/kernel/include/* $ANDROID_SRC/kernel/include/
INPUT_PARAM=$*
function check_parameter()
{
if [ ! -z “echo "$INPUT_PARAM" | grep eng
” ];then
echo “eng”
elif [ ! -z “echo "$INPUT_PARAM" | grep userdebug
” ];then
echo “userdebug”
elif [ ! -z “echo "$INPUT_PARAM" | grep user
” ];then
echo “user”
else
echo “eng”
fi
}
retval=check_parameter $*
source ANDROIDSRC/build/envsetup.shretval
INPUT_PARAM=INPUTPARAM/eng/INPUTPARAM={INPUT_PARAM/userdebug/}
INPUT_PARAM=INPUTPARAM/user/INPUTPARAM=(echo $INPUT_PARAM)
lunch
if [ ! -z “echo "$INPUT_PARAM" | grep ?
” ];then
lunch
else
lunch 5
fi
echo “env [$retval] setup completed!!!”
selfbuild脚本文件:
!/bin/sh
{
if [ -z which androidq
];then
#echo "no androidq, source bash_profile"
- 1
- 2
source ~/.bash_profile
source ~/.bashrc
fi
if [ ! -z which androidq
];then
echo “androidq ok, build with it”
ANDROIDQ=androidq
else
echo “no androidq, build without it”
ANDROIDQ=
fi
INPUT_PARA=$*
Copy Overlay folder to original
if [ ! -z “echo "$INPUT_PARA" | grep cpoverlay
” ];then
SCRIPTDIR/build.INPUT_PARA
exit 0
fi
process android version: user, userdebug, eng
if [ ! -z “echo "$INPUT_PARA" | grep eng
” ];then
export ANDROID_VER=eng
elif [ ! -z “echo "$INPUT_PARA" | grep userdebug
” ];then
export ANDROID_VER=userdebug
elif [ ! -z “echo "$INPUT_PARA" | grep user
” ];then
export ANDROID_VER=user
else
export ANDROID_VER=eng
fi
INPUT_PARA=INPUTPARA/eng/INPUTPARA={INPUT_PARA/userdebug/}
INPUT_PARA=INPUTPARA/user/INPUTPARA=(echo $INPUT_PARA)
source autochips/build/build.env $ANDROID_VER
echo “export env: ANDROID4=ANDROID4”if[!−dAUTOCHIPS_DIR -o -z $AUTOCHIPS_DIR ];then
echo “export some env var error, exit”
exit 1
fi
ALLIMAGES=”uboot kernel driver arm2 android otapackage makeimage clean cts”
check if para is nand
if [ ! -z “echo "$INPUT_PARA" | grep nand
” ];then
export AC83XX_BOOT_DEVICE=nand
elif [ ! -z “echo "$INPUT_PARA" | grep sd2
” ];then
export AC83XX_BOOT_DEVICE=sd2
else
export AC83XX_BOOT_DEVICE=mmc
fi
remove mmc para
INPUT_PARA=INPUTPARA/nand/INPUTPARA={INPUT_PARA/sd2/}
INPUT_PARA=(echoINPUT_PARA)
echo “AC83XX_BOOT_DEVICE :$AC83XX_BOOT_DEVICE”
check if it is release build, debug build by default
if [ ! -z “echo "$INPUT_PARA" | grep debug
” ];then
export RELEASE_BUILD=false
echo “build for debug”
else
export RELEASE_BUILD=true
echo “build for release”
fi
remove release or debug if it has
INPUT_PARA={INPUT_PARA%release}
INPUT_PARA={INPUT_PARA%debug}
INPUT_PARA=(echoINPUT_PARA)
if [ -z “INPUTPARA”];thenIMAGELIST=”ubootkerneldriverarm2androidotapackagemakeimage”exportBUILDALL=trueecho“noparam,default:IMAGE_LIST”
echo -e “\033[31m delete out(ANDROIDOUTPUT)folder?(y/n)\033[0m”read−t5RMOUTif[−dout−a“RMOUT" = "y" -a "?”=“0”];thenecho−e“\033[31mbegindeleteout(ANDROID_OUTPUT) folder\033[0m”
ANDROIDQrm−rfANDROID_OUTPUT
fi
else
IMAGE_LIST=”$INPUT_PARA”
export BUILD_ALL=false
fi
if [ ! -z “echo $IMAGE_LIST | grep makeimage
” ];then
export MAKE_IMAGE=true
IMAGE_LIST=${IMAGE_LIST%makeimage}
fi
for test
for PARAM in $IMAGE_LIST
do
if [ ! -z “echo "$ALLIMAGES" | grep $PARAM
” ];then
if [ ! -z “echo $PARAM | grep android
” ];then
if [ ! -z “echo $ANDROID_VER | grep eng
” ];then
BUILD_PARA=”eng”
elif [ ! -z “echo $ANDROID_VER | grep userdebug
” ];then
BUILD_PARA=”userdebug”
elif [ ! -z “echo $ANDROID_VER | grep user
” ];then
BUILD_PARA=”user”
else
BUILD_PARA=””
fi
elif [ ! -z “echo $PARAM | grep kernel
” ];then
if [ ! -z “echo "$RELEASE_BUILD" | grep false
” ]; then
BUILD_PARA=”debug”
elif [ ! -z “echo $ANDROID_VER | grep eng
” ];then
BUILD_PARA=”debug”
else
BUILD_PARA=””
fi
elif [ ! -z “echo $PARAM | grep driver
” ];then
if [ ! -z “echo "$RELEASE_BUILD" | grep false
” ]; then
BUILD_PARA=”debug”
else
BUILD_PARA=””
fi
else
BUILD_PARA=””
fi
echo -e "\033[32m build.$PARAM $BUILD_PARA\033[0m"
if [ ! -x $SCRIPT_DIR/build.$PARAM ];then
if [ ! -z "`echo $PARAM | grep otapackage`" ];then
source autochips/build/build.env $AC83XX_BOOT_DEVICE
fi
echo -e "\033[32m $SCRIPT_DIR/build.$PARAM $BUILD_PARA can't executable!\033[0m"
exit 1
fi
echo "++ build_dir is $SCRIPT_DIR, param is $PARAM, build_para is $BUILD_PARA++"
$ANDROIDQ $SCRIPT_DIR/build.$PARAM $BUILD_PARA
if [ "$?" != "0" ];then
echo -e "\033[31m build.$PARAM $BUILD_PARA error, stop!\033[0m"
exit 1
else
echo -e "\033[32m build.$PARAM $BUILD_PARA OK!\033[0m"
fi
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
else
echo -e “\033[31munknown cmd: $PARAM\033[0m”
fi
done
build kernel and driver again to debug if no release
assume that arm2 image is only need to generate in
building all iamge, which means the whole image building
if [ ! -z “echo "$RELEASE_BUILD" | grep false
” ]; then
echo “it is debug build”
if [ ! -z “echo "$BUILD_ALL" | grep true
” ]; then
echo “clean kernel and drivers”
cd KERNELDIR && make clean && make mrproper
#cdDRIVERS_DIR && make clean
echo “build kernel and driver again”
ANDROIDQSCRIPT_DIR/build.kernel “debug”
ANDROIDQSCRIPT_DIR/build.driver “debug”
fi
else
echo “it is release build”
fi
build image
if [ ! -z “echo $MAKE_IMAGE | grep true
” ];then
echo “Going to build images”
$SCRIPT_DIR/build.makeimage
fi
echo “build is done!”
exit
} | tee buildlog.txt
居于mtk芯片安卓车机系统具体流程的更多相关文章
- 远程调试在Linux车机中的应用
导读 在软件开发过程中,调试是必不可少的环节,嵌入式操作系统的调试与桌面操作系统的调试相比有很大差别,嵌入式系统的可视化调试能力比桌面操作系统要弱一点.对于导航这种业务场景比较复杂的程序开发,可视化调 ...
- 【RN6752】模拟高清AHD芯片或成为车机新标配
由于目前车机方案倒车后视目前大多为480P标配,画面噪点多有锯齿成像效果差,成为行业的难言之痛.2012年底,浙江大华宣布发布一项具备完全自主知识产权的安防行业高清视频传输规范--HDCVI--Hig ...
- Atitit. 常用街机系统and 模拟器总结 snk neo geo cps mame sfc smc
Atitit. 常用街机系统and 模拟器总结 snk neo geo cps mame sfc smc 1. #-------常用 游戏类型 1 2. 街机的历史 2 3. #=========== ...
- 高德地图车机版API演示程序
高德地图车机版API演示程序 做车载的应该和这个程序打交道打的比较多吧,这里是我今天写的一个实现了他的API的一个演示程序 首先我们来看下他的官网. http://lbs.amap.com/api/a ...
- cocos2dx 安卓真机调试问题汇总
cocos compile编译apk问题汇总: 1,dx编译报错,没有足够的空间 ANTBUILD : [dx] error : Could not create the Java Virtual M ...
- adb软件国产安卓手机对系统的把控
国产安卓手机对系统的把控,现在想搞机的方法是愈来愈麻烦,华为最先的申请解锁码,到现在直接系统锁死不给解.让我等搞机小伙伴是望机兴叹.安卓手机的通病随着系统升级,手机就越来越卡.本想通过卸载系统自带应用 ...
- 爱默生UPS并机系统:进入与退出操作方法
UPS并机系统的进入与退出: 进入:.合UPS的出线及进线开关:开启第一台UPS,等待整流指示灯常亮.然后Invert On,正常开机,此时UPS进入逆变状态 .合另外一台UPS的出线及进线开关,等待 ...
- Ubuntu 12.04搭建MTK 6577 安卓开发环境
Ubuntu 12.04搭建 MTK 6577安卓开发环境 1. 下载并安装Vmware虚拟机: 2. 下载并在虚拟机上安装Ubuntu 12.04 iso 安装包:下载地址: ...
- python 之路,Day27 - 主机管理+堡垒机系统开发
python 之路,Day27 - 主机管理+堡垒机系统开发 本节内容 需求讨论 构架设计 表结构设计 程序开发 1.需求讨论 实现对用户的权限管理,能访问哪些机器,在被访问的机器上有哪些权限 实 ...
随机推荐
- Nutch URL过滤配置规则
nutch网上有不少有它的源码解析,但是采集这块还是不太让人容易理解.今天终于知道怎么,弄的.现在把crawl-urlfilter.txt文件贴出来,让大家一块交流,也给自己备忘录一个. # Lice ...
- js里面正则表示满足多个条件的写法
实例,满足条件里面必须包含数字,字母和下划线组成 代码如下: var reg = /^([a-z]+\d+\_+)|([a-z]+\_+\d+)|(\_+[a-z]+\d+)|(\_+\d+[a-z] ...
- Django学习笔记 开发环境搭建
为什么使用django?1.支持快速开发:用python开发:数据库ORM系统,并不需要我们手动地构造SQL语句,而是用python的对象访问数据库,能够提升开发效率.2.大量内置应用:后台管理系统a ...
- poj_1456 贪心
题目大意 一家超市,要卖出N种物品(每种物品各一个),每种物品都有一个卖出截止日期Di(在该日期之前卖出可以获得收益,否则就无法卖出),且每种物品被卖出都有一个收益值Pi. 卖出每个物品需要耗时1天, ...
- postgres模板数据库
CREATE DATABASE 实际上是通过拷贝一个现有的数据库进行工作的.缺省时,它拷贝名为 template1 的标准系统数据库.所以该数据库是创建新数据库的"模板".如果你给 ...
- java基础---->多线程之yield(三)
yield方法的作用是放弃当前的CPU资源,将它让给其它的任务去占用CPU执行时间.但放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片.今天我们通过实例来学习一下yield()方法的使用.最是 ...
- Go基础---->go的基础学习(五)
这里是go中关于io的一些知识.有时不是你装得天衣无缝,而是我愿意陪你演得完美无缺. go中关于io的使用 一.Reader中的Read方法 Read 用数据填充指定的字节 slice,并且返回填充的 ...
- CentOS7安装Openvswitch 2.3.1 LTS
CentOS7安装Openvswitch 2.3.0 LTS,centos7openvswitch 一.环境: 宿主机:windows 8.1 update 3 虚拟机:vmware 11 虚拟机操作 ...
- sencha touch 扩展篇之将sencha touch打包成安装程序(下)- 使用phonegap打包安装程序
这讲我们来讲解下如何使用phonegapa创建项目环境并通过她们将sencha touch打包成app,这里我们只讲解打包android的apk,打包ios的过程有点类似,但是需要在mac环境 ...
- linux下查看服务器软件的编译参数
1.nginx编译参数: your_nginx_dir/sbin/nginx -V 2.apache编译参数: cat your_apache_dir/build/config.nice 3.php编 ...