2011-05-31 54 views
2

我們正在開發一個應用程序,它從串行設備讀取數據。現有的C++代碼被重新用作共享庫(libProtocol.so是使用NDK構建的)來讀取和解碼來自設備的數據並將其傳遞給應用程序。但是,當設備連接時,由於權限問題,共享庫代碼無法訪問設備。在adb shell命令中,ls -l/dev/ttyUSB0顯示「crw ------- root root」。如果我從adb手動使用chmod 777 ttyUSB0,然後運行該應用程序,則可以打開該端口。 (如果我創建一個C++ EXE訪問USB串行端口和android的環境中運行,它能夠接入端口而是從共享庫訪問失敗)USB串行轉換器ttyUSB0許可問題

  1. 是否有可能永久改變權限?
  2. Android是以root用戶還是其他用戶身份運行?
  3. 通常ttyUSB0屬於撥出組,它爲什麼顯示爲root和crw -------而不是crw-rw ----?
  4. 爲什麼從exe工作和從共享庫訪問falils?

硬件平臺:的Beagle Board - XM 操作系統:Android的Froyo的 任何人都可以請幫助?

+0

我不認爲這是一個編程問題。 – unwind 2011-05-31 11:46:01

+0

@unwind解決方案可能需要一些編程,對於任何使用或管理導向的站點來說都有點模糊。還要注意,海報_正在編寫一個應用程序。 – 2011-05-31 21:02:09

回答

1

您需要確定設備文件的創建位置,並正確設置權限。這可能位於/init.rc或類似的地方,或者可能在USB設備插入時觸發。文件系統的部分設備名稱的遞歸grep(由專用用戶)可能會在幾分鐘內幫助您找到所有出現該字符串的東西,至少在本機代碼中提供,而不是dalvik classfile(我認爲不太可能)

Android應用程序通常不會以root身份運行;讓它們這樣做是相當複雜的,因爲它們通常不是以正常的方式啓動,而是從合子進程中分離出來(因此可以共享共同的庫映射)。但是一個選擇是android應用程序可以 - 非正式地 - 啓動setuid二進制文件,並將它們用作代理來執行任務,也就是說,您可以擁有將標準輸入接收到的任何內容寫入端口並打印從端口接收的任何內容標準輸出。

+0

我前段時間看過串口的東西,我可以確認init.rc創建設備節點 – 2011-11-14 19:27:51