嵌入式Android底层开发
嵌入式Linux主要有这几部分:
Bootloader:主要用于引导Linux内核到内存中,让内核进行自解压并运行
zImage:带自解压的Linux内核
<Board>.dtb:每个型号的主板都有对应的设备树(保存对应的设备型号等信息,实现驱动和 设备分离)
rootfs.img:Linux根文件系统,用于支持Linux内核运行的最小文件系统
(其实Android系统也是属于Linux文件系统的一种)
Android系统主要有这几部分:
Bootloader:主要用于引导Linux内核到内存中,让内核进行自解压并运行
zImage:经过修改的支持Android的带自解压的Linux内核
ramdisk.img:与Linux根文件系统类似,Linux内核启动后挂在这个文件系统
system.img:这个是Android的文件系统(保存Android程序),Linux内核挂在ramdisk.img 后才挂在这个文件系统,继续启动Android系统的程序。
user.data:用户数据文件,相当于数据盘,保存Android系统用户的数据信息。
Linux部分的编译
配置Linux内核
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
编译Linux内核
make ARCH=arm CROSS_COMPILE=arm-linux- zImage
编译驱动模块
make ARCH=arm CROSS_COMPILE=arm-linux- modules
Android部分的编译
编译完整的Android系统
source build/envsetup.sh
lunch
make
单独编译Android的ramdisk.img
make ramdisk
单独编译system文件系统
make snod
单独编译Android模块
mmm 模块目录(需要有Android.mk)
Android系统启动流程
Bootloader 将zImage引导到内存后,zImage开始进行自解压得到vmlinux,然后开始初始化CPU、MMU等硬件,初始化Linux运行环境,挂在ramdisk.img根文件系统,然后运行init进程,init读取init.rc脚本文件,启动各种系统进程和系统服务(其中包括Zygote服务),
Zygote进程初始化虚拟机并启动sysem_server进程,system_server进程作为嫡长子进程会启动各种Android的framework服务实现Android系统的启动,服务启动完毕后会通知Zygote进程启动HOME桌面应用程序。