房屋中介做网站的书籍,做网站的费用怎么做账,Apache 两个wordpress,如何看到网站做哪些关键字init.rc 复习看这个之前#xff0c;先看看大神总结的文章这篇文章总结的非常到位#xff0c;但是因为代码不是最新的Android版本#xff0c;对我们最新的Android版本不适用。http://gityuan.com/2016/02/05/android-init/#init rc文件拷贝拷贝其实也就是把文件放到机器的某个… init.rc 复习看这个之前先看看大神总结的文章这篇文章总结的非常到位但是因为代码不是最新的Android版本对我们最新的Android版本不适用。http://gityuan.com/2016/02/05/android-init/
#init rc文件拷贝拷贝其实也就是把文件放到机器的某个位置我们也可以使用这个命令来完成我们需要的功能。PRODUCT_COPY_FILES $(LOCAL_PATH)/factory_init.project.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/factory_init.project.rc
PRODUCT_COPY_FILES $(LOCAL_PATH)/init.project.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.project.rc
PRODUCT_COPY_FILES $(LOCAL_PATH)/meta_init.project.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/meta_init.project.rc
PRODUCT_COPY_FILES $(LOCAL_PATH)/init.recovery.mt8167.rc:root/init.recovery.mt8167.rc
#触发 trigger 在 system/core/rootdir/init.rc 中如果我们想触发某种 trigger就可以这样去做Android也是通过这样的机制来决定各个阶段做不同的事情的。# Mount filesystems and start core system services.
on late-init/*触发更早的文件系统*/trigger early-fs# Mount fstab in init.{$device}.rc by mount_all command. Optional parameter# --early can be specified to skip entries with latemount.# /system and /vendor must be mounted by the end of the fs stage,# while /data is optional./*vendor 需要在fs 挂载之后才能挂载*/trigger fstrigger post-fs# Mount fstab in init.{$device}.rc by mount_all with --late parameter# to only mount entries with latemount. This is needed if --early is# specified in the previous mount_all command on the fs stage.# With /system mounted and properties form /system /factory available,# some services can be started.trigger late-fs# Now we can mount /data. File encryption requires keymaster to decrypt# /data, which in turn can only be loaded when system properties are present.trigger post-fs-data# Now we can start zygote for devices with file based encryptiontrigger zygote-start# Load persist properties and override properties (if enabled) from /data.trigger load_persist_props_action# Remove a file to wake up anything waiting for firmware.trigger firmware_mounts_completetrigger early-boottrigger boot
#Android 服务启动顺序on early-init
on init
on late-inittrigger post-fs trigger load_system_props_actiontrigger post-fs-data trigger load_persist_props_actiontrigger firmware_mounts_completetrigger boot on post-fs //挂载文件系统start logdmount rootfs rootfs / ro remountmount rootfs rootfs / shared recmount none /mnt/runtime/default /storage slave bind rec...on post-fs-data //挂载datastart logdstart vold //启动vold//android 9.0 中变成了 在main.c代码中去触发 ATRACE_BEGIN(VoldNativeService::start);if (android::vold::VoldNativeService::start() ! android::OK) {LOG(ERROR) Unable to start VoldNativeService;exit(1);}ATRACE_END();on boot //启动核心服务...class_start core //启动core class
#解析init.*.rc文件的代码位置system/core/init/- init.cpp
/*可以从system/core里面去看代码找到你想要的东西*/
#查看服务的状态getprop | grep init.svc
/*服务指的是用service指定的服务*//*比如*/
# adbd is controlled via property triggers in init.platform.usb.rc
service adbd /system/bin/adbd --root_seclabelu:r:su:s0class coresocket adbd stream 660 system systemdisabledseclabel u:r:adbd:s0在机器中执行结果如下Android 9.0:/ # getprop |grep init.svc
[init.svc.XoSetCap]: [stopped]
[init.svc.adbd]: [running]
[init.svc.aee-reinit]: [stopped]
[init.svc.aee_aed]: [running]
[init.svc.aee_aedv]: [running]
[init.svc.atcid-daemon-u]: [stopped]
[init.svc.audio-daemon]: [stopped]
[init.svc.audioserver]: [running]
[init.svc.batterywarning]: [running]
[init.svc.bluetooth-1-0]: [running]
[init.svc.bluetoothd]: [stopped]
[init.svc.bootanim]: [stopped]
[init.svc.bootlogoupdater]: [stopped]
[init.svc.bugreport]: [stopped]
[init.svc.camerahalserver]: [running]
[init.svc.cameraserver]: [running]
[init.svc.clear-bcb]: [stopped]
[init.svc.console]: [running]
[init.svc.drm]: [running]
[init.svc.dumpstate]: [stopped]
[init.svc.dumpstatez]: [stopped]
[init.svc.flash_recovery]: [stopped]
[init.svc.fuse_usbotg]: [stopped]
[init.svc.gatekeeperd]: [running]
[init.svc.ged_srv]: [running]
[init.svc.hdmi]: [stopped]
查看adbd 的服务状态Android 9.0:/ # getprop |grep adb
[init.svc.adbd]: [running]
[persist.sys.usb.config]: [adb]
[ro.adb.secure]: [1]
[ro.boottime.adbd]: [6366465736]
[service.adb.root]: [1]
[sys.usb.config]: [adb]
[sys.usb.state]: [adb]
Knowin inSight10:/ #
adbd 服务定义在 init.usb.rc里面adbd的服务启动和usb强相关服务的启动和停止总是和usb关连在一起。# Copyright (C) 2012 The Android Open Source Project
#
# USB configuration common for all android devices
#on post-fs-datachown system system /sys/class/android_usb/android0/f_mass_storage/lun/filechmod 0660 /sys/class/android_usb/android0/f_mass_storage/lun/filechown system system /sys/class/android_usb/android0/f_rndis/ethaddrchmod 0660 /sys/class/android_usb/android0/f_rndis/ethaddrmkdir /data/misc/adb 02750 system shellmkdir /data/adb 0700 root root# adbd is controlled via property triggers in init.platform.usb.rc
service adbd /system/bin/adbd --root_seclabelu:r:su:s0class coresocket adbd stream 660 system systemdisabledseclabel u:r:adbd:s0on bootsetprop sys.usb.configfs 0# Used to disable USB when switching states
on property:sys.usb.confignone property:sys.usb.configfs0stop adbdwrite /sys/class/android_usb/android0/enable 0write /sys/class/android_usb/android0/bDeviceClass 0setprop sys.usb.state ${sys.usb.config}# adb only USB configuration
# This is the fallback configuration if the
# USB manager fails to set a standard configuration
on property:sys.usb.configadb property:sys.usb.configfs0write /sys/class/android_usb/android0/enable 0write /sys/class/android_usb/android0/idVendor 18d1write /sys/class/android_usb/android0/idProduct 4EE7write /sys/class/android_usb/android0/functions ${sys.usb.config}write /sys/class/android_usb/android0/enable 1start adbdsetprop sys.usb.state ${sys.usb.config}
#vendor 和 system/vendor Link在一起vendor 英文解释是供应商的意思对我们开发而言也就是除开google的那一套之外都可以归类到vendor下面去比如我们自己客制化的hal也可以放到vendor下面去。 # Link /vendor to /system/vendor for devices without a vendor partition.symlink /system/vendor /vendor
在设备上查看Closed connection on port 1.
android 9.0:/ # ls /system/vendor/
app bin build.prop cache data default.prop etc firmware lib lostfound nvdata odm overlay persist protect_f protect_s res ueventd.rc va
android 9.0:/ # ls /vendor/
app bin build.prop cache data default.prop etc firmware lib lostfound nvdata odm overlay persist protect_f protect_s res ueventd.rc va
# class 对应的属性 core 、main、late_startclass 是类别的意思一共有三种类别。coreueventd、logd、healthd、adbddisabled、lmkdLowMemoryKiller、servicemanager、vold、debuggerd、surfaceflinger、bootanimdisabled等core分类中的服务都是一些核心服务它们不启动后续的服务或系统启动就可能出问题。比如servicemanagerbinder通信大管家它的启动很靠前因为其他服务启动时候需要向servicemanager注册binder服务。vold负责存储类设备的挂载还有surfaceflinger图形显示的核心服务等。maindebuggerd64、drm、media、ril-daemon、installd、flash_recovery、racoondisabled、mtpddisabled、keystore、dumpstatedisabled、mdnsddisabled、pre-recoverydisabled、cmd_servicesdisabled、phasecheckserver、zygote等。main分类中的服务是一些系统的基本服务有了这些服务android系统、Java世界才能正常运行。late_start字面意思是晚些启动。/device/中一些硬件厂商的.rc文件中会将一些服务设置为该类。#Android 增加一个property我们有时候需要增加一个property 在init.rc 里面做判断用来判断某个服务是否已经启动。这个property 也会在设备启动后的build.prop中显示出来。weiqifabsp-ubuntu1804:~/mt8167s-9.0-sdk$ git diff build/make/tools/buildinfo.sh
diff --git a/build/make/tools/buildinfo.sh b/build/make/tools/buildinfo.sh
index 6400b1b402..cdc973275c 100755
--- a/build/make/tools/buildinfo.shb/build/make/tools/buildinfo.sh-75,3 75,4 echo system_init.startsensorservice1echo ro.knowin.version.firmware$BUILD_FIRMWARE_VERSIONecho nfc.debug_enabled0echo nfc.nxp_log_level_nci0
echo sys.zigbee.enable0
weiqifabsp-ubuntu1804:~/mt8167s-9.0-sdk$
#Android 分区fstab这部分和init.rc关系不大但是分区的挂载都是在init.rc里面去触发的所以需要关注。device\mediateksample\xxx\recovery_emmc.fstab
recovery_emmc.fatab
文件内容boot /boot emmc defaults defaults
/dev/block/mmcblk0p2 /cache ext4 defaults defaults
/dev/block/mmcblk0p3 /data ext4 defaults defaults
misc /misc emmc defaults defaults
recovery /recovery emmc defaults defaults
/dev/block/mmcblk0p4 /sdcard vfat defaults defaults
/dev/block/mmcblk0p6 /system ext4 defaults defaults
#给增加的property增加权限不要以为增加了property就可以使用权限了还需要给增加的property在某个位置修改一下。这一步至关重要要不然我们会发现触发了property但是程序却没有执行。weiqifabsp-ubuntu1804:~/mt8167s-9.0-sdk$ git diff system/core/init/stable_properties.h
diff --git a/system/core/init/stable_properties.h b/system/core/init/stable_properties.h
old mode 100644
new mode 100755
index 4972d101f1..262039c57b
--- a/system/core/init/stable_properties.hb/system/core/init/stable_properties.h-58,6 58,7 static const std::setstd::string kExportedActionableProperties {vold.post_fs_data_done,vts.native_server.on,wlan.driver.status,sys.zigbee.enable,};} // namespace init
weiqifabsp-ubuntu1804:~/mt8167s-9.0-sdk$
#增加权限后在init.rc 判断才能触发on property:sys.zigbee.enable1chmod 0666 /dev/ttyMT0chmod 0666 /dev/ttyMT1chmod 0666 /dev/ttyMT2
#在init.rc 里面加上打印日志 write /dev/kmsg [UART0] weiqifa start post-fs-data
然后在dmesg 里面可以看到打印的信息#常见的问题列出的问题是我们项目中遇到的如果大家有遇到可以按照我们的修改方式进行修改。我们在项目中给adb加了key值在data分区下在使用的过程中会发现data目录下的key被篡改通过修改把文件放在vendor下后正常。被篡改的原因可能因为权限问题也可以尝试在放文件的时候修改文件权限只对adbd服务可读访问。还有一个问题是我们的应用需要使用的一些资源放在data下也遇到被篡改。修改的方法与上面的类似我们把文件放在vendor下然后每次开机的时候再拷贝到data目录下确保每次开机文件都存在。当然也可以让app直接访问vendor下的文件。我最这部分的理清主要为了解决我们项目中有一个服务启动速度慢原来依赖的是data分区我把代码修改为依赖sdcard分区在sdcard分区挂载完成后触发我们服务的启动以达到服务开机快速启动的效果。推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈