vxworks 笔记
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函数,但不是启动时调用,是永远不可能到达的分支中调用。
目前vxworks和bootrom使用的是9600的波特率,和uboot以及Linux不一样(115200),这个可以在configAll.h中修改。
vxworks没有使用文件系统,但可以打开和关闭文件,在代码中使用fopen时,vxworks会从FTP server上下载一个文件,unlink时会在FTP server上删除一个文件。
NP启动时会需要打开一个EZdat.dat文件,这个文件貌似是NP的配置,必须的,否则会导致NP异常,因此必须将该文件放置到FTP server上供下载。该文件位置如下:
vxworks 笔记相关推荐
- VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks kernel application (一)
#1 什么是内核应用程序? #2 开发内核应用程序注意事项 什么是内核应用程序? 内核应用程序不同于RTP程序,它允许在内核态,与操作系统使用相同的地址空间.因此,它与操作系统会相互干扰.它可以编译成 ...
- VxWorks 6.9 内核编程指导之读书笔记 -- POSIX
POSIX能力 VxWorks扩展了POSIX,为了移植,VxWorks提供了额外的POSIX接口作为可选组件.VxWorks实现了POSIX 1003.1(POSIX .1)一些传统接口以及POSI ...
- VxWorks学习笔记一 ------Bootrom和VxWorks镜像的引导
概述 VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS).它以其良好的可靠性和卓越的实时性被广泛地应用在通信.军事.航空.航天等高精尖技术及实时 ...
- vxworks培训笔记
嵌入式开发涉及的内容 <1>硬件选型:CPU,板子架构,总线,存储方式,外设,接口 <2>软件: 自编操作系统:编译原理,语言选择,调试工具,第三方开发工具 高级操作系统: ...
- [笔记] vxworks添加静态路由备注routec
本文只是简易笔记,详细了解静态路由请自行查询其他材料. 设备1的IP配置如下图: 设备2的IP配置如下图: 可以看到:设备1和设备2的motetsec0网卡在192.168.200.0网段,是可以互相 ...
- 【安全牛学习笔记】操作系统识别
该笔记为安全牛课堂学员笔记,想看此课程或者信息安全类干货可以移步到安全牛课堂 Security+认证为什么是互联网+时代最火爆的认证? 牛妹先给大家介绍一下Security+ Security+ 认证 ...
- SQLite介绍、学习笔记、性能测试
哪些人,哪些公司或软件在用SQLite: Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飞信,Chrome,FireFox 可见SQLite的稳定性及性能是不会有 ...
- 简明Python教程学习笔记_1_基本
参考:http://www.kuqin.com/abyteofpython_cn/index.html Learn Python in Y minutes:http://www.jianshu.com ...
- 【论文-笔记】软件化雷达显示终端的设计与实现
在各种雷达数据处理系统中,雷达显示终端是雷达与操作员之间直接进行交互操作的界 面,是整个系统的最重要组成部分之一.在建立雷达数据处理或虚拟操作系统时,雷达显示 器的仿真水平将直接影响到整个系统的效果. ...
最新文章
- career service at cambridge
- Mybatis框架的连接池配置
- 【Project3】【web.xml分析】
- C++ HOOK 详解
- Jbpm工作流表补数记录
- (赵强老师原创)搭建CDH实验环境,三个节点的安装配置
- Java ClassLoader基础及加载不同依赖 Jar 中的公共类
- matlab改进中值滤波,求助中值滤波和自适应中值滤波算法错误修改
- 嵌入式Linux开发简介
- 关于中国互联网的国际出口-转载
- 什么是STM32的ISP?
- 实时数仓的实时保障指南
- Vue中使用echarts,echarts 封装以及使用的事项
- 一年级的计算机你,写电脑的一年级作文五篇
- 多文件自平衡云传输(二)资源接收 断点续传篇 —————— 开开开山怪
- QStackedWidget切换动画实现以及尝试过程中花点、花屏、背景无法透明解决处理
- android守护进程详解
- python中怎样在图片上画线段_python 实现PIL模块在图片画线写字
- 编译原理实验:自上而下语法分析
- 绘图库Matplotlib | Python技能树征题
热门文章
- js逆向案例-某数美
- 用VLC搭建简单的流媒体服务器
- host 计算机英语作文,My Favorite Hostest英语作文
- 修改 Virtual PC 2007 的显存大小
- 别再说你不懂malloc()和calloc()的区别
- linux中stat函数的用法,os.stat()函数的用法
- muduo源码分析之Buffer
- 易烨卿:一场虚拟世界的反歧视大战(转)
- 学了python做什么自由职业者_如何做一个自由职业者?
- JSP+ssm计算机毕业设计晨光心雨文具店销售管理系统l80v7【源码、数据库、LW、部署】