分享

Tool之DKM

 立志德美 2019-06-24

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


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

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


来建一个DKM看看

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


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


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

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


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


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

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


完善代码


然后Build就可以了


第一次Build时,直接选择Continue


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


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


然后在Shell里就可以调用DKMPublic Function


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


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

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


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


ToolsDefinesVariables页面里,都可以添加工程的宏定义


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


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


即使同一个TargetDKM也可以生成多个Module

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


然后创建新的Module


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


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

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

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


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


VIPusrAppInit()里启动最终的应用程序(在《UtilityAPP自启动》里提到过)

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

这正是:

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

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

我是泰山,专注VX 14(+10个月)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多