前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tool之DKM

Tool之DKM

作者头像
Taishan3721
发布2019-07-10 15:29:25
1.3K0
发布2019-07-10 15:29:25
举报
文章被收录于专栏:这里只有VxWorks

DKM,就是Workbench里的Downloadable Kernel Module project,这种工程用于管理/构建系统内核空间里的应用模块

通过DKM,可以单独构建基于内核的应用模块,在运行VxWorks的Target上运行和调试应用,并动态地加载、卸载和重新加载应用。当开发工作完成后,还可以静态地将应用模块链接到内核中。

内核模式生成的所有任务都在未受保护的环境中运行,可以完全访问系统中的硬件。链接到内核的可下载内核模块是在Target启动时就可以启动的应用程序。这种内核模式开发是传统的VxWorks开发方法,而VxWorks 5.x只支持这种模式,也就是Tornado里的downloadable application module project

来建一个DKM看看

先给工程起个名字,位置放在当前workspace就可以了

选择合适的Active build spec。什么叫合适?就是与要运行这个DKM的VIP的CPU+Tool一致

没有提到的页面里,直接使用默认值就可以了。

在建好的DKM里,可以添加自己的代码了

记着文件名是有后缀的,而且后缀名是小写字母

也可以分目录添加,即使用文件夹

也可以直接添加已有的文件

完善代码

然后Build就可以了

第一次Build时,直接选择Continue

然后Workbench就基于每个源文件,生成一个.o文件,最后再链接成一个.out文件

然后启动Target,连接Target Connection。右击Binaries/xxx.out,选择Download VxWorks Kernel Task,将这个Module加载到Target的VxWorks里

然后在Shell里就可以调用DKM的Public Function了

不过Workbench相比Tornado做了很多改进,例如可以直接在DKM上右击,选择Run As VxWorks Kernel Task。这个动作会自动Save Files、Build Project、Download Module、Run Task,相当于一键式运行应用程序了

Entry Point是要启动的任务入口,也就是要执行的第一个函数。可以手动写入,可以通过Browse在Module文件里查找

接下来看看DKM的其它特性,打开工程的属性页面

在Build Properties->Paths页面里,可以添加头文件路径

在Tools、Defines、Variables页面里,都可以添加工程的宏定义

应该有人已经发现:在“Add”按钮后面都有一个“Add to all”。因为Workbench的一个DKM可以支持多种build spec

也就是说,一个DKM可以生成多种Target的Module。是不是很强大,其实还有一个快捷方式:

即使同一个Target,DKM也可以生成多个Module。

试试看:先把默认的Module删掉

然后创建新的Module

名字和包含的文件,都可以指定

例如,建两个Module,包含不同的源文件。Build之后,就得到两个.out文件了

通常在项目开发阶段的最后,还可以把DKM由动态加载的.out改为静态链接的.a

在Build Targets中的Module的属性里,把Linker改为Librarian即可

然后把这个.a文件,加到VIP的LIBS里(在《Tool之VIP》里提到过),使用绝对路径或相对路径都可以

在VIP的usrAppInit()里启动最终的应用程序(在《Utility之APP自启动》里提到过)

百闻不如一见,百看不如一练。学习VxWorks,最好的方法就是做个项目;没有项目的话,先写个自己的Hello World吧

这正是:

DKM里写应用,内核模式来运行。

动态加载省流程,静态链接自启动。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这里只有VxWorks 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档