字符驅(qū)動(dòng)架構(gòu)圖
前面幾節(jié)已經(jīng)將完整的例子講完了,下面給出整體的架構(gòu)圖
[字符設(shè)備驅(qū)動(dòng)demo架構(gòu)圖]
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)限)