Android的UEvent流程分析

Android系统的流程如下:

1 system server的main函数中:ServerThread thr = new ServerThread();  启动了Server进程
2 ServerThread类的initAndLoop()函数有如下代码:
    boolean disableMedia = SystemProperties.getBoolean("config.disable_media", false);
    if (!disableMedia) {
           try {
                Slog.i(TAG, "Wired Accessory Manager");
                // Listen for wired headset changes
                inputManager.setWiredAccessoryCallbacks(new WiredAccessoryManager(context, inputManager));
            } catch (Throwable e) {
                reportWtf("starting WiredAccessoryManager", e);
            }
    }
 上述代码创建了WiredAccessoryManager类
3 在WiredAccessoryManager类的构造函数中:private final WiredAccessoryObserver mObserver;   mObserver = new WiredAccessoryObserver();

创建了Observer类
4 WiredAccessoryObserver类,继承自UEventObserver,负责完成UEvent的事件监控。其构造函数中:mUEventInfo = makeObservedUEventList(); 实现了对UEvent List的注册。
5 makeObservedUEventList函数,返回值为List,每个节点为需要监测的UEvent类型。


Linux内核的代码流程:

1 相关核心文件为:

/drivers/switch/switch_gpio.c
/drivers/switch/switch_class.c

2、在/sys/class/switch目录下创建某个具体设备,通过switch_dev_register(&headset->sdev);来实现,创建完成后出现/sys/class/switch/XXX(如hdmi、h2w等)

3、在/sys/class/switch/的具体设备文件节点目录下创建设备的属性文件(比如“name”和“state”),创建完成后出现/sys/class/switch/XXX/name和/sys/class/switch/XXX/state,具体实现如下:
static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, state_show, NULL); // state_show实现对state属性文件读操作
static DEVICE_ATTR(name, S_IRUGO | S_IWUSR, name_show, NULL);//name_show实现对name属性文件读操作
int ret;
ret = device_create_file(sdev->dev, &dev_attr_name);
ret = device_create_file(sdev->dev, &dev_attr_state);

你可能感兴趣的:(Linux内核,Android)