文件系统的加载是从init.rc开始一步步的,创建文件系统所需的目录,还有给这些目录加权限,拷贝相关的程序,等待操作,最重要的,一个文件系统的运行需要加载这些服务才可以实现。至于怎么加载的,原理我就不多说了,说来话长,推荐大家可以去搜索init.rc,init.c这样的字眼就可以明白了。
mediatek/config/mt6582/init.rc
on YYX class_start core service pppService /system/bin/PPPreboot class core user root group root oneshot
- 我写的这个服务名字叫做pppService,服务对应需要执行的bin文件是PPPreboot,实现的就是平板一开机打印语句然后就重启,一直反复,这样就不会进入安卓文件系统了,也就看不到我们平常使用的安卓UI界面,而是黑压压的一篇,但是你在串口上可以看到调试信息输出,当然,如果你了解驱动应用编程,你可以在此时在屏幕上画点东西,做你自己的界面,其实就是写C或者C++的程序了,就是写linux的应用程序。
- 源码如下(位置:external/test/ppp.c)
#include <stdio.h> #include <stdlib.h> #include <android/log.h> #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "keymatch", __VA_ARGS__) int main(void) { int i ; freopen("/dev/ttyMT0", "a", stdout);setbuf(stdout, NULL); freopen("/dev/ttyMT0", "a", stderr);setbuf(stderr, NULL); LOGD("YYX---->reboot system!!!!!!--->201612.1\n"); system("reboot"); return 0 ; }
对应的Android.mk
6.system/core/init/init.cLOCAL_PATH:=$(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := eng LOCAL_LDLIBS := -llog LOCAL_SRC_FILES:= \ ppp.c LOCAL_MODULE:= PPPreboot include $(BUILD_EXECUTABLE) #include $(BUILD_SHARED_LIBRARY)
action_for_each_trigger("YYX", action_add_queue_tail);
编译 将对应的文件下载到安卓平板,开机你就会发现平板可以打印信息也可以不断的重启了。