代码里通过syscall来进行insmod和rmmod操作
static int insmod(const char *filename, const char *args)
{
int ret;
int fd;
fd = TEMP_FAILURE_RETRY(open(filename, O_RDONLY | O_CLOEXEC | O_NOFOLLOW));
if (fd < 0) {
return -1;
}
ret = syscall(__NR_finit_module, fd, args, 0);
close(fd);
if (ret < 0) {
LOGE("insmod failed: %d", ret);
}
return ret;
}
static int rmmod(const char *modname)
{
int ret = -1;
int maxtry = 10;
while (maxtry-- > 0) {
ret = syscall(__NR_delete_module, modname, O_NONBLOCK | O_EXCL);
if (ret < 0 && errno == EAGAIN )
usleep(500000);
else
break;
}
if (ret != 0)
LOGE("Unable to unload driver module: %{public}s", modname);
return ret;
}