zolo1984 / cells-of-android Goto Github PK
View Code? Open in Web Editor NEWClone of https://github.com/jianglin05290712/cells-of-Android
Clone of https://github.com/jianglin05290712/cells-of-Android
基于容器原理(cell、lxc、docker)的Android双系统基础代码(Android 6.0 huawei 6p nexus) 1、位于vendor目录下的cells目录 1)、cells --- 容器生成进程,能启动init进程 其中celld是运行在主系统中的daemon进程,负责创建容器空间 其中cell是celld对应的命令行程序 其中hostcmd是运行在主系统中的daemon进程,负责与辅助系统交互 其中vmcmd是运行在辅助系统中的daemon进程,负责与主系统交互 2)、fingerprintd --- 指纹虚拟化 3)、Kernel_Kmsg --- 内核日志保存 4)、logcat --- ap日志保存 5)、qemuxproxy --- socket 代理,接受一个socket的数据,转发给另一个socket(双系统各设备的虚拟化核心就是接口代理、就是进程间通信,binder、socket、netlink等) 6)、SecureSystemSwitch --- 双系统切换APP,上层应用,实际功能实现在hostcmd、vmcmd中 7)、StopSystem --- 双系统切换成单系统APP,上层应用,双系统切成单系统功能,实际功能实现在hostcmd中 2、位于system目录下的core目录 1)、adb --- adb 虚拟化,核心原理就是adb daemon 进程 互斥的运行在两个系统中 2)、init --- init 进程略微修改 3、位于kernel目录下的drivers目录 1)、core.c --- 系统隔离初始化 drv_namespace 2)、evdev.c mousedev.c --- input 事件互斥上报 (需增加input兼容模式) 3)、veth.c --- wlan、rmnt_data 网络虚拟化必备“网线”, 请根据最新版本内核更新一下此设备,网络虚拟化借鉴了“usb共享网络”的原理 4)、alarm-dev.c --- alarm 驱动隔离 5)、binder.c --- binder 驱动隔离 6)、logger.c --- 日志 驱动隔离 7)、mdss_fb.c --- 背光灯 驱动隔离 8)、container.c --- 可废除 9)、drv_namespace.c --- 驱动隔离基础 10)、nsproxy.c --- PID 隔离 3、位于hardware目录下的libhardware_legacy目录 1)、power.c --- wakelock 虚拟化,核心:各系统wakelock不能重命名,改名! 4、frameworks目录 该目录针对 camera、sound、input、surfaceflinger、binder 等都有修改,太多了就不做一一解释,请用Android6.0源码对比自行理解,时间仓卒不保证质量 5、位于device目录下的angler目录 1)、fstab.angler --- 主系统fstab,其中由于关闭selinux导致文件系统无法自动挂载,因为该文件中有selinux标签 2)、fstab.anger.cell --- 辅助系统fstab 3)、init.angler.cell.rc --- 辅助系统rc文件 4)、init.cell.rc --- 辅助系统rc文件 5)、init.rc --- 主系统rc文件 kernel ---> init(主系统) ---> init.rc ---> celld(容器生成器) ---> init(辅助系统) 2019-01-06 各位朋友,如果有什么问题可以留言的,2018年协助一些朋友将此方案移植到他们的机型上,特更新下移植过程,供参考: 1、修改config CONFIG_UTS_NS=y CONFIG_IPC_NS=y CONFIG_USER_NS=y CONFIG_PID_NS=y CONFIG_NET_NS=y CONFIG_DRV_NS=y CONFIG_VETH=y android 6.0 以后的将此开启 CONFIG_SYSVIPC=y 2、驱动层,依次移植core.c drv_namespace.c nsproxy.c binder.c evdev.c mousedev.c alarm-dev.c logger.c 3、关闭selinux(disabled),这样会省掉很多事; 如果关不掉,则将selinux置为兼容模式,注意selinux是兼容模式时: 1)*.rc 中增加的service需要增加标签属性。 2)修改init进程,利用ro.boot.vm=1(辅助系统)属性将所有selinux控制功能辅助系统单方面屏蔽。 4、修改init进程,利用ro.boot.vm=1(辅助系统)属性,辅助系统单方面禁止导入firmware(内核固件) 5、给辅助系统增加*.rc文件,统一命名为*.cell.rc,其中init.cell.rc要做如下几件事: 1)on boot 节点 增加 write /dev/celld.startpipe cell 2)增加日志服务和vmcmd服务 3)屏蔽不需要的系统服务例如ril-deamon 4)修改vendor/cells/cells/celld.c rename_cells_file 函数 6、给辅助系统增加文件系统配置文件fstab.* ,其中有如下几件事要做: 1)屏蔽/system / /data /sdcard /zram 分区的配置项 2)如果有selinux属性,需要去掉(这里主系统同样需要这样处理) 7、给主系统修改init.rc文件,要做如下几件事: 1)增加日志服务,celld服务和hostcmd服务 2)注意可先将celld设为disable属性,系统整体修改完以后可使用setprop ctl.start celld 命令 启动辅助系统 8、将vendor/cells 中的 cells SecureSystemSwitch logcat Kernel_Kmsg 移植进自己的工程中,将编译链设置好 9、按照github源码对比合入frameworks/native 源码 10、按照github源码对比合入frameworks/av 源码 11、按照github源码对比合入frameworks/base 源码 12、按照github源码对比合入adb 源码 13、按照github源码对比合入hardware/power 源码 注意事项: 1、按这个步骤1个1个的合入,编译,刷机,验证,务必保证日志系统、主系统和原生系统是一致的 2、所有项合入后,使用 setprop ctl.start celld 手动启动辅助系统 3、启动辅助系统时,可能会遇见三个问题 1)..._os_Zygote.cpp 文件中 gOpenFdTable abort 问题,解决办法:辅助系统单方面屏蔽该功能 2)模拟sdcard无法挂载,解决办法:init.cell.rc 中增加 mkdir /storage 0755 root root 3) 动态调频功能无法使用,解决办法:辅助系统单方面屏蔽该功能 4、最后双系统主体结构便构造完成了,如果想完整产品化,还有很长的路需要完成 祝好!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.