【Pixhawk】注册一个字符型驱动设备
来源:互联网 发布:采购流程及优化 编辑:程序博客网 时间:2024/05/22 10:45
最近学习Pixhawk的SPI,本以为PX4是STM32单片机而已, 写个SPI驱动应该很简单。但是当我看到mpu9250的那些cpp文件,我一下就蒙了。由于PX4用的NUTTX系统,类似Linux,所以一切都不是裸代码,操作寄存器那么单纯。它还封装了文件系统的概念。哎。。。不懂C++, 不懂Linux, 只有慢慢啃吧!!!!
先从大神的一篇博客入门:
《Pixhawk原生固件PX4之MPU6000驱动分析》
http://blog.csdn.net/oqqENvY12/article/details/70039527
相信看完之后还是不知所以然,其实实现字符型设备注册的过程就是在mpu6000.cpp 里的(MPU6000_SPI.CPP其实是初始化总线的)
/** * start driver for a specific bus option */boolstart_bus(struct mpu6000_bus_option &bus, enum Rotation rotation, int range, int device_type){int fd = -1;if (bus.dev != nullptr) {warnx("%s SPI not available", bus.external ? "External" : "Internal");return false;}device::Device *interface = bus.interface_constructor(bus.busnum, device_type, bus.external); //SPI总线实例化if (interface == nullptr) {warnx("no device on bus %u", (unsigned)bus.busid);return false;}if (interface->init() != OK) { //这里初始化SPI总线,和文件系统无关,先不理会delete interface;warnx("no device on bus %u", (unsigned)bus.busid);return false;}bus.dev = new MPU6000(interface, bus.accelpath, bus.gyropath, rotation, device_type); //这里才是和文件系统相关的if (bus.dev == nullptr) {delete interface;return false;}if (OK != bus.dev->init()) { //这里其实是调用CDev::init() 这个函数实现字符型驱动注册,需要3个参数,名称“MPU6000”,路径“/dev/mpu6000_accel”(可以在//nsh>cd dev 看到),"irq 不懂干什么,实际也没有 赋值"(字面意思是中断)goto fail;}/* set the poll rate to default, starts automatic data collection */fd = open(bus.accelpath, O_RDONLY);//注册驱动之后,可以调用open()打开驱动,fd是这个文件的句柄。Linux里 设备=文件 。。。if (fd < 0) {goto fail;}if (ioctl(fd, SENSORIOCSPOLLRATE, SENSOR_POLLRATE_DEFAULT) < 0) { //之后可以进行ioctl() read() write() 等操作,为什么??因为注册驱动 的时候,已经将fd的句//柄和MPU6000::ioctl MPU6000::read MPU6000::write(C++ 这些函数是重写基类CDev //的) 所以这里其实等价于 bus.dev->ioctl(.....)goto fail;}if (ioctl(fd, ACCELIOCSRANGE, range) < 0) {goto fail;}close(fd);return true;fail:if (fd >= 0) {close(fd);}if (bus.dev != nullptr) {delete bus.dev;bus.dev = nullptr;}return false;}
//如果不懂C++,按照C的思维是看不明的,主要是类的继承,类成员函数的重写,覆盖,动态绑定需要知道
//以上写的比较乱
>>>>>>>>>>>>>接下来记录SPI的初始化步骤,以后补充
阅读全文
0 0
- 【Pixhawk】注册一个字符型驱动设备
- pixhawk px4 字符型设备驱动
- 一个典型的字符设备驱动,带平台设备与驱动注册
- Linux字符设备驱动--设备注册
- Linux驱动编程--字符设备文件注册
- 字符设备注册platform平台驱动机制
- 《Linux驱动》注册字符类设备
- Linux字符设备驱动的注册
- pixhawk px4 spi设备驱动
- 以杂项设备驱动的方法注册字符设备驱动
- 创建一个字符设备驱动
- 开发一个字符设备驱动
- 字符设备驱动--- 数据结构 设备注册struct cdev , 注销
- 字符设备驱动--- 数据结构 设备注册struct cdev , 注销
- 三种方式注册一个字符设备
- 笔记二:字符设备之cdev方式注册字符驱动
- 驱动注册,设备注册
- 一个简单字符型设备驱动及其测试
- linux下不重启建立正在运行数据库的从库
- C#中对DataGridView列表中的数据进行查询并定位
- Tuxedo-下载与安装1
- angularJs中的provider服务
- HTML学习
- 【Pixhawk】注册一个字符型驱动设备
- 支付宝PC端接入
- redis集群
- SpringBoot配置
- 中文分词 正向最大匹配法 逆向最大匹配法 双向最大匹配法
- Vision_MATH_中国剩余定理
- SAS操作知识点记录
- 自定义View基础
- Gym 101482.C