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