---
# System prepended metadata

title: andorid 透過程式碼嘗試操作LED

---

# andorid 透過程式碼嘗試操作LED

使用command line操作 LED 的方式

1. adb shell
2. cd /sys/class/leds/blue9010
3. echo 0 > brightness(off)
4. echo 200 > brightness(on)
---------------

透過程式碼的方式來修改上面所提到的brightness檔來操控LED燈


```java=
public void turnLedOn(){
        try {
            FileOutputStream mFileOutputStream = new 
            FileOutputStream("sys/class/leds/blue9010/brightness");
            mFileOutputStream.write(255);
            mFileOutputStream.close();
        } 
        catch (Exception e) {
                e.printStackTrace();
        }
    }
    
    
```
在寫入檔案時會遇到acv denied


    
為了澄清是否因為SELinux導致的問題，可先執行：

setenforce 0 （臨時禁用掉SELinux）

如果問題消失了，基本可以確認是SELinux造成的權限問題，需要通過正規的方式來解決權限問題。

遇到權限問題，在logcat或者kernel的log中一定會印出avc denied提示缺少什麽權限，可以通過命令過濾出所有的avc denied 如下：

```java=
avc: denied { search } for 
name="leds" dev="sysfs" ino=13177 
scontext=u:r:system_app:s0 tcontext=u:object_r:sysfs_leds:s0
tclass=dir permissive=0
```

```java=
avc: denied { read } for name="u:object_r:exported_wifi_prop:s0" dev="tmpfs" ino=23597 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:exported_wifi_prop:s0 tclass=file permissive=0 app=com.askey.dvr.provision
```
可以從log 判斷出以下幾件事情
1. 缺少什麽權限：{ search }權限
2. 誰缺少權限：scontext=u:r:system_app:s0
3. 對哪個文件缺少權限：tcontext=u:object_r:sysfs_leds
4. 什麽類型的文件：tclass=dir

完整的意思是：system_app對sysfs_leds類型的dir缺少search權限。

首先找到對應的檔案
路徑為：LINUX/android/device/qcom/sepolicy/vendor/common
下的
system_app.te檔加入權限
```
allow system_app sysfs_leds:dir search;
allow system_app sysfs_leds:file write;//這條同樣為avc問題而賦予的權限
```
這時後build的時候會出現neverallow的錯誤 原因是google將權限鎖住 在coredomain.te中並不允許我們對sysfs_leds做訪問

於是我們可以透過對file.te 新增一個專有的文件類別
在file.te 當中加入以下這個sysfs_wingtk_leds類別
```
type sysfs_wingtk_leds, fs_type, sysfs_type;
```
將上面提到的system_app.te改成
```
allow system_app sysfs_wingtk_leds:dir search;
allow system_app sysfs_wingtk_leds:file write;
```
再來將想訪問的node 與sysfs_wingtk_leds 這個類別榜定
在file.context中加入
```
/sys/devices/platform/soc/soc:gpio-leds/leds/blue9010/brightness    u:object_r:sysfs_wingtk_leds:s0
```

測試結果pass