创建第一个Vxworks bootable image工程——Socket 通信实验

创建第一个Vxworks bootable image工程——Socket通信实验

DanielLee_USTB 2013.6.25

QQ:382899443

 

         昨天睡的有点晚,上午有点瞌睡,不过创建的第一个vxworks bootableimage在今天终于运行成功了。早上的困意一扫而去,小兴奋的讲讲这个过程。其中遇到了很多问题,整理下以作借鉴。

         在Tronado2.2编译器中点击新建一个可启动的vxworks系统镜像。


         输入工程名,可以看到创建的工程默认存储在target\proj\这个文件夹下,这个文件夹提供了基于很多种不同CPU架构的工程模板,由于有之前可以在s3c2410上跑的示例程序,所以可以基于这个BSP来创建自己的工程。


         为了方便起见,现在先不讨论移植的问题,所以可以将自己的工程建立在现有可用的工程上,比如:


         说实话这样可以省不少事。按下一步,发现出现以下提示:


         好像是说缺少一些文件和库,那就奇怪了,为什么原来的工程可以正常运行,为什么现在基于它就出问题了呢?接着往下看。

         下面是建好的工程:


         先编译一下看看


 

       发现还没编译几个文件就出现了错误,停止编译,怎么回事?仔细看一下,为啥编译的目录还是原来工程的目录呢?对了!肯定是makefile里面编译规则的问题,打开makefile,看到BSP目录的定义以及编译文件的路径,原来是需要修改的!


         在makefile文件中注意到,编译的文件存放在targt/config/###文件夹中,打开这个文件看看,原来有关所有用户程序源文件都在这个文件夹中,proj文件夹中只存放了一些工程配置文件,而不是BSP文件,那么创建自己的BSP文件,并把原来的地址全部替换为我们自己的BSP路径应该就行了吧。


 

         急不可待的再编译一下,BSP 编译OK!


         下一步添加关于socket server通信的源文件到自己的BSP中,这个源文件也是在网上找的,稍作修改就可以用。


       当我把创建socket server的任务加入到usrAppInit()这个函数中,自己创建的任务是不是就可以跑起来了?编译一下,错误依旧!看来真是需要过五关斩六将才行。


       错误提示说usrAppInit(),无法找到vxSer.h这文件,文件中声明了有关socketserver测试的程序,明明已经包含到了usrAppInit().c中,咋还不行?第一反应还是makefile有问题,打开一看makefile已经自动生成各个函数的编译规则,可是显然没有吧vxSer.h这个库加进去,自己加进去,如下:


         再编译,成功了,哈哈!


         通过Jlink把vxworks系统镜像下载到目标板中:



         拔掉Jlink,运行看看,vxworks运行的飞快!不到2秒系统就起来了,比用u-boot启动的QNX快多了。在串口助手下看到:

                VxWorks

Copyright 1984-2002  Wind River Systems, Inc.

CPU: ARM Integrator - ARM920T (ARM)

  Runtime Name: VxWorks

Runtime Version: 5.5

   BSP version: 1.2/5

       Created: Jun 24 2013, 01:31:02

  WDBComm Type: WDB_COMM_END

           WDB: Ready.

sst39VF160 serialNo=0

-> initisizing.......

CMD0 Chk_CMDend:1.

In idle.

In SD ready.

End id.

In stand-by

sd/mmc_card_init OK.

RK2410 USB DEVICE Download FileTest-UsbRxAddr=0x31839c34

Wait for usb line......

Create Task socketSerTask 0x31fffe68(tRootTask): netinit:unable tobind to port 23

       比较郁闷的是,socketserver任务居然在绑定本机地址与端口的时候失败了。设置LOCAL_SERVER_PORT 为23,是想如果成功了就可以直接用Telnet跟目标表通信了,这是为啥呢?

if(bind(listenSkt,(struct sockaddr*)&serverAddr,sockAddrSize)==ERROR){

                logMsg("netinit:unableto bind to port %d\n",LOCAL_SERVER_PORT,0,0,0,0,0);

                close(listenSkt);

                return(ERROR);

             }

     检查一下看是怎么回事儿,看看vxworks目标板的IP地址情况

-> ifShow

tsfs= (unit number 0):

    Flags: (0x8063) UP BROADCAST MULTICAST ARP RUNNING

    Type: ETHERNET_CSMACD

    Internet address: 192.168.253.123

    Broadcast address: 192.168.253.255

    Netmask 0xffffff00 Subnetmask 0xffffff00

    Ethernet address is 00:02:03:04:05:06

     保证主机与目标板在同一网段的条件下发现是可以ping通的,这就说明网络连接没有问题。


         那是不是vxworks这个端口被占用了呢,找了半天也没发现如何查看vxworks已占用的端口是怎么查的,其实这个端口被固定为Telnet使用,那就换成端口3000后试试。

-> initisizing.......

CMD0 Chk_CMDend:1.

In idle.

In SD ready.

End id.

In stand-by

sd/mmc_card_init OK.

RK2410 USB DEVICE Download FileTest-UsbRxAddr=0x31839c34

Wait for usb line......

0x31fffe68 (tRootTask): netinit:successfully bind to prot3000

       哈哈,居然成功了!在主机登录telnet看看端口3000是否可以正常通信:


         完全没问题!实现的socket server可以正常与主机的telnet通信了!看来23端口确实被占用了,想要实现特定功能还是需要费一番周折的。

         通过这个实验可以总结出如何创建一个bootable image工程:

         ①初学阶段应保证有一个可以在目标板上运行的BSP。

         ②基于这个BSP创建一个工程,在config文件夹下将原BSP中文件拷贝到自己的BSP中,基于这个做修改。

         ③修改makefile文件中BSP路径以及各文件编译路径。

         ④添加自己的应用程序,并在usrAppInit()中调用自己创建的任务。

         ⑤编译一次使makefile生产新增源文件编译规则,注意修改依赖条件。

         ⑥编译成功后下载到目标板调试即可。

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值