向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
這樣就可以了。好像這個要重新編譯一下。。