Android 串口開發

原文鏈接:https://blog.csdn.net/u010872301/article/details/94735221 

1. 主板型號:AIO-3399J

2. 芯片型號:RK3399

3. 操作系統版本:Android 7.1

4. Linux版本:v4.4.103

產品鏈接:http://www.t-firefly.com/solution/info/index/id/71.html

RPLIDAR A3M1 激光雷達通訊接口採用 3.3V 電平的串口。UART ttyS配置文件適配的波特率:256000bps。本文根據驅動來修改非標準波特率,然後通過APP讀寫雷達設備串口數據,修改串口讀寫、串口安全權限的問題。

5. RK3399採用的是8250通用驅動8250_dw.c:
 

static void dw8250_set_termios(struct uart_port *p, struct ktermios *termios,struct ktermios *old)
{
    。。。
    diff = rate * 20 / 1000;
    if ((rate_temp < rate) && ((rate - rate_temp) > diff)) 
    。。。
}

串口設置的是3M的波特率,從log可以看出,串口走的是clk_uart4_pmu 整數分頻,由676M PLL分出來接近48M的的clk(48M根據上面的公式,是分出 3M波特率的最小時鐘)。這雖然有誤差,但在允許範圍內,這個誤差的大小驅動裏設定爲正負2%。

串口以256000波特率發送的數據,根據波特率大小來設置時鐘,一般1.5M以下的波特率都可以分出來。1.5M以上的波特率,可能會經 過小數分頻或整數分頻。如果以上都分不出來,則需要修改PLL。但修改PLL有風險,會影響其他模塊。

6. APP對串口設備讀寫操作時,無法打開某個設備文件,提示權限失敗:unable to open /dev/ttyS3, error:Permission denied。

6.1 、確認設備節點是否存在;

6.2、 確認設備節點權限;嘗試向所有組添加權限(chmod 666 /dev/ttyS3);

./device/rockchip/common/ueventd.rockchip.rc
 
/dev/ttyS3                0666   system     system

6.3、在device/rockchip/rk3399/rk3399_firefly_edp_box/sepolicy/目錄下,添加untrusted_app.te;

allow  untrusted_app  serial_device:chr_file  {read open ioctl getattr create write};

6.4、在device.mk和system_server.te添加並編譯權限;

+BOARD_SEPOLICY_DIRS += \
+  device/rockchip/rk3399/rk3399_firefly_edp_box/sepolicy
+
+BOARD_SEPOLICY_UNION += \
+  untrusted_app.te

rw_dir_perms包含read write;

+#untrusted_app
+allow system_server serial_device:chr_file rw_file_perms;


6.5、selinux security level引起的denied u:r:untrusted_app:s0:c512,c768問題,由於security level爲MLS訪問機制所添加的安全上下文的擴展部分mlstrustedsubject,這一attribute包含了所有能越過MLS檢查的客體type。所以在device.te加入type serial_device, dev_type, mlstrustedobject;

2019-06-04 11:40:17.518 1696-1696/? W/ample.hello_ros: type=1400 audit(0.0:74): avc: denied { write } for name="ttyS3" dev="tmpfs" ino=2524 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:serial_device:s0 tclass=chr_f


此時APP的接口獲得對串口的內核節點的訪問權限。
--------------------- 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章