今天调试网络服务的时候为了区分,修改了原有服务名称,同时新增了两个服务。

系统运行的时候报错找不到对应的服务

init: no such service 'wpa_supplicant_common'

cat init.rc文件,查看对应的服务是否存在对应的rc文件。

# wifi service
# wifi sta service
service wpa_supplicant_common /system/bin/wpa_supplicant p2p_supported=false \
-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
-I/system/etc/wifi/wpa_supplicant_overlay.conf \
-O/data/misc/wifi/sockets -e/data/misc/wifi/entropy.bin
class main
socket wpa_wlan0 dgram 660 wifi wifi
disabled
oneshot # wifi sta p2p concurrent service
service p2p_supplicant_common /system/bin/wpa_supplicant p2p_supported=true \
-ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \
-e/data/misc/wifi/entropy.bin -N \
-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
-I/system/etc/wifi/wpa_supplicant_overlay.conf \
-O/data/misc/wifi/sockets
class main
socket wpa_wlan0 dgram 660 wifi wifi
disabled
oneshot # for rtl wifi
service p2p_supplicant_rtl /system/bin/wpa_supplicant \
-ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf -e/data/misc/wifi/entropy.bin -N \
-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf
class main
socket wpa_wlan0 dgram 660 wifi wifi
group wifi inet
disabled
oneshot service wpa_supplicant_rtl /system/bin/wpa_supplicant \
-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
-e/data/misc/wifi/entropy.bin
class main
socket wpa_wlan0 dgram 660 wifi wifi
group wifi inet
disabled
oneshot

确认服务是已经添加到了对应的文件。

手动启动服务再测试一下,同样显示找不到对应的服务。

setprop ctl.start wpa_supplicant_common
[ 126.046251] init: no such service 'wpa_supplicant_common'
dolphin-fvd-p1:/ # setprop ctl.start wpa_supplicant_rtl
[ 136.016232] init: no such service 'wpa_supplicant_rtl'
.589306] init: no such service 'wpa_supplicant_common'

查看系统开机的init log,提示无效的服务名。

[    1.816434] init: /init.sun8iw7p1.rc: 291: invalid service name 'wpa_supplicant_common'
[ 1.825430] init: /init.sun8iw7p1.rc: 304: invalid service name 'p2p_supplicant_common'
[ 1.834409] init: /init.sun8iw7p1.rc: 313: invalid service name 'p2p_supplicant_rtl'
[ 1.843091] init: /init.sun8iw7p1.rc: 322: invalid service name 'wpa_supplicant_rtl'

原本的服务名是

wpa_supplicant
p2p_supplicant

但是为了适应不同的wifi模块所以新加后缀方便区分。

查看init源码,检查服务名称invalid的判定规则。

bool ServiceParser::ParseSection(const std::vector<std::string>& args,
789 std::string* err) {
790 if (args.size() < 3) {
791 *err = "services must have a name and a program";
792 return false;
793 }
794
795 const std::string& name = args[1];
796 if (!IsValidName(name)) {
797 *err = StringPrintf("invalid service name '%s'", name.c_str());
798 return false;
799 }
800
801 std::vector<std::string> str_args(args.begin() + 2, args.end());
802 service_ = std::make_unique<Service>(name, "default", str_args);
803 return true;
804 } bool ServiceParser::IsValidName(const std::string& name) const {
819 if (name.size() > 16) {
820 return false;
821 }
822 for (const auto& c : name) {
823 if (!isalnum(c) && (c != '_') && (c != '-')) {
824 return false;
825 }
826 }
827 return true;
828 }

从上可以看出android的服务名称限制如下:

1、必须小于等于16个字符。

2、只允许数字、字母及下划线、中划线。

查看修改后的服务名称明显都超出了16个字符,所以只需要服务名称再16个字符内即可。

[    1.816434] init: /init.sun8iw7p1.rc: 291: invalid service name 'wpa_supplicant_common'
[ 1.825430] init: /init.sun8iw7p1.rc: 304: invalid service name 'p2p_supplicant_common'
[ 1.834409] init: /init.sun8iw7p1.rc: 313: invalid service name 'p2p_supplicant_rtl'
[ 1.843091] init: /init.sun8iw7p1.rc: 322: invalid service name 'wpa_supplicant_rtl'

重新修改后名称如下,验证已解决。

# wifi service
# wifi sta service
service wpa_supp_com /system/bin/wpa_supplicant p2p_supported=false \
............. # wifi sta p2p concurrent service
service p2p_supp_com /system/bin/wpa_supplicant p2p_supported=true \
....................
# for rtl wifi
service p2p_supp_rtl /system/bin/wpa_supplicant \
............. service wpa_supp_rtl /system/bin/wpa_supplicant \
......................

Android 服务名称规则invalid service name 限制16字符以内的更多相关文章

  1. Android 服务类Service 的详细学习

    http://blog.csdn.net/vipzjyno1/article/details/26004831 Android服务类Service学习四大组建   目录(?)[+] 什么是服务 服务有 ...

  2. Android Service 服务(一)—— Service .

    http://blog.csdn.net/ithomer/article/details/7364024 一. Service简介 Service是android 系统中的四大组件之一(Activit ...

  3. Android服务Service总结

    转自 http://blog.csdn.net/liuhe688/article/details/6874378 富貴必從勤苦得,男兒須讀五車書.唐.杜甫<柏學士茅屋> 作为程序员的我们, ...

  4. Java乔晓松-android的四大组件之一Service(服务的绑定)

    android的四大组件之一Service(服务的绑定) 怎么绑定服务,又怎么解除服务,代码如下: MainActivity.java源码: package com.example.lesson14_ ...

  5. Android服务Service具体解释(作用,生命周期,AIDL)系列文章-为什么须要服务呢?

    Android服务Service具体解释(作用,生命周期,AIDL) 近期沉迷于上班,没有时间写博客了.解衣入睡,未眠.随起床写一篇博客压压惊! ##我们android系统为什么须要服务Service ...

  6. Android服务Service

    安卓Service服务 一    Service简介 Service是运行在后台的,没有界面的,用来处理耗时比较长的.Service不是一个单独的进程,也不是一个单独的线程. Service有两种类型 ...

  7. Kubernetes K8S之Pod跨namespace名称空间访问Service服务

    Kubernetes的两个Service(ServiceA.ServiceB)和对应的Pod(PodA.PodB)分别属于不同的namespace名称空间,现需要PodA和PodB跨namespace ...

  8. Android 代码混淆规则

    1. Proguard介绍 Android SDK自带了混淆工具Proguard.它位于SDK根目录toolsproguard下面.ProGuard是一个免费的Java类文件收缩,优化,混淆和预校验器 ...

  9. Android 四大组件之二(Service)

    service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务 ...

随机推荐

  1. 分布式搜索引擎Elasticsearch在CentOS7中的安装

    1. 概述 随着企业业务量的不断增大,业务数据随之增加,传统的基于关系型数据库的搜索已经不能满足需要. 在关系型数据库中搜索,只能支持简单的关键字搜索,做不到分词和统计的功能,而且当单表数据量到达上百 ...

  2. java中避免集合死链调用

    目录 1. 前言 2. 场景 3. 环境 3.1 开发环境准备 3.2 数据准备 3.2.1 Mysql数据库表及数据 3.2.2 redis库数据 4. 解决方式 5.完整代码 5.1Model 5 ...

  3. Redis 日志篇:无畏宕机快速恢复的杀手锏

    特立独行是对的,融入圈子也是对的,重点是要想清楚自己向往怎样的生活,为此愿意付出怎样的代价. 我们通常将 Redis 作为缓存使用,提高读取响应性能,一旦 Redis 宕机,内存中的数据全部丢失,假如 ...

  4. Windows 11 正式版 Build 22000.194 官方简体中文版、英文版(消费者版、商业版)下载

    昨天阿三正式发布了 Windows 11,版本号竟然是 22000.194,也就是 9 月 16 日的 测试版 22000.194,仅仅是文件改了个名,特别是消费者版本 hash 校验都是一致的. W ...

  5. keepalived 安装和配置解析

    Keepalived的特性     配置文件简单:配置文件比较简单,可通过简单配置实现高可用功能     稳定性强:keepalived是一个类似于layer3, 4 & 7交换机制的软件,具 ...

  6. .Net Core with 微服务 - 使用 AgileDT 快速实现基于可靠消息的分布式事务

    前面对于分布式事务也讲了好几篇了(可靠消息最终一致性 分布式事务 - TCC 分布式事务 - 2PC.3PC),但是还没有实战过.那么本篇我们就来演示下如何在 .NET 环境下实现一个基于可靠消息的分 ...

  7. Java(11)方法详细介绍

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201577.html 博客主页:https://www.cnblogs.com/testero ...

  8. UE4蓝图AI角色制作(四)之Gameplay调试器

    8. 寻路网格体和Gameplay调试器 为了及时识别出AI系统中的导航问题,UE4提供了一个工具用来解决这类问题,它叫Gameplay调试器.打开项目设置,在左侧找到"引擎",然 ...

  9. Golang通脉之结构体

    Go语言中的基础数据类型可以表示一些事物的基本属性,但是要表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供了一种自定义数据类型,可以封装多个基本数据类型, ...

  10. 更好的 java 重试框架 sisyphus 的 3 种使用方式

    回顾 我们前面学习了 更好的 java 重试框架 sisyphus 入门简介 更好的 java 重试框架 sisyphus 配置的 2 种方式介绍 更好的 java 重试框架 sisyphus 背后的 ...