msm-4.14中没有找到wake_lock()
时间: 2024-02-27 16:51:52 浏览: 131
在msm-4.14中,wake_lock()函数已经被移除,这是因为在Linux内核中,wake_lock()函数已经被废弃,取而代之的是使用sysfs接口实现唤醒锁。在Android系统中,也推荐使用sysfs接口来控制唤醒锁。
具体来说,可以通过/sys/power/wake_lock文件或/sys/power/wake_unlock文件来控制唤醒锁。例如,要获取唤醒锁,可以使用以下命令:
```
echo "mylock" > /sys/power/wake_lock
```
要释放唤醒锁,可以使用以下命令:
```
echo "mylock" > /sys/power/wake_unlock
```
需要注意的是,使用sysfs接口控制唤醒锁需要具有root权限。同时,在Android系统中,也提供了WakeLock类来操作唤醒锁,该类封装了sysfs接口,可以方便地在应用程序中使用。
相关问题
调用了wake_lock()函数的驱动需要移植到msm-4.14中怎么办
如果你需要将调用了wake_lock()函数的驱动移植到msm-4.14中,你需要对该驱动代码进行修改。具体来说,你需要使用sysfs接口来实现唤醒锁的功能。
首先,在驱动代码中找到调用wake_lock()函数的地方,并将其替换为使用sysfs接口的代码。例如,可以使用以下代码获取唤醒锁:
```
const char *lock_name = "mylock";
char buf[32];
int fd;
fd = open("/sys/power/wake_lock", O_WRONLY);
if (fd < 0) {
pr_err("failed to open wake_lock\n");
return -EINVAL;
}
snprintf(buf, sizeof(buf), "%s\n", lock_name);
if (write(fd, buf, strlen(buf)) < 0) {
pr_err("failed to acquire wake lock\n");
close(fd);
return -EINVAL;
}
close(fd);
```
同样地,释放唤醒锁可以使用以下代码:
```
const char *lock_name = "mylock";
char buf[32];
int fd;
fd = open("/sys/power/wake_unlock", O_WRONLY);
if (fd < 0) {
pr_err("failed to open wake_unlock\n");
return -EINVAL;
}
snprintf(buf, sizeof(buf), "%s\n", lock_name);
if (write(fd, buf, strlen(buf)) < 0) {
pr_err("failed to release wake lock\n");
close(fd);
return -EINVAL;
}
close(fd);
```
需要注意的是,使用sysfs接口控制唤醒锁需要具有root权限。在Android系统中,也提供了WakeLock类来操作唤醒锁,该类封装了sysfs接口,可以方便地在应用程序中使用,但在内核中需要自己实现。
编译报错/mydisk/M23/kernel/msm-4.14/drivers/fiio/awinic_charger.h:6:2: note: expanded from macro 'aw_err' AWINIC_LOG_NAME, __func__, __LINE__, ##arg)fatal error: too many errors emitted, stopping now [-ferror-limit=] 20 errors generated. make[3]: *** [/mydisk/M23/kernel/msm-4.14/scripts/Makefile.build:361: drivers/fiio/aw32271_charge.o] Error 1
根据错误提示信息,这是一个编译错误,其中 /mydisk/M23/kernel/msm-4.14/drivers/fiio/awinic_charger.h 文件的第 6 行出现了一个宏定义 aw_err。该宏定义包含了一些参数,其中 AWINIC_LOG_NAME 表示日志名称,__func__ 表示当前函数名,__LINE__ 表示当前代码行号,##arg 表示可变参数列表。
错误提示信息中还出现了 "fatal error: too many errors emitted, stopping now [-ferror-limit=] 20 errors generated",这说明在编译过程中已经产生了太多的错误,导致编译被强制停止。
因此,你需要先解决这个 aw_err 宏定义的问题。根据错误提示信息来看,可能是在调用 aw_err 宏的时候传入的参数不正确导致的编译错误。你可以检查一下代码中调用 aw_err 宏的地方,看看传入的参数是否有误。
另外,关于编译过程中产生的错误数量过多的问题,可以考虑增加编译器的错误限制,或者找到并解决更多的编译错误。
阅读全文