向android的內(nèi)核添加驅(qū)動,其實就是向linux內(nèi)核添加驅(qū)動。主要在兩個文件里添加點信息,一個是Kconfig文件,一個是Makefile文件。比如你添加的驅(qū)動你代碼放到drivers目錄下面的XXX目錄,那么修在該目錄下的Kconfig文件和Makefile文件。
具體的修改方法:
比如我現(xiàn)在修改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
如果我想添加一個驅(qū)動,驅(qū)動名字為 somedrv,那么在這個文件里加入:
config ANDROID_DEMUXER
bool "Android Somedrv Driver"
default n
這樣就可以了。這樣在編譯內(nèi)核的時候,make menuconfig命令之后,會有
Android Somedrv Driver的選擇,選擇它就可以將驅(qū)動編進內(nèi)核。
然后在Makefile里面添加一句obj-$(CONFIG_ANDROID_SOMEDRV) += somedrv.o。
這樣就修改好了。
這樣編譯內(nèi)核的時候就把驅(qū)動編譯進去了,前提編譯前選擇驅(qū)動。
現(xiàn)在我編譯的內(nèi)核都是用在模擬器上的,也就是說在qemu上運行內(nèi)核。那么編譯的時候的config就用goldfish_defconfig,這樣編譯前就不執(zhí)行make menuconfig命令而是執(zhí)行
make goldfish_defconfig(前提是已經(jīng)將代碼切換到goldfish分支)。
這樣就自動生成.config文件了,不用自己去選擇。但是這樣的.config文件并沒有包含自己添加的驅(qū)動,要手動修改.config文件,打開文件,搜索一下字段”somedrv”,會看見:
# CONFIG_ANDROID_SOMEDRV is not set
CONFIG_ANDROID_BINDER_IPC=y
Somedrv沒有被包含編譯,手動修改它,修改成CONFIG_ANDROID_SOMEDRV=y, 跟下面那句一樣,這樣就會將這個驅(qū)動編進內(nèi)核。
這樣編譯出來的內(nèi)核,已經(jīng)包含somedrv驅(qū)動。
但是這個驅(qū)動掛載在/dev下只用所有者權(quán)限,這樣程序還是沒有辦法訪問這個設(shè)備。這個時候要修改一個文件,主目錄/system/core/rootdir目錄下的ueventd.rc文件,這個文件可以設(shè)置驅(qū)動掛載到/dev目錄下時的權(quán)限和所有者。添加這句
/dev/demuxer 0666 root root
這樣就可以了。好像這個要重新編譯一下。。
聯(lián)系客服