打印

请教:关于VxWorks BSP的启动过程的

[复制链接]
4203|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sunwind45|  楼主 | 2008-4-28 10:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我们调试bsp,这里面没有包含操作系统,只是个bsp.
它的启动过程是这样的吗:
romInit() --> romStart() --> usrInit()?
如果是这样,那么这里的usrInit()是不是bootConfig()里的那个?

现在我们发现,我们的bsp在执行到kernelInit()的时候,好象是没进去.因为我们加了个小程序在usrRoot()里,没执行.这里的kernelInit()是bootConfig里的.

没搞清楚!

相关帖子

沙发
后学| | 2008-4-28 12:59 | 只看该作者

是的

我们调试bsp,这里面没有包含操作系统,只是个bsp.
它的启动过程是这样的吗:
romInit() --> romStart() --> usrInit()?
如果是这样,那么这里的usrInit()是不是bootConfig()里的那个?


具体的细节还要看makefile。。。

使用特权

评论回复
板凳
sunwind45|  楼主 | 2008-4-28 15:17 | 只看该作者

问题依旧

makefile 决定了执行哪个?

文档里,看了有个VxWorks启动过程,说的是usrInit()在usrConfig()里;但是,实际是执行的是bootConfig里的那个.根据源程序里的说明,应该是bootConfig()里的.这里会不会有个冷启动/热启动的问题?

他们写的鸟程序太复杂,看起来很困难!

现在发现,在usrInit()里,执行完usrKernelInit()以后,紧跟着的KernelInit()没有执行.
这比较怪异!

使用特权

评论回复
地板
后学| | 2008-4-28 20:52 | 只看该作者

re

一般bootRom时使用bootconfig.c
vxWorks系统启动时使用usrConfig.c

使用特权

评论回复
5
sunwind45|  楼主 | 2008-4-29 10:09 | 只看该作者

没错

现在也搞不清楚是什么问题了.
本来以为,改改这,改改那,就可以了
没想到,问题还挺多

郁闷...

难道非得去看源代码?

使用特权

评论回复
6
后学| | 2008-4-29 10:30 | 只看该作者

re

有仿真器么,单步调试下。。。

使用特权

评论回复
7
sunwind45|  楼主 | 2008-4-30 10:27 | 只看该作者

看来只能这样了

原来估计是中断的问题,把中断都屏蔽了,不管用

单步,感觉好麻烦啊

使用特权

评论回复
8
xinzha| | 2008-5-4 10:23 | 只看该作者

ll

用JTAG跟,同时配合反汇编,调试BSP就是比较麻烦。

使用特权

评论回复
9
sunwind45|  楼主 | 2008-5-4 21:25 | 只看该作者

唉,烦!本来想修改一下别人的,没想到问题还挺多

在config.h里的user-reserved-size应该是零吗?

在kernelinit()里,应该需要一个root stack,这样的话,user-reserved-size是不是应该不是0,应该保留一个root stack的大小?
我们买的目标板带的bsp,user-reserved-size是0.它是这样的,装了个128M的sdram,但是在config.h里,设定的却是32 M.
我们自己做的是8M的sdram,设定的也是8M.这样的话,user-reserved-size是不是应该不是0啊?

使用特权

评论回复
10
thw| | 2008-5-6 01:24 | 只看该作者

...

user-reserved-size 是说用户管理的内存,操作系统不会接管。是不是0你自己决定。root stack操作系统会从自己管理的内存里切。一般几K足够。

使用特权

评论回复
11
sunwind45|  楼主 | 2008-5-6 10:37 | 只看该作者

哦 这样啊

晓得了.
     bsp就是调不通,郁闷死人了

使用特权

评论回复
12
thw| | 2008-5-6 21:54 | 只看该作者

。。

usrRoot起不来的话多半是因为usrInit的初始化有问题

BSP需要耐心,多分析wind的文档和芯片手册。也可以在vxworks源码里加些调试信息

使用特权

评论回复
13
tyrone3000| | 2008-5-8 13:24 | 只看该作者

源代码 必须得看的!

一个正在学习vxworks的飘过!

使用特权

评论回复
14
sunwind45|  楼主 | 2008-5-8 15:33 | 只看该作者

老大们的经验很宝贵

非常感谢,看来这个bsp急不得



问题就是进了最后这个kernelInit(),就没出来.原因是对一个无效地址取数(单步跟了下).但是,我不知道出问题的这一块反汇编是干吗的,所以,很难下手.   用IDA做函数提取,也没提取出来.

难道说usrKernelInit()没把kernel配置好?kernelInit()这个函数是库函数,除了参数,我们也不能参与什么啊

唉,没办法,自己加把劲吧,又一周过去了...

使用特权

评论回复
15
xinzha| | 2008-5-9 10:52 | 只看该作者

ll

我以前的经验是如果进入了KernelInit里没出来的话,多半是因为我把系统中断向量或者任务调度服务例程放错了位置。
实在不行的话找风河的人问问吧,他们在中国有研发中心了。

使用特权

评论回复
16
thw| | 2008-5-9 21:33 | 只看该作者

。。。

你是usrInit掉kernelInit的时候挂掉了
还是kernelInit里调usrKernelInit时候挂掉了啊。。


加点调试信息看看到底是死在哪个函数里面了吧

使用特权

评论回复
17
sunwind45|  楼主 | 2008-5-14 10:24 | 只看该作者

还是郁闷!

因为我把系统中断向量或者任务调度服务例程放错了位置???


?????????????????????
我对操作系统不是熟悉;
难道说,系统中断向量或者任务调度服务例程,还需要我们参与???


是进入到kernelInit()以后,停住了;
我又看了下,是在taskActivate()里停住了;
再细些,应该是在windResume()里;



使用特权

评论回复
18
xinzha| | 2008-5-14 11:06 | 只看该作者

ll

在某些应用中,会把系统中断服务(注意,不是CPU中断服务)和任务调度例程放在SRAM中执行,这一部分是需要bsp根据编译时的选项自己放入指定地点而有些应用是把所有代码放在dram中就不存在这个问题。
建议你输出一个汇编文件,然后根据汇编代码去debug内存内容,看看主要的操作系统中断服务和任务调度程序,以及runtime代码是否在它们应该在的位置上。
能走到kernelinit,说明解压,cpu初始化和内存检测什么都已经顺利通过了,我感觉问题可能出在可执行代码的定位上,因为到了这一步,所有执行的代码都已经不是你编写的或者你能控制的,只要位置对就应该能继续下去。
对了,还有可能是内存没有清零,导致一些初始化失败,确认一下是不是所有未使用内存是否已经清零。

使用特权

评论回复
19
thw| | 2008-5-14 21:52 | 只看该作者

检查你kernelInit的参数吧


系统中断向量或者任务调度服务例程的设置不用你参与

使用特权

评论回复
20
sunwind45|  楼主 | 2008-5-21 09:47 | 只看该作者

烦死人

问题依旧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

74

主题

178

帖子

1

粉丝