Android:4.4.4
在Android设备上,现在我们外接了一个USB转串口的设备,设备节点是/dev/ttyUSB0:
# ls -l /dev/ttyUSB0
crw-rw---- 1 root root 188, 0 /dev/ttyUSB0
crw-rw---- 1 root selfgroup 188, 0 /dev/ttyUSB0
接下来就是怎么添加我们自己的用户组。
在Android中,每一个用户组都有一个唯一的ID号,定义在文件:
system\core\include\private\android_filesystem_config.h
/* This is the master Users and Groups config for the platform.
* DO NOT EVER RENUMBER
*/
#define AID_ROOT 0 /* traditional unix root user */
#define AID_SYSTEM 1000 /* system server */
#define AID_RADIO 1001 /* telephony subsystem, RIL */
#define AID_BLUETOOTH 1002 /* bluetooth subsystem */
#define AID_GRAPHICS 1003 /* graphics devices */
#define AID_INPUT 1004 /* input devices */
#define AID_AUDIO 1005 /* audio devices */
#define AID_CAMERA 1006 /* camera devices */
仿照其添加自己的ID号(不允许重复)、并赋予它一个字符串的名字(后文用到):
/** 第1步 */
#define AID_SELF_GROUP 8011
/** 第2步 */
static const struct android_id_info android_ids[] = {
{ "root", AID_ROOT, },
{省略 .......................},
/** 自定义组名 */
{{ "selfgroup", AID_SELF_GROUP, },},
}
编译boot.img并烧录,重启后查看节点组别已经变成自定义的“selfgroup”。
设备中App要访问我们的设备,需要加入“selfgroup”组中。所以我们需要提供权限信息给App,使得App:
即可加入到“selfgroup”组中。
Android源码/frameworks/base/data/etc/platform.xml
Android源码/frameworks/base/core/res/AndroidManifest.xml
Android源码/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
public final class ActivityManagerService extends ActivityManagerNative {
static final String TAG = "ActivityManager";
private final void startProcessLocked(ProcessRecord app,
String hostingType, String hostingNameStr) {
int uid = app.uid;
int[] gids = null;
StringBuilder buf = mStringBuilder;
buf.setLength(0);
buf.append("Start proc ");
buf.append(app.processName);
buf.append(" for ");
buf.append(hostingType);
if (hostingNameStr != null) {
buf.append(" ");
buf.append(hostingNameStr);
}
buf.append(": pid=");
buf.append(startResult.pid);
buf.append(" uid=");
buf.append(uid);
buf.append(" gids={");
if (gids != null) {
for (int gi=0; gi
比如启动微信Log:
I/ActivityManager( 977): Start proc com.tencent.mm for activity com.tencent.mm/.ui.LauncherUI: pid=11060 uid=10258 gids={50258, 3003, 1028, 1015, 1023, 3002, 3001}