Linux C语言读写节点代码-读写背光值brightness为例
一、adb 读写背光节点 /sys/class/backlight/backlight/brightness
二、C语言读写该节点代码。
static int write_int(char const *path, int value)
{
int fd;
static int already_warned;
already_warned = 0;
LOGV("write_int: path %s, value %d", path, value);
fd = open(path, O_RDWR);
if (fd >= 0) {
char buffer[20];
int bytes = sprintf(buffer, "%d\n", value);
int amt = write(fd, buffer, bytes);
close(fd);
return amt == -1 ? -errno : 0;
} else {
if (already_warned == 0) {
LOGE("write_int failed to open %s\n", path);
already_warned = 1;
}
return -errno;
}
}
static int sysfs_read(const char *path)
{
char buf[80];
char freq[50];
int len;
int fd = open(path, O_RDONLY);
ALOGV("%s: [%s:]", __FUNCTION__, path);
if (fd < 0) {
strerror_r(errno, buf, sizeof(buf));
ALOGE("%s: [%s]", __FUNCTION__, path);
ALOGE("Error opening %s: %s\n", path, buf);
return -1;
}
len = read(fd, freq, 10);
if (len < 0) {
strerror_r(errno, buf, sizeof(buf));
ALOGE("%s: [%s]", __FUNCTION__, path);
ALOGE("Error writing to %s: %s\n", path, buf);
}
close(fd);
return atoi(freq)/1000;
}
static void sysfs_write(const char *path,const char *s)
{
char buf[80];
int len;
int fd = open(path, O_WRONLY);
ALOGV("%s: [%s: %s]", __FUNCTION__, path, s);
if (fd < 0) {
strerror_r(errno, buf, sizeof(buf));
ALOGE("%s: [%s: %s]", __FUNCTION__, path, s);
ALOGE("Error opening %s: %s\n", path, buf);
return;
}
len = write(fd, s, strlen(s));
if (len < 0) {
strerror_r(errno, buf, sizeof(buf));
ALOGE("%s: [%s: %s]", __FUNCTION__, path, s);
ALOGE("Error writing to %s: %s\n", path, buf);
}
close(fd);
}
三、android hal调用该代码调节背光rk3288_nougat_xxxxxx\hardware\rockchip\liblights\lights.cpp。、
四、kernel底层驱动生成brightness节点rk3288_nougat_xxxxx\kernel\drivers\video\backlight\backlight.c。