RK3568-Linux-麒麟系统----陀螺仪驱动调试

RK3568-Linux-麒麟系统----陀螺仪驱动调试

1. 瑞星微开发板自带的陀螺仪型号MXC6655xa,硬件人员说我们的板子和开发板一样,因此检查设备树文件找到设备描述:

&i2c5 {
status = “okay”;
mxc6655xa: mxc6655xa@15 {
status = “okay”;
compatible = “gs_mxc6655xa”;
pinctrl-names = “default”;
pinctrl-0 = <&mxc6655xa_irq_gpio>;
reg = <0x15>;
irq-gpio = <&gpio3 RK_PC1 IRQ_TYPE_LEVEL_LOW>;
irq_enable = <1>;
poll_delay_ms = <30>;
type = <SENSOR_TYPE_ACCEL>;
power-off-in-suspend = <1>;
layout = <1>;
};
};
&pinctrl {

mxc6655xa {
	mxc6655xa_irq_gpio: mxc6655xa_irq_gpio {
		rockchip,pins = <3 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>;
	};
};

}
最主要是检查中断引脚 和i2c地址
陀螺仪硬件原理图
中断GPIO是3 C1引脚,i2c地址是0x15,因此设备树不用修改。

2. 检查驱动文件

因以前没有接触过陀螺仪,因此驱动在哪个路径也不知道,因此先查找驱动所在路径,因为有设备树的compatible属性,因此直接在驱动中查找。
find ./kernel/ -name “.” | xargs grep gs_mxc6655xa
查找结果显示驱动文件在如下目录:
./kernel/drivers/input/sensors/accel/mxc6655xa.c: .name = “gs_mxc6655xa”,
因些进入kernel/drivers/input/sensors/accel目录,
发现现在的kernel没有编译陀螺仪的驱动,因此要在kernel中添加陀螺仪的驱动
进放kernel目录,执行make ARCH=arm64 menuconfig
进放> Device Drivers > Input device support 选中
<> handle angle,accel,compass,gyroscope,lsensor psensor etc —>
进入再选中<
> g_sensor device support —> 并进入下层
选中<*> gsensor mxc6655xa
最后的目录是> Device Drivers > Input device support > handle angle,accel,compass,gyroscope,lsensor psensor etc > g_sensor device support
保存后退出

3. 保存配置到默认配置文件

保存退出后,配置会保存在临时.config中,因此想把这个修改保存到默认配置文件中,不用每次修改。
执行make savedefconfig,会保存到 defconfig文件,可以把这个文件作为默认配置文件,也可以检查下和以前的文件的变化,把添加到配置项添加到默认配置文件中,检查配置文件,增加的项如下:
CONFIG_SENSOR_DEVICE=y
CONFIG_GSENSOR_DEVICE=y
CONFIG_GS_MXC6655XA=y
把这三项添加到配置文件。

4。 重新编译kernel

./build.sh kernel
重新烧写boot.img后,查看打印信息
dmesg | grep gsensor
[ 2.308623] gsensor_mxc6655 5-0015: sensor_register_device: gs_mxc6655xa, id = 24
[ 2.309206] gsensor_mxc6655 5-0015: sensor_chip_init:gs_mxc6655xa:devid=0x5,ops=0x000000006bf54dcb
[ 2.311405] input: gsensor as /devices/platform/fe5e0000.i2c/i2c-5/5-0015/input/input1
[ 2.311813] gsensor_mxc6655 5-0015: sensor_irq_init:use irq=112
[ 2.311945] gsensor_mxc6655 5-0015: sensor_misc_device_register:miscdevice: mma8452_daemon
[ 2.311964] gsensor_mxc6655 5-0015: sensor_probe:initialized ok,sensor name:gs_mxc6655xa,type:2,id=24
[ 2.312808] gsensor_mxc6655 5-0015: sensor_report_value: x = -80, y = -48, z = 11200
驱动已经加载并得到一次三洲数据。

5. 测试功能

驱动加载成功后,会在/dev/input目录下生成event事件,我的设备上生成的是/dev/input/event1
因此可以下载evtest软件测试看看有没有数据出来
evtest /dev/input/event1 如果直接执行evtest会列出所有的input设备可以选择。

6. 最大的问题,驱动加载成功了,设备文件也生成了,但就是没有数据上报

这个问题查了好久,最后查看驱动代码,是没有enable的原因,在android系统中,在Hal层有enable的代码,而在linux中,没有enable的代码,因此就没有上报。
sensor-dev.c中通过如下代码,创建了一个设备文件,需要控制这个设备文件enable设备。
设备的路径就是/dev/mma8452_daemon,.
case SENSOR_TYPE_ACCEL:
if (!sensor->ops->misc_dev) {
sensor->fops.owner = THIS_MODULE;
sensor->fops.unlocked_ioctl = gsensor_dev_ioctl;
#ifdef CONFIG_COMPAT
sensor->fops.compat_ioctl = gsensor_dev_ioctl;
#endif
sensor->fops.open = gsensor_dev_open;
sensor->fops.release = gsensor_dev_release;
sensor->miscdev.minor = MISC_DYNAMIC_MINOR;
sensor->miscdev.name = “mma8452_daemon”;
sensor->miscdev.fops = &sensor->fops;
} else {
memcpy(&sensor->miscdev, sensor->ops->misc_dev, sizeof(*sensor->ops->misc_dev));
}
break;

7. 测试代码

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>

#define GSENSOR_IOCTL_MAGIC ‘a’
#define GSENSOR_IOCTL_START _IO(GSENSOR_IOCTL_MAGIC, 0x03)

int main(int argc,char* argv[])
{
int fd = -1;
fd = open(“/dev/mma8452_daemon”, O_RDWR);
if (fd == -1)
{
printf(“can not open file /dev/mma8452_daemon\n”);
return -1;
}

int ret = ioctl(fd,GSENSOR_IOCTL_START);
if(ret == -1)
{
	printf("ioctl fail\n");
}

close(fd);
return 0;

}

交叉编译后,在板子上执行后,就会有数据上报了,不管是用evtest或直接cat /dev/input/event1都会有数据上报了。

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: roc-rk3568-pc是一款基于RK3568芯片的台式电脑板,它能够提供高性能、低功耗、多媒体处理以及AI加速等特性。roc-rk3568-pc实现了PC级性能和功能,可以运行Linux和Android操作系统,同时支持多种显示接口和存储接口。 例如,roc-rk3568-pc支持双频WiFi和蓝牙,可以通过HDMI、DP、VGA等接口连接显示器,还可以使用USB3.0、SATA、NVMe等接口连接存储设备。此外,roc-rk3568-pc还配备了四个USB 2.0接口、两个USB 3.0接口、一个千兆网口、一个SPI Flash等。 对于开发者和爱好者来说,roc-rk3568-pc提供了完整的软件开发包(SDK),包括操作系统、编译器、驱动程序、应用程序等。同时,roc-rk3568-pc还有丰富的软件生态系统和社区支持,大大降低了开发门槛和开发成本。 总之,roc-rk3568-pc是一款高性能、全功能、易开发的台式电脑板,适用于各种应用场景,例如家庭娱乐、远程办公、物联网等。 ### 回答2: ROC-RK3568-PC例程是一个基于ROC-RK3568平台设计的针对PC设备的系统应用程序。该例程主要提供了一个使用ROC-RK3568平台的PC设备的示例,用户可通过该例程学习ROC-RK3568平台的基本应用,相应的硬件配置和软件编程技术。 针对ROC-RK3568-PC例程,用户需要掌握一定的嵌入式系统开发技术。首先,用户需要了解ROC-RK3568平台的基本知识,并安装相应的开发环境和编译器。在编写程序的过程中,用户需要熟悉C/C++语言和Linux操作系统,同时掌握设备驱动和应用程序的编写方法,用于实现安装、媒体播放、网络通信、GUI开发等功能。 ROC-RK3568-PC例程的主要任务是提供一个基本的嵌入式系统应用程序示例,让开发者通过学习和修改代码,快速掌握ROC-RK3568平台的开发和应用。该例程的编写需要开发者对ROC-RK3568平台熟悉到一定程度,需要有一定的软件编码能力和嵌入式系统设计经验。同时,用户还需要具备较好的沟通能力和团队协作能力,与其他成员共同完成开发任务。 总的来说,ROC-RK3568-PC例程是一个有实际应用价值的例程,对于想要深入了解嵌入式系统开发开发者,学习和掌握该例程的编写技术是非常有益的。 ### 回答3: ROC-RK3568-PC例程是指基于ROC-RK3568芯片的PC开发板的样例程序。ROC-RK3568是一款高性能的处理器芯片,可以广泛应用于智能家居、工业控制、远程监控等领域。ROC-RK3568-PC是采用该芯片设计的一款开发板,可以为开发者提供丰富的硬件接口,并支持多种操作系统,如Ubuntu、Android等。 ROC-RK3568-PC例程提供了各种各样的代码示例和应用程序,可以帮助开发者更好地理解和使用ROC-RK3568芯片,实现自己的应用程序。例如,样例程序包括了基于Qt的UI界面设计、GPIO控制、I2C读写、串口通信、网络通信、摄像头采集等功能。此外,还提供了蓝牙配对、TCP/IP通信、远程控制等应用程序,可以帮助开发者快速搭建自己的应用系统。 对于需要使用ROC-RK3568芯片进行开发开发者来说,ROC-RK3568-PC例程是一个非常有用的参考,可以加快开发进度,提高开发效率。自定义应用程序时,只需要根据自己的需求进行修改或者扩展即可。ROC-RK3568-PC例程提供了良好的参考和基础,为开发者快速实现自己所需的功能提供了便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值