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.source./build.env設置編譯環境2../selfbuild uboot 編譯 uboot
3../selfbuilddriver編譯ATC的driver4../selfbuilddriver編譯ATC的driver4../selfbuild kernel 編譯 linux kernel
5../selfbuildarm2編譯arm26../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: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=PATHANTHOME=/usr/local/antexportANTHOMEexportMTKJAVAHOME=”/usr/local/jdk1.6.032”exportPATH=MTK_JAVA_HOME/bin:ANTHOME/bin:ANTHOME/bin:PATH
export ANDROID_JAVA_HOME=MTKJAVAHOMEexportANDROIDJAVATOOLCHAIN=MTKJAVAHOMEexportANDROIDJAVATOOLCHAIN=MTK_JAVA_HOME/bin/
export JAVA_HOME=MTKJAVAHOMEexportJREHOME=MTKJAVAHOMEexportJREHOME={JAVA_HOME}/jre
export CLASSPATH=.:JAVAHOME/lib:JAVAHOME/lib:{JRE_HOME}/lib
export PATH
unset USERNAME
SKIN1: SKIN2:
export SKIN=Skin2
selfenv腳本文件:
!/bin/sh
export ANDROID4=pwd
export ANDROID_SRC=ANDROID4exportKERNELSRC=ANDROID4exportKERNELSRC=ANDROID4/kernel
export KERNELDIR=KERNELSRC/exportAUTOCHIPSDIR=KERNELSRC/exportAUTOCHIPSDIR=ANDROID4/autochips
export DRIVERS_DIR=AUTOCHIPSDIR/protect/platform/kernel/driversexportPUBLICDRIVERSDIR=AUTOCHIPSDIR/protect/platform/kernel/driversexportPUBLICDRIVERSDIR=AUTOCHIPS_DIR/platform/kernel/drivers
export DRIVERS_INC=AUTOCHIPSDIR/platform/kernel/drivers/incexportARM2SRC=AUTOCHIPSDIR/platform/kernel/drivers/incexportARM2SRC=AUTOCHIPS_DIR/platform/arm2
export DISPLAY_HARDWARE_INC=AUTOCHIPSDIR/hardware/atc/displayexportUBOOTSRC=AUTOCHIPSDIR/hardware/atc/displayexportUBOOTSRC=AUTOCHIPS_DIR/platform/uboot
export SCRIPT_DIR=AUTOCHIPSDIR/buildexportANDROIDOUTPUT=AUTOCHIPSDIR/buildexportANDROIDOUTPUT=ANDROID_SRC/out
export DRIVERS_OUTPUT=AUTOCHIPSDIR/platform/kernel/drivers/outputexportDRIVERSLIB=AUTOCHIPSDIR/platform/kernel/drivers/outputexportDRIVERSLIB=AUTOCHIPS_DIR/platform/kernel/drivers/lib
export AUTOCHIPS_TOOL=AUTOCHIPSDIR/toolsexportRELEASEFOLDERNAME=AUTOCHIPSDIR/toolsexportRELEASEFOLDERNAME=ANDROID4/image_release
export BOARD_CFG_FILE=$AUTOCHIPS_DIR/device/atc/ac8317/BoardConfig.mk
export PATH=ANDROIDSRC/autochips/external/gstreameraggregate/bin/: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?ruafAUTOCHIPSDIR/device/atc/ac8317/.overlay/build/?typef|xargstouchcp?ruafAUTOCHIPS_DIR/device/atc/ac8317/.overlay/build/* $ANDROID_SRC/build/
copy /autochips/kernel/includeto/autochips/kernel/includeto/kernel/include
find AUTOCHIPSDIR/kernel/include?typef|xargstouchcp?ruafAUTOCHIPSDIR/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.shANDROIDSRC/build/envsetup.shretval
INPUT_PARAM=INPUTPARAM/eng/INPUTPARAM=INPUTPARAM/eng/INPUTPARAM={INPUT_PARAM/userdebug/}
INPUT_PARAM=INPUTPARAM/user/INPUTPARAM=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
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.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=INPUTPARA/eng/INPUTPARA={INPUT_PARA/userdebug/}
INPUT_PARA=INPUTPARA/user/INPUTPARA=INPUTPARA/user/INPUTPARA=(echo $INPUT_PARA)
source autochips/build/build.env $ANDROID_VER
echo “export env: ANDROID4=ANDROID4”if[!?dANDROID4”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=INPUTPARA/nand/INPUTPARA={INPUT_PARA/sd2/}
INPUT_PARA=(echo(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%release}??INPUT_PARA={INPUT_PARA%debug}
INPUT_PARA=(echo(echoINPUT_PARA)
if [ -z “INPUTPARA”];thenIMAGELIST=”ubootkerneldriverarm2androidotapackagemakeimage”exportBUILDALL=trueecho“noparam,default: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“ANDROIDOUTPUT)folder?(y/n)\033[0m”read?t5RMOUTif[?dout?a“RMOUT" = "y" -a "?”=“0”];thenecho?e“\033[31mbegindeleteout(?”=“0”];thenecho?e“\033[31mbegindeleteout(ANDROID_OUTPUT) folder\033[0m”
ANDROIDQrm?rfANDROIDQrm?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
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??
????#cdKERNELDIR?&&?make?clean?&&?make?mrproper??????#cdDRIVERS_DIR && make clean
echo “build kernel and driver again”
ANDROIDQANDROIDQSCRIPT_DIR/build.kernel “debug”
ANDROIDQANDROIDQSCRIPT_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芯片安卓车机系统具体流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .bat批处理文件格式运行JAVA应用程
- 下一篇: Chrome(谷歌)浏览器调试教程珍藏版