Android 字符驅(qū)動(dòng)#4#總結(jié)

字符驅(qū)動(dòng)架構(gòu)圖

前面幾節(jié)已經(jīng)將完整的例子講完了,下面給出整體的架構(gòu)圖

[字符設(shè)備驅(qū)動(dòng)demo架構(gòu)圖]
1JsCe6o.png

Linux內(nèi)核源代碼目錄結(jié)構(gòu)

  • arch:該目錄包含與CPU硬件系統(tǒng)結(jié)構(gòu)相關(guān)的代碼。每個(gè)CPU系列都獨(dú)自占有一個(gè)目錄,如ARM、MIPS、AVR32、x86、ia64等

  • block:該目錄包含塊設(shè)備驅(qū)動(dòng)程序中進(jìn)程I/O調(diào)度的功能代碼

  • crypto:該目錄包含加密/解密算法,以及壓縮和校驗(yàn)等功能代碼

  • documentation:該部分是一些文檔,在該文檔中對內(nèi)核的各個(gè)部分進(jìn)行了一般性的闡述

  • drivers:該目錄包含各設(shè)備程序的功能代碼。每種類型的設(shè)備驅(qū)動(dòng)常占有一個(gè)獨(dú)立的子目錄,如char、block、net、input、power等

  • fs:該目錄包含Linux內(nèi)核所支持的各種文件系統(tǒng),如ext、jffs2、yaffs2、fat、ntfs等

  • include:該目錄包含一些頭文件,其中與Linux系統(tǒng)相關(guān)的頭文件就放置在該目錄下的linux子目錄中

  • init:該目錄包含Linux內(nèi)核的初始化功能代碼

  • ipc:該目錄包含進(jìn)程間通信的功能代碼

  • kernel:該目錄包含進(jìn)程調(diào)度、定時(shí)器等功能代碼

  • lib:該目錄包含庫或用于生產(chǎn)庫的代碼

  • mm:該目錄包含內(nèi)存管理功能代碼

  • net:該目錄包含網(wǎng)絡(luò)相關(guān)的功能代碼,其實(shí)現(xiàn)了各種常見的網(wǎng)路協(xié)議

  • scripts:該目錄包含了一些腳本文件,用于配置內(nèi)核

  • security:該目錄包含Linux安全管理方面的代碼,如賬號等

  • sound:該目錄包含ALSA、OSS音頻子系統(tǒng)的核心代碼,以及一些常用的音頻驅(qū)動(dòng)

  • usr:該目錄包含實(shí)現(xiàn)cpio工具的功能代碼

顯示kernel日志:

cat /dev/kmsg | grep HelloHal
cat /proc/kmsg | grep HelloHal

報(bào)錯(cuò)問題處理

問題1:
問題描述
../android/xxx/kernel-4.9 is not clean, please run 'make mrproper'
處理方法
https://blog.csdn.net/qidi_huang/article/details/53031488

問題2
問題描述

frameworks/support/v4/java/android/support/v4/media/TransportMediator.java:190: error: cannot access RemoteControlClient
        return mController != null ? mController.getRemoteControlClient() : null;
                                                ^
  class file for android.media.RemoteControlClient not found
frameworks/support/v4/java/android/support/v4/media/TransportMediator.java:240: error: cannot access OnPlaybackPositionUpdateListener
            mController.refreshState(mCallbacks.onIsPlaying(),
                       ^
  class file for android.media.RemoteControlClient$OnPlaybackPositionUpdateListener not found

處理方法:
You are using JDK8, for Android 6 you need JDK7.

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export PATH=.:$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

問題3

HelloServer不能訪問/dev/hello設(shè)備,設(shè)置方法見 開發(fā)硬件訪問服務(wù)-》修改SePolicy的權(quán)限

HelloHal fail open /dev/hello -- Permission denied

參考文檔:

https://www.cnblogs.com/zhaobinyouth/p/6227644.html
https://www.cnblogs.com/liam999/p/5933827.html(系統(tǒng)service添加方法,包括權(quán)限聲明)
https://blog.csdn.net/zrf1335348191/article/details/54907228
https://blog.csdn.net/wh_19910525/article/details/45170755(設(shè)置設(shè)備訪問權(quán)限)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容