vxworks 笔记

 

1    安装

Vxworks 有两张安装盘,安装有以下步骤:

1)        安装tornado 2.2.1

使用第一张盘,注意安装时必须保证当前没有安装过tornado,如果安装过必须从注册表中清空所有的tornado;选择“ManualLicense”,即License手动安装

2)        安装BSP/Drivers

第一张盘和第二张盘都用了,不知什么东西,也不懂

3)        安装License

复制license.dat文件到某个位置,然后设置“系统环境变量”,指向这个文件license.dat,注意必须是“系统环境变量”,不能是“用户环境变量”

这就是手动安装License 环节。

安装完成,tornada 被安装到D:\Tornada2.2

2    调整

本次任务是完成vxworks 环境下ppc 85xx系列的SDK发布环境,因此需要将之前准备好的ppc 85xx环境复制过来。当时直接将以前开发人员的target、host目录直接复制过来覆盖即可,注意备份。

3    vxWorks 简介

3.1                  目录树

下图为目录树结构,目前我们仅关注的是host、target两个;如果获取帮助可以直接查看docs中的books.html即可。

3.2                  工具包

编译vxworks 时使用gnu工具,包括make、grep等等,这些工具都是专门编译好的windows 程序,具体位置在host/x86-win32/bin/目录下,因此在使用脚本编译时必须将该目录包含到path环境变量中。

3.3                  交叉编译工具链

交叉编译工具链包括编译器、头文件、库文件。

1)        编译器

gcc编译器位置在host\gnu,当前使用gcc作为编译器

vxworks 提供的diab编译器,位置在host\diab

2)        头文件

可以理解为Linux 下的libc库头文件,此为vxworks头文件,位置在target/h,注意,此目录下不仅在C语言头文件,也包含vxworks的编译框架makefile头文件

3)        库文件

此为vxworks库文件,位置在target/lib

3.4                  BSP

即板级支持包,位置在target/config/目录下,基本上每个目录为一个BSP,每个硬件类型都有一个BSP对应,特例如下:

目录comps,为所有BSP的基本模块描述文件

目录all,所有BSP的公共部分,当前放置在xvfi8548目录下了,由于xvfi8548的BSP中Makefile如此写,因此没有更改all的位置。

3.5                  project

位置在target/proj/目录下,对应使用tronado集成环境下的工程,创建一个工程即生成一个目录,当前使用的工程为xvfi8548。

3.6                  Image

vxworks image分两种:

bootrom,即引导器,用于加载和启动vxworksimage,bootrom由BSP编译获得,这个东西目前是通过烧录器烧录到flash上,相当麻烦;希望可以使用uboot来代替。

vxworks,即vxworks主程序,相当于Linux内核加root文件系统,由BSP外加启动程序实现。由target/proj/xvfi854/目录下编译获得。

4    编译框架

vxworks编译使用gnu make工具,工程之间互相独立,BSP也互相独立。目前需要编译的东西就是bootrom和vxworks两个。

下面以编译vxworks为例详细介绍整个编译过程。

4.1                  编译组成

当前工程下的Makefile和target/h/make 目录组成,在编译之前务必要设置环境变量,这些环境变量有:

WIND_BASE              此为vxworks安装的主目录,也即host、target目录的上一层目录

WIND_HOST_TYPE  即当前系统的架构,均为x86-win32

PATH                            主要是添加工具包路径和编译工具链路径

设置好环境变量后,在需要编译的工程(或者BSP)目录下执行make即可,比如当前的vxworks工程在target/proj/xvfi8548/目录下,直接到该目录下make 即可。

vxworks的编译组成相当复杂,实在是讨厌至极啊。

4.1.1        Makefile

工程的Makefile做了如下的事情:

1)        定义需要编译的.o文件集合,以及这些.o文件的编译方式,某些.o文件对应的.c文件来自于BSP,某些来自当前目录

2)        包含一堆其他的makefile,其中最重要的是两个,defs.project和rules.project

3)        定义编译参数CFLAGS,注意在PPC环境下务必要使用-mstrict-align确保对齐访问

4)        定义链接参数LIBS,链接其他外部模块,这里包括ezdriver的模块和SDK模块

注意这个Makefile没有指定default要做什么,这个default 目标在defs.project中定义

4.1.2        defs.project

顾名思义,该文件主要是定义变量。

定义了default目标,它依赖于exe条件,注意,这个default是整个Makefile的第一个目标,所以make 命令会以它做为编译的目标。这个exe又在rules.project中定义。

还要注意其中的CFG_GEN变量,它用来产生依赖关系,但由于我们不会在vxworks 上做多少二次开发,不需要生成什么依赖,全部重新编译即可,因此后续可以看到将这个生成依赖的命令去年了。

同时这个文件包含了一系列的makefile文件,以下详述:

1)        defs.link

定义link(链接)时的一些变量

2)        defs.x86-win32

定义一堆gnu工具,包括RM、CP等等

3)        defs.vxworks

定义POSTLINK_MODULES,包括生成ctdt.o这个文件,该文件以后在链接vxworks image时会用到

4)        make.ppc85xxgnu

定义编译工具链

4.1.3        rules.project

顾名思义,该文件主要定义编译规则。

终于找到exe目标的规则了,它依赖于$(default_rule),这个default_rule在工程的Makefile中就已经定义了,为vxWorks。

该文件包含了rules.vxWorks,其中定义了vxWorks的编译规则,它依赖于partialImage.o和POSTLINK_MODULES。而其中的partialImage.o 就是Makefile中定义的.o文件集合聚合生成的。

4.2                  编译过程

4.2.1        生成.o文件

.o文件集合由Makefile定义,包含sysALib.osysLib.o usrAppInit.o linkSyms.o npclib.o mmuE500LibExt.o i2clib.o bspDebug.omotTsecEnd.o usrprjConfig.o,注意这些文件对应的源文件有些在当前工程下有些在BSP下。

4.2.2        生成partialImage.o文件

该文件由如下文件生成:

1)        4.2.1编译生成的所有.o文件

2)        version.o文件,其源文件位于target/config/comps/src目录下,版本号文件

3)        CPU专用库文件,当前为target/lib/libPPC85XXgnuvx.a

4)        所有外部库文件,包括ezdriver编译的.a和SDK编译的.a文件

注意此处是链接过程,但链接时如果某函数没有被调用则不会链接进去。

4.2.3        生成vxworks image

该文件由如下文件生成:

1)        4.2.2生成的partialImage.o文件

2)        ctdt.o 文件,该文件的源文件ctdt.c是由partialImage.o生成的,内容相当简单,不知道有什么用处

3)        symTbl.o文件,该文件的源文件symTbl.c是由partialImage.o生成的,其中包含了所有的导出symbol,包含函数和变量,某个函数是否被编译进vxworksimage可以直接查看该文件

4)        dataSegPad.o,源文件位置target/config/comps/src/,代码段保护文件

5    启动调试

vxworks的应用程序均在usrAppInit.c 文件usrAppInit函数中启动,如果需要vxworks启动时执行自定义的任务则需要在此函数中嵌入代码。

目前调试环境是在vxworks shell中,为确保SDK和ezdriver的库文件均编译进入,在usrAppInit函数中调用AHE_root函数,但不是启动时调用,是永远不可能到达的分支中调用。

l  波特率

目前vxworks和bootrom使用的是9600的波特率,和uboot以及Linux不一样(115200),这个可以在configAll.h中修改。

l  bootrom

bootrom 修改启动参数无效,当前的bootrom 写死了ftp server为192.168.6.56,本机地址为192.168.6.91,ftp用户名、密码均为w,如果要修改则必须重新刷bootrom,这个问题可以通过修改bootrom来解决,查看文件bootconfig.c,函数bootcmdloop在处理命令’c’时,会将用户输入的配置调用函数sysNvRamSet刷新入内存,但目前会失败,sysNvRamSet函数有太多的实现地方,估计正好编译了某个不支持内存写的函数。

l  文件操作

vxworks没有使用文件系统,但可以打开和关闭文件,在代码中使用fopen时,vxworks会从FTP server上下载一个文件,unlink时会在FTP server上删除一个文件。

l  NP启动

NP启动时会需要打开一个EZdat.dat文件,这个文件貌似是NP的配置,必须的,否则会导致NP异常,因此必须将该文件放置到FTP server上供下载。该文件位置如下:

$(EZDRIVER_DIR)/host/tbs/lib/

l  多次调试

AHE_root函数只能执行一次,再次执行时会报NP初始化错误,但仍然可以进行多次测试。在执行完第一次的AHE_root后退出,然后再执行SDK的测试函数即可,此刻NP初始化已经完成,不需要再初始化了。

vxworks 笔记相关推荐

  1. VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks kernel application (一)

    #1 什么是内核应用程序? #2 开发内核应用程序注意事项 什么是内核应用程序? 内核应用程序不同于RTP程序,它允许在内核态,与操作系统使用相同的地址空间.因此,它与操作系统会相互干扰.它可以编译成 ...

  2. VxWorks 6.9 内核编程指导之读书笔记 -- POSIX

    POSIX能力 VxWorks扩展了POSIX,为了移植,VxWorks提供了额外的POSIX接口作为可选组件.VxWorks实现了POSIX 1003.1(POSIX .1)一些传统接口以及POSI ...

  3. VxWorks学习笔记一 ------Bootrom和VxWorks镜像的引导

    概述 VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS).它以其良好的可靠性和卓越的实时性被广泛地应用在通信.军事.航空.航天等高精尖技术及实时 ...

  4. vxworks培训笔记

    嵌入式开发涉及的内容 <1>硬件选型:CPU,板子架构,总线,存储方式,外设,接口 <2>软件:  自编操作系统:编译原理,语言选择,调试工具,第三方开发工具  高级操作系统: ...

  5. [笔记] vxworks添加静态路由备注routec

    本文只是简易笔记,详细了解静态路由请自行查询其他材料. 设备1的IP配置如下图: 设备2的IP配置如下图: 可以看到:设备1和设备2的motetsec0网卡在192.168.200.0网段,是可以互相 ...

  6. ​【安全牛学习笔记】操作系统识别

    该笔记为安全牛课堂学员笔记,想看此课程或者信息安全类干货可以移步到安全牛课堂 Security+认证为什么是互联网+时代最火爆的认证? 牛妹先给大家介绍一下Security+ Security+ 认证 ...

  7. SQLite介绍、学习笔记、性能测试

    哪些人,哪些公司或软件在用SQLite: Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飞信,Chrome,FireFox 可见SQLite的稳定性及性能是不会有 ...

  8. 简明Python教程学习笔记_1_基本

    参考:http://www.kuqin.com/abyteofpython_cn/index.html Learn Python in Y minutes:http://www.jianshu.com ...

  9. 【论文-笔记】软件化雷达显示终端的设计与实现

    在各种雷达数据处理系统中,雷达显示终端是雷达与操作员之间直接进行交互操作的界 面,是整个系统的最重要组成部分之一.在建立雷达数据处理或虚拟操作系统时,雷达显示 器的仿真水平将直接影响到整个系统的效果. ...

最新文章

  1. career service at cambridge
  2. Mybatis框架的连接池配置
  3. 【Project3】【web.xml分析】
  4. C++ HOOK 详解
  5. Jbpm工作流表补数记录
  6. (赵强老师原创)搭建CDH实验环境,三个节点的安装配置
  7. Java ClassLoader基础及加载不同依赖 Jar 中的公共类
  8. matlab改进中值滤波,求助中值滤波和自适应中值滤波算法错误修改
  9. 嵌入式Linux开发简介
  10. 关于中国互联网的国际出口-转载
  11. 什么是STM32的ISP?
  12. 实时数仓的实时保障指南
  13. Vue中使用echarts,echarts 封装以及使用的事项
  14. 一年级的计算机你,写电脑的一年级作文五篇
  15. 多文件自平衡云传输(二)资源接收 断点续传篇 —————— 开开开山怪
  16. QStackedWidget切换动画实现以及尝试过程中花点、花屏、背景无法透明解决处理
  17. android守护进程详解
  18. python中怎样在图片上画线段_python 实现PIL模块在图片画线写字
  19. 编译原理实验:自上而下语法分析
  20. 绘图库Matplotlib | Python技能树征题

热门文章

  1. js逆向案例-某数美
  2. 用VLC搭建简单的流媒体服务器
  3. host 计算机英语作文,My Favorite Hostest英语作文
  4. 修改 Virtual PC 2007 的显存大小
  5. 别再说你不懂malloc()和calloc()的区别
  6. linux中stat函数的用法,os.stat()函数的用法
  7. muduo源码分析之Buffer
  8. 易烨卿:一场虚拟世界的反歧视大战(转)
  9. 学了python做什么自由职业者_如何做一个自由职业者?
  10. JSP+ssm计算机毕业设计晨光心雨文具店销售管理系统l80v7【源码、数据库、LW、部署】