可写目录软链接方案
触摸屏获取不到真实光传感器的值
for d in /sys/bus/iio/devices/iio:device*; do
echo "=== $d ==="
cat "$d/name" 2>/dev/null
ls "$d" | grep -E 'illuminance|light|lux'
done
=== /sys/bus/iio/devices/iio:device0 ===
fe720000.saradc
=== /sys/bus/iio/devices/iio:device1 ===
mpu6050
=== /sys/bus/iio/devices/iio:device2 ===
bh1750
in_illuminance_integration_time
in_illuminance_raw
in_illuminance_scale
hyl@HYL:/tmp$ # 查看动态库依赖及搜索路径
readelf -d rk356x-demo | grep -E "NEEDED|RUNPATH|RPATH"
0x00000001 (NEEDED) Shared library: [liblvgl.so]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
获取读取路径
hyl@HYL:/tmp$ strings rk356x-demo | grep -iE 'als|light|lux|proximity|illuminance|iio|/sys/|/dev/'
/dev/fb0
/dev/input/event6
Backlight
LightSensor
/sys/class/gpio/gpio120/value
/sys/class/gpio/gpio121/value
/sys/class/gpio/gpio123/value
/sys/class/gpio/gpio124/value
/sys/class/gpio/export
/sys/class/gpio/gpio120/direction
/sys/class/gpio/gpio121/direction
/sys/class/gpio/gpio123/direction
/sys/class/gpio/gpio124/direction
/sys/class/gpio/gpio111/value
/sys/class/gpio/gpio111/direction
/sys/class/backlight/backlight/brightness
/dev/input/event3
/dev/input/event0
/sys/devices/iio:device2/in_illuminance_raw
/sys/bus/iio/devices/iio:device0/in_voltage6_raw
/sys/bus/iio/devices/iio:device1/in_accel_x_raw
/sys/bus/iio/devices/iio:device1/in_accel_y_raw
/sys/bus/iio/devices/iio:device1/in_accel_z_raw
/sys/bus/iio/devices/iio:device1/in_anglvel_x_raw
/sys/bus/iio/devices/iio:device1/in_anglvel_y_raw
/sys/bus/iio/devices/iio:device1/in_anglvel_z_raw
/dev/ttyS0
/dev/ttyS1
/dev/ttyS3
/dev/ttyS4
killall bluealsa-aplay
killall bluealsa
echo 0 > /sys/class/rfkill/rfkill0/state
echo 1 > /sys/class/rfkill/rfkill0/state
rtk_hciattach -n -s 115200 /dev/ttyS8 rtk_h5 &
bluealsa --profile=a2dp-sink &
bluealsa-aplay --profile-a2dp 00:00:00:00:00:00 &
/sys/devices/platform/fe5b0000.i2c/i2c-2/2-0050/eeprom
真实获取光传感器的值
因为 /sys/class/ 是内核动态生成的目录树,不允许用户直接在里面创建新的子目录(即使是 root 也不行)。这是内核文件系统的保护机制。
✅ 替代方案:把软链接创建到可写目录¶
你完全可以把链接放在 /tmp、/var/run 或 /root 下,这些目录可写,而且重启后可以通过启动脚本重新创建。
临时创建(立即生效)¶
永久创建(开机自动重建)¶
方法一:在 /etc/rc.local 中添加(确保 /etc/rc.local 可执行)
方法二:创建一个 systemd 服务(更可靠)
创建 /etc/systemd/system/light-sensor-link.service:
[Unit]
Description=Create symlink for light sensor
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/bin/ln -sf /sys/bus/iio/devices/iio:device2/in_illuminance_raw /tmp/light
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
然后启用:
这样每次开机都会在 /tmp/light 创建软链接,你也可以把路径改成 /var/run/light。
📌 如果不依赖链接,更简单的方法¶
- 环境变量:
cat $LIGHT_SENSOR 即可。
-
别名(在
~/.bashrc中加入): -
直接使用原路径,写个短脚本包装一下。
推荐使用 systemd 服务或 /etc/rc.local 创建软链接,这样既干净又符合你的预期。