android4.0.3关于init.c和init.rc

来源:互联网 发布:金蝶软件数据库职位 编辑:程序博客网 时间:2024/06/05 15:56

1.init.c是android启动的第一个进程,init.rc是init.c启动的时候加载的服务配置,init.rc最关键的地方是挂载系统分区,启动zygote虚拟机。

2.init.c的源码如下:

源码路径:system/core/init/init.c

int main(int argc, char **argv){    int fd_count = 0;    struct pollfd ufds[4];    char *tmpdev;    char* debuggable;    char tmp[32];    int property_set_fd_init = 0;    int signal_fd_init = 0;    int keychord_fd_init = 0;    if (!strcmp(basename(argv[0]), "ueventd"))        return ueventd_main(argc, argv);    /* clear the umask */    umask(0);        /* Get the basic filesystem setup we need put         * together in the initramdisk on / and then we'll         * let the rc file figure out the rest.         */    mkdir("/dev", 0755);    mkdir("/proc", 0755);    mkdir("/sys", 0755);    mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755");    mkdir("/dev/pts", 0755);    mkdir("/dev/socket", 0755);    mount("devpts", "/dev/pts", "devpts", 0, NULL);    mount("proc", "/proc", "proc", 0, NULL);    mount("sysfs", "/sys", "sysfs", 0, NULL);        /* indicate that booting is in progress to background fw loaders, etc */    close(open("/dev/.booting", O_WRONLY | O_CREAT, 0000));        /* We must have some place other than / to create the         * device nodes for kmsg and null, otherwise we won't         * be able to remount / read-only later on.         * Now that tmpfs is mounted on /dev, we can actually         * talk to the outside world.         */    open_devnull_stdio();    klog_init();    INFO("reading config file\n");    init_parse_config_file("/init.rc");    /* pull the kernel commandline and ramdisk properties file in */    import_kernel_cmdline(0, import_kernel_nv);    /* don't expose the raw commandline to nonpriv processes */    chmod("/proc/cmdline", 0440);    get_hardware_name(hardware, &revision);    snprintf(tmp, sizeof(tmp), "/init.%s.rc", hardware);    init_parse_config_file(tmp);    action_for_each_trigger("early-init", action_add_queue_tail);    queue_builtin_action(wait_for_coldboot_done_action, "wait_for_coldboot_done");    queue_builtin_action(property_init_action, "property_init");    queue_builtin_action(keychord_init_action, "keychord_init");    queue_builtin_action(console_init_action, "console_init");    queue_builtin_action(set_init_properties_action, "set_init_properties");    /* execute all the boot actions to get us started */    action_for_each_trigger("init", action_add_queue_tail);    /* skip mounting filesystems in charger mode */    if (strcmp(bootmode, "charger") != 0) {        action_for_each_trigger("early-fs", action_add_queue_tail);        action_for_each_trigger("fs", action_add_queue_tail);        action_for_each_trigger("post-fs", action_add_queue_tail);        action_for_each_trigger("post-fs-data", action_add_queue_tail);    }    queue_builtin_action(property_service_init_action, "property_service_init");    queue_builtin_action(signal_init_action, "signal_init");    queue_builtin_action(check_startup_action, "check_startup");    if (!strcmp(bootmode, "charger")) {        action_for_each_trigger("charger", action_add_queue_tail);    } else {        action_for_each_trigger("early-boot", action_add_queue_tail);        action_for_each_trigger("boot", action_add_queue_tail);    }        /* run all property triggers based on current state of the properties */    queue_builtin_action(queue_property_triggers_action, "queue_propety_triggers");#if BOOTCHART    queue_builtin_action(bootchart_init_action, "bootchart_init");#endif    for(;;) {        int nr, i, timeout = -1;        execute_one_command();        restart_processes();        if (!property_set_fd_init && get_property_set_fd() > 0) {            ufds[fd_count].fd = get_property_set_fd();            ufds[fd_count].events = POLLIN;            ufds[fd_count].revents = 0;            fd_count++;            property_set_fd_init = 1;        }        if (!signal_fd_init && get_signal_fd() > 0) {            ufds[fd_count].fd = get_signal_fd();            ufds[fd_count].events = POLLIN;            ufds[fd_count].revents = 0;            fd_count++;            signal_fd_init = 1;        }        if (!keychord_fd_init && get_keychord_fd() > 0) {            ufds[fd_count].fd = get_keychord_fd();            ufds[fd_count].events = POLLIN;            ufds[fd_count].revents = 0;            fd_count++;            keychord_fd_init = 1;        }        if (process_needs_restart) {            timeout = (process_needs_restart - gettime()) * 1000;            if (timeout < 0)                timeout = 0;        }        if (!action_queue_empty() || cur_action)            timeout = 0;#if BOOTCHART        if (bootchart_count > 0) {            if (timeout < 0 || timeout > BOOTCHART_POLLING_MS)                timeout = BOOTCHART_POLLING_MS;            if (bootchart_step() < 0 || --bootchart_count == 0) {                bootchart_finish();                bootchart_count = 0;            }        }#endif        nr = poll(ufds, fd_count, timeout);        if (nr <= 0)            continue;        for (i = 0; i < fd_count; i++) {            if (ufds[i].revents == POLLIN) {                if (ufds[i].fd == get_property_set_fd())                    handle_property_set_fd();                else if (ufds[i].fd == get_keychord_fd())                    handle_keychord();                else if (ufds[i].fd == get_signal_fd())                    handle_signal();            }        }    }    return 0;}

3.init.rc的源码如下

源码路径:core/rootdir/init.rc

on early-init    # Set init and its forked children's oom_adj.    write /proc/1/oom_adj -16    start ueventd# create mountpoints    mkdir /mnt 0775 root systemon initsysclktz 0loglevel 3# setup the global environment    export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin    export LD_LIBRARY_PATH /vendor/lib:/system/lib    export ANDROID_BOOTLOGO 1    export ANDROID_ROOT /system    export ANDROID_ASSETS /system/app    export ANDROID_DATA /data    export ASEC_MOUNTPOINT /mnt/asec    export LOOP_MOUNTPOINT /mnt/obb    export BOOTCLASSPATH /system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/filterfw.jar# Backward compatibility    symlink /system/etc /etc    symlink /sys/kernel/debug /d# Right now vendor lives on the same filesystem as system,# but someday that may change.    symlink /system/vendor /vendor# Create cgroup mount point for cpu accounting    mkdir /acct    mount cgroup none /acct cpuacct    mkdir /acct/uid    mkdir /system    mkdir /data 0771 system system    mkdir /cache 0770 system cache    mkdir /config 0500 root root    # Directory for putting things only root should see.    mkdir /mnt/secure 0700 root root    # Directory for staging bindmounts    mkdir /mnt/secure/staging 0700 root root    # Directory-target for where the secure container    # imagefile directory will be bind-mounted    mkdir /mnt/secure/asec  0700 root root    # Secure container public mount points.    mkdir /mnt/asec  0700 root system    mount tmpfs tmpfs /mnt/asec mode=0755,gid=1000    # Filesystem image public mount points.    mkdir /mnt/obb 0700 root system    mount tmpfs tmpfs /mnt/obb mode=0755,gid=1000    write /proc/sys/kernel/panic_on_oops 1    write /proc/sys/kernel/hung_task_timeout_secs 0    write /proc/cpu/alignment 4    write /proc/sys/kernel/sched_latency_ns 10000000    write /proc/sys/kernel/sched_wakeup_granularity_ns 2000000    write /proc/sys/kernel/sched_compat_yield 1    write /proc/sys/kernel/sched_child_runs_first 0    write /proc/sys/kernel/randomize_va_space 2# Create cgroup mount points for process groups    mkdir /dev/cpuctl    mount cgroup none /dev/cpuctl cpu    chown system system /dev/cpuctl    chown system system /dev/cpuctl/tasks    chmod 0777 /dev/cpuctl/tasks    write /dev/cpuctl/cpu.shares 1024    mkdir /dev/cpuctl/fg_boost    chown system system /dev/cpuctl/fg_boost/tasks    chmod 0777 /dev/cpuctl/fg_boost/tasks    write /dev/cpuctl/fg_boost/cpu.shares 1024    mkdir /dev/cpuctl/bg_non_interactive    chown system system /dev/cpuctl/bg_non_interactive/tasks    chmod 0777 /dev/cpuctl/bg_non_interactive/tasks    # 5.0 %    write /dev/cpuctl/bg_non_interactive/cpu.shares 52# Allow everybody to read the xt_qtaguid resource tracking misc dev.# This is needed by any process that uses socket tagging.    chmod 0644 /dev/xt_qtaguidon fs# mount mtd partitions    # Mount /system rw first to give the filesystem a chance to save a checkpoint    mount yaffs2 mtd@system /system    mount yaffs2 mtd@system /system rw remount    mount yaffs2 mtd@userdata /data nosuid nodev    mount yaffs2 mtd@cache /cache nosuid nodevon post-fs    # once everything is setup, no need to modify /    mount rootfs rootfs / rw remount    # We chown/chmod /cache again so because mount is run as root + defaults    chown system cache /cache    chmod 0770 /cache    # This may have been created by the recovery system with odd permissions    chown system cache /cache/recovery    chmod 0770 /cache/recovery    #change permissions on vmallocinfo so we can grab it from bugreports    chown root log /proc/vmallocinfo    chmod 0440 /proc/vmallocinfo    #change permissions on kmsg & sysrq-trigger so bugreports can grab kthread stacks    chown root system /proc/kmsg    chmod 0440 /proc/kmsg    chown root system /proc/sysrq-trigger    chmod 0220 /proc/sysrq-trigger    # create the lost+found directories, so as to enforce our permissions    mkdir /cache/lost+found 0770 root rooton post-fs-data    # We chown/chmod /data again so because mount is run as root + defaults    chown system system /data    chmod 0771 /data    # Create dump dir and collect dumps.    # Do this before we mount cache so eventually we can use cache for    # storing dumps on platforms which do not have a dedicated dump partition.    mkdir /data/dontpanic 0750 root log    # Collect apanic data, free resources and re-arm trigger    copy /proc/apanic_console /data/dontpanic/apanic_console    chown root log /data/dontpanic/apanic_console    chmod 0640 /data/dontpanic/apanic_console    copy /proc/apanic_threads /data/dontpanic/apanic_threads    chown root log /data/dontpanic/apanic_threads    chmod 0640 /data/dontpanic/apanic_threads    write /proc/apanic_console 1    # create basic filesystem structure    mkdir /data/misc 01771 system misc    ###cym mkdir /data/misc/bluetoothd 0770 bluetooth bluetooth    ###cym mkdir /data/misc/bluetooth 0770 system system    mkdir /data/misc/keystore 0700 keystore keystore    mkdir /data/misc/keychain 0771 system system    mkdir /data/misc/vpn 0770 system vpn    mkdir /data/misc/systemkeys 0700 system system    # give system access to wpa_supplicant.conf for backup and restore    ###cym mkdir /data/misc/wifi 0770 wifi wifi    # chmod 0660 /data/misc/wifi/wpa_supplicant.conf    ###cym chmod 0660 /system/etc/wifi/wpa_supplicant.conf    ###cym chown wifi wifi /system/etc/wifi/wpa_supplicant.conf    ###cym mkdir /data/misc/dhcp 0775 dhcp dhcp    ###cym mkdir /data/misc/wifi/sockets 0777 wifi wifi    #mkdir /data/system 0775 wifi wifi    ###cym mkdir /data/system 0775 system system     ###cym mkdir /data/system/wpa_supplicant 0777 wifi wifi     mkdir /data/misc/wifi/hostapd 0777 wifi wifi    chown bluetooth bluetooth /dev/ttySAC0    chmod 0660 /dev/ttySAC0    mkdir /data/local 0771 shell shell    mkdir /data/local/tmp 0771 shell shell    mkdir /data/data 0771 system system    mkdir /data/app-private 0771 system system    mkdir /data/app 0771 system system    mkdir /data/property 0700 root root    # create dalvik-cache, so as to enforce our permissions    mkdir /data/dalvik-cache 0771 system system    # create resource-cache and double-check the perms    mkdir /data/resource-cache 0771 system system    chown system system /data/resource-cache    chmod 0771 /data/resource-cache    # create the lost+found directories, so as to enforce our permissions    mkdir /data/lost+found 0770 root root    # create directory for DRM plug-ins    mkdir /data/drm 0774 drm drm    # If there is no fs-post-data action in the init.<device>.rc file, you    # must uncomment this line, otherwise encrypted filesystems    # won't work.    # Set indication (checked by vold) that we have finished this action    #setprop vold.post_fs_data_done 1    chown system system /sys/class/android_usb/android0/f_mass_storage/lun/file    chmod 0660 /sys/class/android_usb/android0/f_mass_storage/lun/file    chown system system /sys/class/android_usb/android0/f_rndis/ethaddr    chmod 0660 /sys/class/android_usb/android0/f_rndis/ethaddron boot# basic network init    ifup lo    hostname localhost    domainname localdomain# set RLIMIT_NICE to allow priorities from 19 to -20    setrlimit 13 40 40# Memory management.  Basic kernel parameters, and allow the high# level system server to be able to adjust the kernel OOM driver# paramters to match how it is managing things.    write /proc/sys/vm/overcommit_memory 1    write /proc/sys/vm/min_free_order_shift 4    chown root system /sys/module/lowmemorykiller/parameters/adj    chmod 0664 /sys/module/lowmemorykiller/parameters/adj    chown root system /sys/module/lowmemorykiller/parameters/minfree    chmod 0664 /sys/module/lowmemorykiller/parameters/minfree    # Tweak background writeout    write /proc/sys/vm/dirty_expire_centisecs 200    write /proc/sys/vm/dirty_background_ratio  5    # Permissions for System Server and daemons.    chown radio system /sys/android_power/state    chown radio system /sys/android_power/request_state    chown radio system /sys/android_power/acquire_full_wake_lock    chown radio system /sys/android_power/acquire_partial_wake_lock    chown radio system /sys/android_power/release_wake_lock    chown radio system /sys/power/state    chown radio system /sys/power/wake_lock    chown radio system /sys/power/wake_unlock    chmod 0660 /sys/power/state    chmod 0660 /sys/power/wake_lock    chmod 0660 /sys/power/wake_unlock        #chy add for reset modem    chown root  radio /sys/devices/platform/smm_modem/control    chmod 0666 /sys/devices/platform/smm_modem/control    chmod 0777 /dev/modemctl    chown system system /sys/class/timed_output/vibrator/enable    chown system system /sys/class/leds/keyboard-backlight/brightness    chown system system /sys/class/leds/lcd-backlight/brightness    chown system system /sys/class/leds/button-backlight/brightness    chown system system /sys/class/leds/jogball-backlight/brightness    chown system system /sys/class/leds/red/brightness    chown system system /sys/class/leds/green/brightness    chown system system /sys/class/leds/blue/brightness    chown system system /sys/class/leds/red/device/grpfreq    chown system system /sys/class/leds/red/device/grppwm    chown system system /sys/class/leds/red/device/blink    chown system system /sys/class/leds/red/brightness    chown system system /sys/class/leds/green/brightness    chown system system /sys/class/leds/blue/brightness    chown system system /sys/class/leds/red/device/grpfreq    chown system system /sys/class/leds/red/device/grppwm    chown system system /sys/class/leds/red/device/blink    chown system system /sys/class/timed_output/vibrator/enable    chown system system /sys/module/sco/parameters/disable_esco    chown system system /sys/kernel/ipv4/tcp_wmem_min    chown system system /sys/kernel/ipv4/tcp_wmem_def    chown system system /sys/kernel/ipv4/tcp_wmem_max    chown system system /sys/kernel/ipv4/tcp_rmem_min    chown system system /sys/kernel/ipv4/tcp_rmem_def    chown system system /sys/kernel/ipv4/tcp_rmem_max    chown root radio /proc/cmdline# Define TCP buffer sizes for various networks#   ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax,    setprop net.tcp.buffersize.default 4096,87380,110208,4096,16384,110208    setprop net.tcp.buffersize.wifi    524288,1048576,2097152,262144,524288,1048576    setprop net.tcp.buffersize.lte     524288,1048576,2097152,262144,524288,1048576    setprop net.tcp.buffersize.umts    4094,87380,110208,4096,16384,110208    setprop net.tcp.buffersize.hspa    4094,87380,262144,4096,16384,262144    setprop net.tcp.buffersize.edge    4093,26280,35040,4096,16384,35040    setprop net.tcp.buffersize.gprs    4092,8760,11680,4096,8760,11680setprop ro.nfc.port "I2C"chmod 0666 /dev/snfc-n2# Set this property so surfaceflinger is not started by system_init    setprop system_init.startsurfaceflinger 0    class_start core    class_start mainon nonencrypted    class_start late_starton charger    class_start chargeron property:vold.decrypt=trigger_reset_main    class_reset mainon property:vold.decrypt=trigger_load_persist_props    load_persist_propson property:vold.decrypt=trigger_post_fs_data    trigger post-fs-dataon property:vold.decrypt=trigger_restart_min_framework    class_start mainon property:vold.decrypt=trigger_restart_framework    class_start main    class_start late_starton property:vold.decrypt=trigger_shutdown_framework    class_reset late_start    class_reset main# Used to disable USB when switching stateson property:sys.usb.config=none    stop adbd    write /sys/class/android_usb/android0/enable 0    write /sys/class/android_usb/android0/bDeviceClass 0    setprop sys.usb.state $sys.usb.config# adb only USB configuration# This should only be used during device bringup# and as a fallback if the USB manager fails to set a standard configurationon property:sys.usb.config=adb    write /sys/class/android_usb/android0/enable 0    write /sys/class/android_usb/android0/idVendor 18d1    write /sys/class/android_usb/android0/idProduct D002    write /sys/class/android_usb/android0/functions $sys.usb.config    write /sys/class/android_usb/android0/enable 1    start adbd    setprop sys.usb.state $sys.usb.config# USB accessory configurationon property:sys.usb.config=accessory    write /sys/class/android_usb/android0/enable 0    write /sys/class/android_usb/android0/idVendor 18d1    write /sys/class/android_usb/android0/idProduct 2d00    write /sys/class/android_usb/android0/functions $sys.usb.config    write /sys/class/android_usb/android0/enable 1    setprop sys.usb.state $sys.usb.config# USB accessory configuration, with adbon property:sys.usb.config=accessory,adb    write /sys/class/android_usb/android0/enable 0    write /sys/class/android_usb/android0/idVendor 18d1    write /sys/class/android_usb/android0/idProduct 2d01    write /sys/class/android_usb/android0/functions $sys.usb.config    write /sys/class/android_usb/android0/enable 1    start adbd    setprop sys.usb.state $sys.usb.config# Used to set USB configuration at boot and to switch the configuration# when changing the default configurationon property:persist.sys.usb.config=*    setprop sys.usb.config $persist.sys.usb.config## Daemon processes to be run by init.##service ueventd /sbin/ueventd    class core    criticalservice console /system/bin/sh    class core    console    disabled #   user shell    group logon property:ro.debuggable=1    start console# adbd is controlled via property triggers in init.<platform>.usb.rcservice adbd /sbin/adbd    class core    disabled# adbd on at boot in emulatoron property:ro.kernel.qemu=1    start adbd# This property trigger has added to imitiate the previous behavior of "adb root".# The adb gadget driver used to reset the USB bus when the adbd daemon exited,# and the host side adb relied on this behavior to force it to reconnect with the# new adbd instance after init relaunches it. So now we force the USB bus to reset# here when adbd sets the service.adb.root property to 1.  We also restart adbd here# rather than waiting for init to notice its death and restarting it so the timing# of USB resetting and adb restarting more closely matches the previous behavior.on property:service.adb.root=1    write /sys/class/android_usb/android0/enable 0    restart adbd    write /sys/class/android_usb/android0/enable 1service servicemanager /system/bin/servicemanager    class core    user system    group system    critical    onrestart restart zygote    onrestart restart media    onrestart restart surfaceflinger    onrestart restart drmservice vold /system/bin/vold    class core    socket vold stream 0660 root mount    ioprio be 2service netd /system/bin/netd    class main    socket netd stream 0660 root system    socket dnsproxyd stream 0660 root inetservice debuggerd /system/bin/debuggerd    class main#service ril-daemon /system/bin/rild#    class main##    socket rild stream 660 root radio## chy modify @20120312#    socket rild stream 666 root radio#    socket rild-debug stream 660 radio system#    user root#    group radio cache inet misc audio sdcard_rw log#add by cym for UNAPLUSservice ril-daemon /system/bin/rild -l /system/lib/usiuna-ril.so -- -d /dev/ttyUSB1     class main     socket rild stream 660 root radio     socket rild-debug stream 660 radio system     user root     group radio cache inet misc audio sdcard_rw logservice pppd_gprs /system/bin/logwrapper /etc/ppp/call-pppd     class main     user root     group radio cache inet misc     disabled     oneshotservice dhcpd_start /system/bin/logwrapper /etc/ppp/dhcpd_start     class main     user root     group radio dhcp     disabled     oneshotservice dhcp_stop /system/bin/logwrapper /etc/ppp/dhcpd_stop     class main     user root     group radio dhcp     disabled     oneshot#on property:ril.unap_state=*#     write /sys/bus/usb/devices/1-2.1/power/control $ril.unap_state#on property:ril.unap_state=*#     write /sys/bus/usb/devices/1-2.1/power/control ${ril.unap_state}#end addservice surfaceflinger /system/bin/surfaceflinger    class main    user system    group graphics    onrestart restart zygoteservice zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server    class main    socket zygote stream 666    onrestart write /sys/android_power/request_state wake    onrestart write /sys/power/state on    onrestart restart media    onrestart restart netdservice drm /system/bin/drmserver    class main    user drm    group system inet drmrpcservice media /system/bin/mediaserver    class main    user media    group audio camera inet net_bt net_bt_admin net_bw_acct drmrpc    ioprio rt 4service bootanim /system/bin/bootanimation    class main    user graphics    group graphics    disabled    oneshotservice dbus /system/bin/dbus-daemon --system --nofork    class main    socket dbus stream 660 bluetooth bluetooth    user bluetooth    group bluetooth net_bt_adminservice bluetoothd /system/bin/bluetoothd -n    class main    socket bluetooth stream 660 bluetooth bluetooth    socket dbus_bluetooth stream 660 bluetooth bluetooth    # init.rc does not yet support applying capabilities, so run as root and    # let bluetoothd drop uid to bluetooth with the right linux capabilities    group bluetooth net_bt_admin misc    disabledservice hfag /system/bin/sdptool add --channel=10 HFAG    class main    user bluetooth    group bluetooth net_bt_admin    disabled    oneshotservice hsag /system/bin/sdptool add --channel=11 HSAG    class main    user bluetooth    group bluetooth net_bt_admin    disabled    oneshotservice opush /system/bin/sdptool add --channel=12 OPUSH    class main    user bluetooth    group bluetooth net_bt_admin    disabled    oneshotservice pbap /system/bin/sdptool add --channel=19 PBAP    class main    user bluetooth    group bluetooth net_bt_admin    disabled    oneshotservice installd /system/bin/installd    class main    socket installd stream 600 system systemservice flash_recovery /system/etc/install-recovery.sh    class main    oneshotservice abtfilt /system/bin/wlan_tool abtfiltclass main    user bluetooth    group system bluetooth net_bt_admin inet    disabled    oneshotservice racoon /system/bin/racoon    class main    socket racoon stream 600 system system    # IKE uses UDP port 500. Racoon will setuid to vpn after binding the port.    group vpn net_admin inet    disabled    oneshotservice mtpd /system/bin/mtpd    class main    socket mtpd stream 600 system system    user vpn    group vpn net_admin inet net_raw    disabled    oneshotservice keystore /system/bin/keystore /data/misc/keystore    class main    user keystore    group keystore    socket keystore stream 666service dumpstate /system/bin/dumpstate -s    class main    socket dumpstate stream 0660 shell log    disabled    oneshot#remove by cym 20130408#service bccmd /system/bin/bccmd -t bcsp -b 115200 -d /dev/ttySAC0 psload -r /system/bluetooth/A31_Script_20110215.psr#    class main#disabled#oneshot#service hciattach /system/bin/hciattach -s 921600 /dev/ttySAC0 bcsp 921600 flow#    class main#    disabled#    oneshot     ###cym service dhcpcd_bnep0 /system/bin/dhcpcd -ABKL#class main#disabled#oneshot#service iprenew_p2p /system/bin/dhcpcd -n#class main#disabled#oneshot#service iprenew_bnep0 /system/bin/dhcpcd -n#class main#disabled#oneshot 


0 0
原创粉丝点击