频谱仪多种内核间通信机制的方案设计
4.1.4 资源的释放
与hpi_init函数相对应的是hpi_exit函数,实现的是资源的释放。代码如下:
以上代码包括中断资源释放、映射关系释放、内存释放、没备释放。与hpi_init函数比较可看出,释放的顺序与申请注册的顺序正好相反。
4.1.5 模块的编译、加载
在驱动文件的最后加上如下代码,设置模块加载与释放对应的函数:
module_init(hpi_init);
module_exit(hpi_exit);
完成了驱动程序的编写,将源程序文件在Linux开发环境下编译成.ko的模块文件,使用insmod和rmmod指令来加载和卸载模块。
4.2 SPI设备驱动程序实现
在SPI的驱动设计中,大体的框架跟HPI是相同的。包括头文件宏定义的完善、SPI设备的初始化、file_operations结构中函数的实现、资源释放,最后编译、加载。需要说明的是AT91RM9200自带了SPI接口,所以初始化时要根据芯片手册对SPI接口的I/O线、时钟、工作模式
等进行配置,才能保证硬件的正常工作。在SPI驱动的write函数中,使用了如下代码:
copy_from_user(Ytos,buf,count);
在Linux的驱动设计中,经常涉及到用户空间和内核空间的通信问题,即数据的交换。copy_from_user与copy_to_user函数就是为了实现这一功能。上述代码实现的功能就是将用户空间buf的count字节的内容复制到内核中定义的数组Ytos中,从而完成用户空间和内核的数据交换。驱动的其余实现类似HPI,不再详述。
4.3 驱动的调试
对于程序语法的调试,在编译的过程中解决。根据Linux平台下的交叉编译器arm-linux-gcc的提示信息,修改出现的语法类错误。在保证了驱动文件的成功编译后,对于程序功能的调试,采用打印函数printk跟踪调试。在程序适当的位置加入printk打印信息,如根据设备注册函数的返回值来打印成功或者失败的信息,可以很直观的了解程序的运行情况,是很有效的调试方法。在调试过程中,利用示波器来检测某些通信端口的电平信息,可以了解到是否有数据通信。通过几种手段的结合,最后完成驱动程序的调试。
结语
本课题采用ARM、DSP、FPGA的三核构建的系统平台,将它们各自的优点有机的结合起来。在完成各自的数据处理后,分别通过HPI、SPI接口进行数据交换,在ARM的整体控制下,实现了系统稳定运作。而基于ARM的嵌入式Linux操作系统,还能提供友好的人机交互界面。该平台在智能仪表、信号测试分析等领域都能发挥很好的作用。
- HSDPA、WiMAX和LTE关键技术比较与分析(06-12)
- LTE中多业务的下行调度算法(09-23)
- 基于μC/OS-Ⅲ的多任务间邮箱机制分析与应用(06-14)
- 基于RFID技术的游客游迹跟踪与追溯系统(05-16)
- 基于ZigBee协议的无线传感器网络服务质量的研究(01-14)
- 基于标识/位置分离的新型移动性管理机制研究(09-03)