从供应商处拿到一驱动led模块的 i2c设备驱动,人家驱动已经基本给我们写好,我们需要做的就是将驱动添加进我们的内核,烧录进我们的板子为我们所用,aw21024驱动与资料:https://download.csdn.net/download/maodewen11/18171562
第一步:修改设备树
首先按要求将设备树信息添加进我们的设备树文件:/kernel/arch/arm64/boot/dts下的dts文件
相应的gpio需要改为我们板子对应的gpio口,例如我的板子aw21024挂载到的是i2c-2总线上,所以将设备树信息添加到&i2c2 节点下,并且修改成对应的gpio口
aw21024_led@1c {
compatible = "awinic,aw21024_led";
reg = <0x1c>;//boardcast address:0x1c
reset-head-gpio = <&pio 52 0>;
reset-chest-gpio = <&pio 51 0>;
aw21024,led {
aw21024,name = "aw21024_led";
/* 0:16M 1:8M 2:1M 3:512K 4:256K 5:125K 6:62K 7:31K */
aw21024,clk_pwm = <2>;
aw21024,brightness = <128>;
aw21024,max_brightness = <255>;
};
};
第二步:添加驱动文件
将aw21024驱动文件添加到misc文件下,因为MTK的驱动大多都是在这个文件下,具体路径:/kernel-3.18/drivers/misc
第三步:修改编译配置
修改/kernel-3.18/drivers/misc下的makefile文件,向其中添加:obj-$(CONFIG_LEDS_AW21024) += aw21024
以后就可以根据CONFIG_LEDS_AW21024开关来进行选择是否将这个模块编译进内核
CONFIG_LEDS_AW21024可以设置为y或者n,如下所示:
obj-y就是编译进内核
obj-n就不编译进内核
可在.config文件中添加CONFIG_LEDS_AW21024=y,就可以将该模块编译进内核
有人比喻Kconfig文件是菜单,makefile是菜谱(做菜的方法),.config文件是你所点的菜,我觉得挺形象的
第四步:编译内核
source build/envsetup.sh
lunch [选项]
make bootimage -j8
结果验证
将编译出来的程序刷进板子,然后重启
首先我们可以通过串口打印信息看到驱动是否加载成功,因为代码中在probe函数中有pr_info("%s probe completed successfully!\n", func);l 如果看到这条log信息说明驱动正常编译进了内核并且正常加载。
其次进入adb查看,进入目录/sys/class/i2c-c/i2c-2/device下查看,因为我们的设备i2c地址是2-001c,所以进入如下目录:
说明驱动匹配成功,而目录下的这些文件是驱动程序中如下代码所产生的:
static DEVICE_ATTR(reg, S_IWUSR | S_IRUGO, aw21024_reg_show, aw21024_reg_store);
static DEVICE_ATTR(hwen, S_IWUSR | S_IRUGO, aw21024_hwen_show, aw21024_hwen_store);
static DEVICE_ATTR(rgbcolor, S_IWUSR | S_IRUGO, NULL, aw21024_rgbcolor_store);
static DEVICE_ATTR(effect, S_IWUSR | S_IRUGO, aw21024_effect_show, aw21024_effect_store);
static struct attribute *aw21024_attributes[] = {
&dev_attr_reg.attr,
&dev_attr_hwen.attr,
&dev_attr_rgbcolor.attr,
&dev_attr_effect.attr,
NULL
};
static struct attribute_group aw21024_attribute_group = {
.attrs = aw21024_attributes
};
sysfs_create_group(&aw21024->cdev.dev->kobj, &aw21024_attribute_group);
关于该宏的使用可以参考:
https://www.cnblogs.com/lifexy/p/9799778.html