阅读更多

为Android内核添加新驱动,并提供menuconfig选项

为Android的Linux内核2.6.25添加驱动。

1. 在drives目录下添加hello目录,内含hello.c Kconfig Makefile

hello.c内容:
#include
#include
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
printk(KERN_ALERT"Hello, world/n");
return 0;
}
static void hello_exit(void)
{

printk(KERN_ALERT"Goodbye, cruel world/n");
}

module_init(hello_init);
module_exit(hello_exit);

Kconfig内容:
config HELLO
tristate "Hello Driver added by Dong"
default n
help
test for adding driver to menuconfig.

MakeFile内容:
obj-$(CONFIG_HELLO) += hello.o


2. 上面的Kconfig文件再加上下面的两个配置,可使hello项出现在配置菜单中。
在arch/arm/Kconfig menu "Device Drivers" endmenu之间添加
source "drivers/hello/Kconfig"

在drivers/Kconfig menu "Device Drivers" endmenu之间添加
source "drivers/hello/Kconfig"

(不知为什么arch/arm/Kconfig中竟然含有Drivers里Kconfig内容的一个复本,
实验证明只对drivers/Kconfig中修改内容无效。)

3.修改Drivers目录下的Makefile文件,添加如下行,
obj-$(CONFIG_HELLO) += hello/
当CONFIG_HELLO为y或m时,使系统能找到hello驱动的makefile。

linux-2.6.25目录下make menuconfig,在Device Drivers菜单下选中Hello Driver added by Dong项比如M,作为module。然后保存配置,执行make命令,就可以看到 CC [M] drivers/hello/hello.o 的log了,hello目录里生成了hello.o hello.ko的等文件。

流程:
假如在make menuconfig时配置Hello Driver added by Dong为M(即编为模块,而不是编进linux内核)
则.config中就会多一行CONFIG_HELLO = m
如此一来,drivers/Makefile中obj-$(CONFIG_HELLO) += hello/就变成了obj-m +=hello/
于是执行make命令时,便会进入hello目录里找makefile,MakeFile内容obj-$(CONFIG_HELLO) += hello.o 变成了obj-m +=hello.o,所以hello.c就被编译成模块了。

更多相关文章

  1. Android(安卓)端如何添加自定义表情
  2. Fragment沉浸式
  3. 自己写的一个在线汇率转换工具-MoneyDroid sources
  4. android SQLiteDatabase之一
  5. Android(安卓)签名失败 Lint found fatal errors while assembli
  6. [置顶] Android(安卓)[Dex Loader] Unable to execute dex:
  7. AndroidStudio打包出现问题: `Error:Execution failed for task
  8. android socket client
  9. 编译Android时,添加或者删除system.img中第三方apk、更改Android

随机推荐

  1. Android之Selector、Shape介绍
  2. Android(安卓)P WMS addwindow流程
  3. android中获取网络图片
  4. RadioButton 带下划线切换的案例
  5. android ImageButton 左中右分段排列
  6. Android(安卓)9编译报错sdclang设置
  7. Android(安卓)配置环境
  8. Android开发环境搭建
  9. android中遍历arrayList的四种方法
  10. Layout布局