顯示廣告
隱藏 ✕
看板 million
作者 emulators (模擬器)
標題 [note] 作業試誤紀錄
時間 2014年09月15日 Mon. PM 05:02:31


141011
vold 中, 使用 /system/bin/sdcard 程式建立儲存空間的 service, 需要手動在 init.goldfish.rc
on fs 處加入 start <sdcard service name> 才會啟動.

141002
adb 的 read_and_dump(fd) 會造成 host 端 hang 住, 改成 retVal = adb_read(fd, targetStr, sizeof targetStr) 即可

140924
想讓模擬器的 adb shell 在 logcat 中顯示 adbd 的log, 試過在 init.goldfish.rc init.grouper.rc init.emulator.rc 裡面加 export ADB_TRACE 1 都沒有用. 嘗試使用網上提供的方法: 在模擬器中 set property
setprop persist.adb.trace_mask 0x001 (各bit 代表要記錄哪種 log ) 才在 /data/adb 中找到 log 檔, 但該 log 並非 logcat 之格式.

140918
在 sysfs 的 store 函式中 return 0, 發現造成無窮迴圈, 只要一 echo abc > attribute_file, 就跳不出去.
上網找到 return 值只要是 1 或 0, 就會造成無窮迴圈, 原因目前不明.
參考資訊: http://stackoverflow.com/questions/20152546/write-to-sysfs-attribute-file-infinite-loop

140918
ioctl 在新 kernel 中的 unlocked_ioctl 已無 struct inode 這個傳入參數,
所以等於是自己在自訂 ioctl 函式的傳入參數中 多宣告了一個變數, 可能是造成 140917 中 switch 進不去 (亂數) 的原因.

140917
進去 ioctl 後發現, ioctl 的 switch case 進不去, 值印出來發現是個亂數, 懷疑是 macro 的問題,
換成另外一個 _IOW MACRO 一樣不對, 換成 unsigned int 純數字也不對, 目前無解. 但確定可進 ioctl.

140917
進不去 ioctl , 猜想是 cmd MACRO 的問題, 由_IO 改成 _IOW()
證實不是, 而是 misc device 在註冊時就會在 /dev  創建一個 char dev 檔案, 因為讀錯所以進不去 ioctl

140917
把user space的執行檔丟到emulator裡, 複製一份/proc/misc檔案到/data內, 執行卻出現
not executable: magic 7F45
原因是 compile 的 CPU 不同 (一個 arm 一個 x64 ), 改成一起用arm-compile 編譯到 system image 中


140917
struct file_operation 需include <linux/fs.h> 才有定義

140916
把char dev編成module後, 需要用mknod指令去讓它生出char device file, 但android沒有這指令,
全部做白工orz
解法: 在platform-device中, 做misc_register()動作, 建立好ioctl function, 使其產生char device file,
產生的檔案位置也要再google確認.

140916
編譯char device模組時fops-> .ioctl 這成員在2.3.6以後的kernel已經拿掉換成另外二個成員了, 所以找不到該成員, 要改名.
參考自http://blog.csdn.net/yusiguyuan/article/details/16829299

發生在module exit函式的unregister_chrdev()  error: void value not ignored as it ought to be
錯誤是說unreg_chrdev這函式不回傳值 (return void) 但我們期待它有值. 最後把包住該函式的if整個拿掉即可

140915
編譯platform device & platform driver時, 採用的Kconfig選項, 若是bool, 則只會build出.o檔,
必須把bool改成tristate, 使menuconfig選項時可以選成[M], 才會build 出.ko檔, .ko檔是一個獨立module.

140915
platform-device module .ko 檔案放入 emulator 後, insmod driver成功, insmod device失敗:
No such file or directory, 發現是platform-device 原始碼裡沒有加 MODULE_LISCENSE();
加入即改善


--
※ 作者: emulators 時間: 2014-09-15 17:02:31
※ 編輯: emulators 時間: 2014-10-29 09:03:14
※ 看板: million 文章推薦值: 0 目前人氣: 0 累積人氣: 242 
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇