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