中易网

如何向android添加内核驱动模块

答案:1  悬赏:80  
解决时间 2021-04-08 04:52
如何向android添加内核驱动模块
最佳答案
1,同目录下的makefile,如
#
# Makefile for industrial I/O Magnetometer sensors
#

obj-$(CONFIG_SENSORS_AK8975) += ak8975.o
obj-$(CONFIG_SENSORS_HMC5843) += hmc5843.o

2,同目录下的kconfig

#
# Magnetometer sensors
#
comment "Magnetometer sensors"

config SENSORS_AK8975
tristate "Asahi Kasei AK8975 3-Axis Magnetometer"
depends on I2C
help
Say yes here to build support for Asahi Kasei AK8975 3-Axis
Magnetometer.

To compile this driver as a module, choose M here: the module
will be called ak8975.

3,总的config(配置变量为Y)
各项目配置文件的位置不同,
coffee:kernel/arch/arm/configs/M7023Q-debug-perf_defconfig
juice:common/customer/configs
配置信息如下:
# CONFIG_CFG80211 is not set
CONFIG_EXPERIMENTAL=y
CONFIG_LOCALVERSION="$(KERNEL_LOCAL_VERSION)-perf"
CONFIG_SWAP=y
CONFIG_ZRAM=m
CONFIG_SYSVIPC=y
CONFIG_SENSORS_AK8975=y
......

查看变量是否在编译时配置成功:
out/target/product/m7023q/obj/KERNEL_OBJ/include/generated/Autoconf.h
查找CONFIG_SENSORS_AK8975
若在编译时有配置成功,将找到这一行:
#define CONFIG_SENSORS_AK8975 1

4、修改板级文件:
4.0及后续项目统一在:kernel/arch/arm/mach-msm/board-qrd7627a.c
注意juice中,很多配置(如tp)写在kernel/arch/arm/mach-msm/board-msm7627a-io.c
在代码中增加新模块的内容,应该有两处,第一处设置函数和结构体,第二处实际调用,注意引用上述第3步新增的编译开关将代码限制起来。
这些内容大多可以拷贝其它模块,但是名字要和driver中的相同,注意要改的地方除了名字之外,还有中断脚和I2C脚。其中固定模块的中断脚大部分时候不会改变(如tp就是int:48,reset:26),除非板子的datasheet特别注明才需要改变。但是I2C脚是会随着slaver device的改变而改变的,需要查清楚。
配置platform_data:
一般需要初始化一个xxx_platform_data结构体(这个结构体的声明应该让驱动文件可视,probe中才知道去读某个platformdata.yyy),并在i2c_board_info结构体中用.platform_data指向它,然后这个i2c_board_info将在板级文件中被注册(作为函数i2c_register_board_info()的参数)。而这个.platform_data很有可能在驱动的probe函数中调用到,例如:
static struct msg2133_ts_platform_data msg2133_platformdata= {
.irq = 0,
.reset = GPIO_TP_RESET,
};

static struct i2c_board_info i2c_info_msg2133_dpt = {
I2C_BOARD_INFO("msg2133", 0x27),
.platform_data = &msg2133_platformdata,
};
i2c_info_msg2133_dpt.platform_data->irq = gpio_to_irq(GPIO_TP_INT);//结构体初始化的时候只能以常量赋值,因为此处需要做GPIO到irq的映射,所以要在此处赋值。
i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, &i2c_info_msg2133_dpt, 1);
在驱动的probe中:pdata =client->dev.platform_data;
    ...... = pdata.yyy; ......//(msg2133_ts_platform_data在该文件中可见)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
ug画好的草图建模里面怎么没有了
她那美丽庄重的形象也就从此定格在历史上,定
广州声熹长款的真皮钱包批发价多少
稀夏堂在哪里啊,我有事要去这个地方
茂南区茂名鳌头镇第三中心小学地址在什么地方
开眼角两个月了,眼角有很明显的白色的疤,怎
伯明翰大学研究生
我为什么用狗爹godaddy的域名无法解析
1998年农历6月25日是新历几月几日?
百度和有道有什么区别?
中集集装箱厂里面的工资多少啊?工作累不累
英郡雷丁邮编是多少,是一期555弄
哈弗h6酷派二档退一难挂是新车没磨合到位吗
盛东方茶艺地址在什么地方,想过去办事
AfterEffects 总是停止工作怎么办啊???
推荐资讯
铁的表面可以贴墙纸吗
长生金融是骗人的吗
在美国慢性鼻炎很多人都有吗?
吉林森工露水河与徐州产露水河的区别谁知道
京东快递从天津出发到广州番禺要多长时间?
金凤南路/马璜路(路口)地址有知道的么?有点
两台电脑怎样传输文件?
女人说老师说小数点后两位不能约
.健身教练能做多长时间?
PS发光效果字体怎么做
北京大兴生物医药基地普洛斯物流最新招聘信息
小产权的房屋买卖没有房产证怎么签协议
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?