Android的hidl运用,在vendor/qcom/proprietary/qrdplus/PowerOffAlarm/hidl-impll/Alarm.cpp中 有这样的一个方法,Return<int32_t> Alarm::setAlarm(int64_t time) 里面定义了 struct rtc_wkalrm rtc_alarm fd = open("/dev/rtc0" ,0_RDOONLY); 然后就给rtc_alarm 这个结构体赋值,这个结构体是kernel驱动中的,kernel驱动就可以拿到了,为什么?
时间: 2024-02-05 12:02:40 浏览: 143
这是因为在Linux系统中,设备驱动程序是以模块的形式存在的,模块可以向内核注册自己的设备驱动程序,通过系统调用接口向用户层提供设备操作函数,这样用户层就可以通过系统调用来操作设备了。在这个例子中,打开 "/dev/rtc0" 设备文件是通过系统调用实现的,系统调用会被内核拦截并处理,最终调用驱动程序中的对应函数。因此,通过打开设备文件,就可以获取到内核中对应驱动程序中的数据结构,即 struct rtc_wkalrm,这个数据结构是内核中 RTC 设备驱动程序中定义的。
相关问题
还是之前的那个问题 framework调用到了这个hidl的cpp, vendor/qcom/proprietary/qrdplus/PowerOOffAalrm/hidl-impl/Alarm.cpp #define DEFAULT_RTC_DEV_PATH "dev/rtc0" Return<int32_t> Alarm::setAlarm(int64_t time){ struct rtc_wkalrm rtc_alarm; fd=open(DEFAULT_RTC_DEV_PATH ,0——RDONLY); rtc_alarm.timme.tm_sec=xxxxxx; rtc_alarm.timme.tm_min=xxxxxx; rtc_alarm.timme.tm_hour=xxxxxx; rtc_alarm.timme.tm_mon=xxxxxx; rtc_alarm.timme.tm_year=xxxxxx; rtc_alarm.timme.tm_wday=xxxxxx; rtc_alarm.timme.tm_yday=xxxxxx; rtc_alarm.timme.tm_isdst=xxxxxx; } 为什么这样就可以调用我的驱动? rtc-pm8xxx.c里面的pm8xxx_rtc_set_alarm, rtc_wkalrm 是我的驱动 rtc-pm8xxx.c的结构体, 而pm8xxx_rtc_set_alarm又属于 static const struct rtc_class_ops_pm8xxx_rtc_ops 的成员变量.set_alarm
这是因为在Linux中,驱动程序通过实现一组结构体中的函数来提供一些操作接口,这组结构体通常被称为字符设备驱动的操作函数表(file_operations结构体),或者是RTC设备驱动的操作函数表(rtc_class_ops结构体)。
在该代码中,rtc-pm8xxx.c文件中定义了一个静态的rtc_class_ops_pm8xxx_rtc_ops结构体,其中包含了一些操作函数,比如set_alarm函数,用于设置RTC的闹钟时间。当系统启动时,RTC设备驱动会被加载,并注册到系统中,将自己的rtc_class_ops结构体指针传递给RTC框架层。
当Alarm.cpp中的代码调用setAlarm函数时,会通过打开RTC设备文件,将rtc_wkalrm结构体填充好后,调用pm8xxx_rtc_set_alarm函数,该函数实际上是调用了rtc_class_ops结构体中的set_alarm函数,将rtc_wkalrm中的时间信息传递给set_alarm函数,从而设置RTC的闹钟时间。
因此,当Alarm.cpp中的代码调用pm8xxx_rtc_set_alarm函数时,实际上是调用了静态rtc_class_ops_pm8xxx_rtc_ops结构体中的set_alarm函数,从而完成了设置RTC闹钟时间的操作。
如下路径文件:vendor/qcom/proprietary/chi-cdk/core/chifeature2/chitargetbuffermanager.cpp
这是一个路径,指向某个文件。具体来说,这是一个 Android 操作系统中的文件路径,位于 vendor/qcom/proprietary/chi-cdk/core/chifeature2/chitargetbuffermanager.cpp。其中,vendor 表示设备制造商,qcom 表示高通公司,proprietary 表示该文件是高通公司专有的,而非开源的。chi-cdk 是一个照相机驱动,chifeature2 是其中的一个模块,chitargetbuffermanager.cpp 是该模块中的一个源代码文件名。
阅读全文