博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Xenomai 3 migration
阅读量:4878 次
发布时间:2019-06-11

本文共 1135 字,大约阅读时间需要 3 分钟。

Xenomai 3 的rtdm驱动更像一般的Linux驱动,named device会在/dev/rtdm/xxx创建一个设备文件。而用户空间使用时,写得来也和Linux的一般char设备相似,open/close/read/write/ioctl,只不过实际上在link的时候这些函数都被做了手脚,替换成了libcobalt.so中的函数(参见 /usr/xenomai/lib/cobalt.wrappers)。这样就导致在使用rtdm驱动时无须 xeno-config --skin=rtdm --cflags / --ldflags,而是用api对应的配置即可,例如如果用posix api,则应使用 xeno-config --posix --cflags / --ldflags

自动初始化

默认link时会自动加上 /usr/xenomai/lib/xenomai/bootstrap.o,并配合上相应的ldflags,直接把用户的main函数替换为xenomai_main,读取相关的命令行参数,同时调用xenomai_init初始化xenomai各个模块。如果一个动态库使用了rtdm,那么 xeno-config --rtdm --ldflags也会默认带上 bootstrap.o,最后link的时钟会导致 xenomai_main重复定义无法编译过,即使编译过也会导致assert错误或者xenomai_init被多次调用,所以库使用的ldflags应该在生成时加上--no-auto-init,即 xeno-config --rtdm --ldflags --no-auto-init

nrt和rt的函数调用

rtdm驱动中有一些函数有两个版本,例如 ioctl_nrt和ioctl_rt,在Xenomai 2时会根据当前是primary还是secondary来调用rt或nrt,但是Xenomai 3不是这样了,如果有rt版本,那么会先切到primary去调用rt的版本,如果rt返回-ENOSYS(也可不实现ioctl_rt),就会切到secondary再调用nrt的版本。这个在 讲了,如果不注意这一项,在primary时调用了其他linux内核函数,可能导致系统死机(不响应)

mmap

和普通的Linux驱动一样,也支持mmap系统调用了。rtdm驱动只要实现ops->mmap即可,这个函数实现也比较简单,根据内存的性质调用 rtdm_mmap_vmem/rtdm_mmap_kmem/rtdm_mmap_iomem等函数即可。

 

转载于:https://www.cnblogs.com/windtail/p/6263235.html

你可能感兴趣的文章
在javascript中获取一个对象内属性的个数
查看>>
数据结构_Python语言描述(英)pdf
查看>>
HTML5权威指南----读书笔记
查看>>
Swig--模板引擎
查看>>
OpenCV中Camshitf算法学习(补充)
查看>>
java基础面试题常出现(一)
查看>>
Windows 程序 HelloWorld
查看>>
1.1 Python是一种什么样的语言
查看>>
Spring Boot (十):邮件服务
查看>>
angular4 使用window事件【转】
查看>>
cJSON使用
查看>>
读书笔记:《C#与.NET4高级程序设计》-核心部分
查看>>
HDU 2100 LoveKey
查看>>
PAT L2-019 悄悄关注
查看>>
Softmax实现 fashion.mnist 分类
查看>>
统计学习-朴素贝叶斯法
查看>>
学习进度17
查看>>
编译原理——算符优先分析文法(附源代码)
查看>>
jboss的启动过程
查看>>
渲染部分
查看>>