向android的核心添加驅動,其實就是向linux核心添加驅動。主要在兩個檔案裡添加點資訊,一個是Kconfig檔案,一個是Makefile檔案。比如你添加的驅動你代碼放到drivers目錄下面的XXX目錄,那麼修在該目錄下的Kconfig檔案和Makefile檔案。
具體的修改方法:
比如我現在修改drivers/staging/android/下的Kconfig檔案。
config ANDROID_LOGGER
tristate "Android log driver"
default n
config ANDROID_RAM_CONSOLE
bool "Android RAM buffer console"
default n
config ANDROID_RAM_CONSOLE_ENABLE_VERBOSE
bool "Enable verbose console messages on Android RAM console"
default y
depends on ANDROID_RAM_CONSOLE
如果我想添加一個驅動,驅動名字為 somedrv,那麼在這個檔案裡加入:
config ANDROID_DEMUXER
bool "Android Somedrv Driver"
default n
這樣就可以了。這樣在編譯核心的時候,make menuconfig命令之後,會有
Android Somedrv Driver的選擇,選擇它就可以將驅動編進核心。
然後在Makefile裡面添加一句obj-$(CONFIG_ANDROID_SOMEDRV) += somedrv.o。
這樣就修改好了。
這樣編譯核心的時候就把驅動編譯進去了,前提編譯前選擇驅動。
現在我編譯的核心都是用在模擬器上的,也就是說在qemu上運行核心。那麼編譯的時候的config就用goldfish_defconfig,這樣編譯前就不執行make menuconfig命令而是執行
make goldfish_defconfig(前提是已經將代碼切換到goldfish分支)。
這樣就自動產生.config檔案了,不用自己去選擇。但是這樣的.config檔案並沒有包含自己添加的驅動,要手動修改.config檔案,開啟檔案,搜尋一下欄位”somedrv”,會看見:
# CONFIG_ANDROID_SOMEDRV is not set
CONFIG_ANDROID_BINDER_IPC=y
Somedrv沒有被包含編譯,手動修改它,修改成CONFIG_ANDROID_SOMEDRV=y, 跟下面那句一樣,這樣就會將這個驅動編進核心。
這樣編譯出來的核心,已經包含somedrv驅動。
但是這個驅動掛載在/dev下只用所有者許可權,這樣程式還是沒有辦法訪問這個裝置。這個時候要修改一個檔案,主目錄/system/core/rootdir目錄下的ueventd.rc檔案,這個檔案可以設定驅動掛載到/dev目錄下時的許可權和所有者。添加這句
/dev/demuxer 0666 root root
這樣就可以了。好像這個要重新編譯一下。。