📄 vxworkstornadoiifaq.htm
字号:
// prepend bootrom with new source
cat test.1024 bootrom.bin > bootrom.pxe
or
copy /b test.1024 + bootrom.bin bootrom.pxe
</pre>
</blockquote>
<p>
The content of test.s:
</p>
<pre>.text
.code16
start: nop
/* display alr so we see something on the screen if executing bootrom fails
*/
movb $'a',%al
movb $0x0e,%ah
movw $0x07,%bx
int $0x10
movb $'l',%al
movb $0x0e,%ah
movw $0x07,%bx
int $0x10
movb $'r',%al
movb $0x0e,%ah
movw $0x07,%bx
int $0x10
ljmp $0x0800,$0x0000
.space 1024,0x90
</pre>
<p></p>
<p></p>
<hr width="60%">
<center>
<h3>
4 Floating point
</h3>
</center>
<a name="pc-bsp.4"></a>
<a name="pc-bsp.4-A"></a>
<p>
Q: I am using an SC400 processor (AMD 486 compatible) with floating point
emulation in SW. But when I do some floating point emulation I get an
exception. It looks like the floating point library is not installed
correctly.
</p>
<p>
A: This is a know problem. It is registered by WindRiver under number
SPR28624. The desription and work-around are:
</p>
<p>
"Tornado 2.0, Intel 80486SX: NaN produced on printf() from shell"
</p>
<p>
The published workaround is:
<br>
"Consider WIND_BASE/target/config/comps/vxWorks/00vxWorks.cdf,
specifically around line 1883:
</p>
<pre>InitGroup usrIosCoreInit {
INIT_RTN usrIosCoreInit ();
SYNOPSIS core I/O system
INIT_ORDER INCLUDE_HW_FP \
INCLUDE_SW_FP \
INCLUDE_BOOT_LINE_INIT \
INCLUDE_IO_SYSTEM \
INCLUDE_TTY_DEV \
INCLUDE_TYCODRV_5_2 \
INCLUDE_SIO \
INCLUDE_PC_CONSOLE
}
</pre>
<p>
It is noted, in reference to 00vxWorks.cdf, that this problem no longer
exists with the initialization sequence:
</p>
<pre>INIT_ORDER INCLUDE_SW_FP \
INCLUDE_HW_FP \
</pre>
<p>
In other words, edit WIND_BASE/target/config/comps/vxWorks/00vxWorks.cdf
such that the software floating point support is intialized prior to
hardware floating point support.
<br>
(From: Gerald van Kampen, kam@oce.nl)
</p>
<hr width="60%">
<center>
<h3>
5 Timestamp driver
</h3>
</center>
<a name="pc-bsp.5"></a>
<a name="pc-bsp.5-A"></a>
<p>
Q. How do I get the Pentium TSC register to free-run as Intel intended?
How can I get a more reliable timestamp value and more accurate results
from WindView?
</p>
<p>
A. Use <a href="http://www.xs4all.nl/%7Eborkhuis/vxworks/i8253Timer.c">this modified timer/timestamp driver</a>.
The 64-bit Pentium TSC register is the hardware timer used for the
timestamp driver. It increments at the processor clock rate and is
guaranteed never to overflow in 10 years continuous running. The
timestamp driver is an interface to a hardware counter that allows
WindView to instrument how long kernel calls and interrupts take. The
timestamp driver depends on a counter with a rate of at least 100kHz to
1MHz, so the TSC is ideal.
<br>
For those interested, Appendix G of the WindView User's Guide describes
the timestamp driver interface and how to map it to hardware counters
with varying constraints. The 64-bit TSC register never overflows, but
the timestamp driver only handles 32-bit values so the 32-bit overflow of
the TSC must be handled.
<br>
If a hardware counter interrupts when it overflows 32-bits or reaches
zero, the timestamp driver uses this interrupt to indicate the overflow.
If the counter does *not* interrupt on overflow, like the TSC, then the
timestamp driver must produce a timestamp value that increases only
within a system tick and it must use the system tick interrupt to reset
the timestamp value.
<br>
Unfortunately the system tick interrupt is subject to interrupt latency
and jitters around an average point in time. Worse still, the timestamp
interrupt routine in the original WindRiver driver is called
<strong>after</strong> the system tick interrupt routine. The system tick
calls tickAnnounce(), which takes a varying time servicing delays in
VxWorks' tasks, semaphore takes, etc, and makes the timestamp value
jitter even more. This jitter means that the timestamp value can exceed
its period value or be reset before it reaches its period value, and it
makes WindView results inaccurate and unreliable - showing a system tick
interrupt routine, for example, lasting for a whole tick. The original
timestamp driver also resets the TSC every system tick and spoils its use
as a high-resolution application timer for very short delays.
<br>
This modified driver:
</p>
<ul>
<li>
Restores the TSC to a free-running counter so it can be used by
application software;
</li>
<li>
removes a lot of the jitter from the timestamp value;
</li>
<li>
ensures that the timestamp value always reaches its period value and
never exceeds it;
</li>
<li>
makes WindView results more accurate and reliable.
</li>
</ul>
<p>
The modified driver also includes a print routine which you can use to
see how it performs in your system. Enter 'period 1,sysTimestampPrint' at
the target shell and every second it prints out the timestamp driver
value and the rollover adjustment value. You will see the current value
change, especially with high network activity from bus-mastering LAN
controllers, but it should return to a stable value.
</p>
<p>
Feedback please to <a href="mailto:james_marshall@agilent.com">james_marshall@agilent.com</a> with
subject 'VxWorks timestamp driver'.
</p>
<hr width="60%">
<center>
<h3>
6 Video control
</h3>
</center>
<a name="pc-bsp.6"></a>
<a name="pc-bsp.6-A"></a>
<p>
Q: How can I change the video mode on a PC to 320x200?
</p>
<p>
A: The processor is in Real mode during the boot phase. You can patch
romInit.s to make your BIOS calls after the '<code>cli</code>' in
_romInit and before the '<code>jmp cold</code>' as follows:
</p>
<pre> addr16 /* address size: 16 bit address operand for call */
/* instruction. This is 0x66 opcode in a dump */
data16 /* operand size: 16 bit data operand for call */
/* instruction. This is 0x67 opcode in a hex dump */
call _bios80x43 /* call (real mode) _romBIOS routine */
/* or call _vesa40x25 */
/* or call _bios40x25 */
</pre>
<p>
..and then for example:
</p><pre> .align 4,0x90
_bios80x43: /* ugly, but it works for me... */
movb $0x0f,%ah
sti
int $0x10
cli
push %ax
mov $0x1201,%ax
movb $0x30,%bl
sti
int $0x10
cli
pop %ax
movb $0x00,%ah
sti
int $0x10
cli
mov $0x1112,%ax
movb $0x00,%bh
sti
int $0x10
cli
ret
.align 4,0x90
_vesa40x25: /* VESA mode */
movb $0x4f,%ah /* mov VESA function into AH reg. */
movb $0x02,%al /* mov "SET MODE" function into AL reg. */
movb $0x00,%bh /* mov "40x25 COLOR" mode into BX reg. */
movb $0x01,%bl /* mov "40x25 COLOR" mode into BX reg. */
sti /* set the int flag,eg unlock interrupts. */
int $0x10 /* Call BIOS Int 0x10 (Function in AH reg) */
cli /* clear the int flag,aka disable interrupts.*/
ret
.align 4,0x90
_bios40x25: /* VGA BIOS mode */
movb $0x00,%ah /* movb "SET MODE" BIOS function into AH reg. */
movb $0x01,%al /* movb "40x25 COLOR" mode into AL reg. */
sti /* set the int flag,eg unlock interrupts. */
int $0x10 /* Call BIOS Int 0x10 (Function in AH reg) */
cli /* clear the int flag,aka disable interrupts.*/
ret
</pre>
<p></p>
<hr width="100%">
<center>
<h3>
Index
</h3>
</center><a name="index"></a>
<table summary="Index" border="1" cellspacing="3">
<tbody><tr>
<td valign="top">
<a href="#pc-bsp.1.1">1.1</a>
</td>
<td valign="top">
<a href="#pc-bsp.1.1-A">A</a>
</td>
<td valign="top">
Changes to syslib.c
</td>
</tr>
<tr>
<td valign="top">
<a href="#pc-bsp.1.2">1.2</a>
</td>
<td valign="top">
<a href="#pc-bsp.1.2-A">A</a>
</td>
<td valign="top">
Setting TOD clock
</td>
</tr>
<tr>
<td valign="top">
<a href="#pc-bsp.1.3">1.3</a>
</td>
<td valign="top">
<a href="#pc-bsp.1.3-A">A</a>
</td>
<td valign="top">
When I startup my PC-target nothing happens on my serial port, but
the normal keyboard and display are used.
</td>
</tr>
<tr>
<td valign="top">
<a href="#pc-bsp.2">2</a>
</td>
<td valign="top">
<a href="#pc-bsp.2-A">A</a>
</td>
<td valign="top">
When I want to use the keyboard on my PC-target nothing happens. How
can I make this keyboard work?
</td>
</tr>
<tr>
<td valign="top">
<a href="#pc-bsp.3">3</a>
</td>
<td valign="top">
<a href="#pc-bsp.3-A">A</a>
</td>
<td valign="top">
I am using T2/x86 (PentiumPro BSP) and trying to get 3C905B-TXNM PCI
NIC working. The NIC itself seems to be fine, 3COM's DOS-based test
tool identifies it correctly. I haven't changed anything in the NIC's
configuration.
</td>
</tr>
<tr>
<td valign="top"></td>
<td valign="top">
<a href="#pc-bsp.3-B">B</a>
</td>
<td valign="top">
How do I get 2 79C973 NIC's working?
</td>
</tr>
<tr>
<td valign="top"></td>
<td valign="top">
<a href="#pc-bsp.3-C">C</a>
</td>
<td valign="top">
My target is crashing when I initialize the Intel 82559ER with a
cable attached.
</td>
</tr>
<tr>
<td valign="top"></td>
<td valign="top">
<a href="#pc-bsp.3-D">D</a>
</td>
<td valign="top">
How do I creae a bootrom that uses PXE
</td>
</tr>
<tr>
<td valign="top">
<a href="#pc-bsp.4">4</a>
</td>
<td valign="top">
<a href="#pc-bsp.4-A">A</a>
</td>
<td valign="top">
I am using an SC400 processor (AMD 486 compatible) with floating
point emulation in SW. But when I do some floating point emulation I
get an exception.
</td>
</tr>
<tr>
<td valign="top">
<a href="#pc-bsp.5">5</a>
</td>
<td valign="top">
<a href="#pc-bsp.5-A">A</a>
</td>
<td valign="top">
How do I get the Pentium TSC register to free-run as Intel intended?
</td>
</tr>
<tr>
<td valign="top">
<a href="#pc-bsp.6">6</a>
</td>
<td valign="top">
<a href="#pc-bsp.6-A">A</a>
</td>
<td valign="top">
How can I change the video mode on a PC to 320x200?
</td>
</tr>
</tbody></table>
<hr width="100%">
<table summary="bottom of page" border="0" cellspacing="1" width="100%">
<tbody><tr>
<td colspan="3" align="center">
<i>The commercial department</i>
</td>
</tr>
<tr>
<td align="left">
<script type="text/javascript"><!--
google_ad_client = "pub-1387305377183503";
google_ad_width = 120;
google_ad_height = 60;
google_ad_format = "120x60_as_rimg";
google_cpa_choice = "CAAQxZqazgEaCMOiwb9yonQWKIHD93M";
google_ad_channel = "";
//--></script>
<script type="text/javascript" src="VxWorksTornadoIIFAQ_files/show_ads.js">
</script><iframe name="google_ads_frame" src="VxWorksTornadoIIFAQ_files/ads_003.htm" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" frameborder="0" height="60" scrolling="no" width="120"></iframe>
</td>
<td align="center">
Sponsored by:<br>
Giganews <a href="http://www.giganews.com/">Usenet</a> Service
</td>
<td align="right">
<iframe src="VxWorksTornadoIIFAQ_files/cm.htm" border="0" style="border: medium none ;" frameborder="0" height="60" scrolling="no" width="120"></iframe>
</td>
</tr>
</tbody></table>
<br>
<hr 100%="">
<br>
<table summary="bottom of page" border="0" cellspacing="1" width="100%">
<tbody><tr>
<td>
<a href="http://www.xs4all.nl/%7Eborkhuis/vxworks/vxworks.html"><img src="VxWorksTornadoIIFAQ_files/back0001.gif" alt="VxWorks Homepage" height="54" width="104"></a>
</td>
<td>
<center>
© J.A. Borkhuis, 2000 - 2005
</center>
<center>
<script type="text/javascript" language="JavaScript">
<!--
var theDate = ""
theDate = document.lastModified
document.write("Last Updated: ");
document.write(theDate);
document.write();
//-->
</script>Last Updated: 07/16/2006 05:41:22
</center>
</td>
<td>
<a href="mailto:johan@borksoft.xs4all.nl"><img src="VxWorksTornadoIIFAQ_files/sendmail.gif" alt="Send me an e-mail if this page was helpfull" align="right" height="49" width="124"></a>
</td>
</tr>
</tbody></table>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -