home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk1.iso / answers / vxworks-faq < prev    next >
Text File  |  1993-12-20  |  55KB  |  1,528 lines

  1. Newsgroups: comp.os.vxworks,comp.answers,news.answers
  2. Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!usc!elroy.jpl.nasa.gov!decwrl!netcomsv!netcom.com!hjb
  3. From: hjb@netcom.com (squeedy)
  4. Subject: comp.os.vxworks Frequently Asked Questions (FAQ)
  5. Message-ID: <hjbCIBvp7.JMz@netcom.com>
  6. Followup-To: comp.os.vxworks
  7. Summary: This posting contains a list of Frequently Asked
  8.          Questions (and their answers) about VxWorks REALTIME
  9.      Operating System.  It should be read by anyone who wishes to
  10.      post to the comp.os.vxworks newsgroup.
  11. Keywords: vxworks,realtime,faq,kernel,tcp-ip,networking,vme,embedded
  12. Sender: hjb@netcom.com (squeedy)
  13. Reply-To: hjb@netcom.com
  14. Organization: PEACEFUL STAR, Oakland, CA
  15. Date: Mon, 20 Dec 1993 09:58:19 GMT
  16. Approved: news-answers-request@MIT.Edu
  17. Lines: 1508
  18. Xref: senator-bedfellow.mit.edu comp.os.vxworks:2759 comp.answers:3095 news.answers:16016
  19.  
  20. Archive-name: vxworks-faq
  21. Maintained-by: hjb@netcom.com
  22. Last-modified: 1993/12/20
  23. Version: 1.1
  24.  
  25. This is the list of frequently asked questions (and their answers) for
  26. the newsgroup comp.os.vxworks. 
  27.  
  28. Where possible, pointers to existing information are included here, rather
  29. than rehashing that information again.
  30.  
  31. If you haven't already done so, now is as good a time as any to read the
  32. guide to Net etiquette which is posted to news.annouce.newusers regularly.
  33. You should be familiar with acronyms like FAQ, FTP and IMHO, as well as know
  34. about smileys, followups and when to reply by email to postings.
  35.  
  36. The FAQ is currently posted to comp.os.vxworks, news.answers and
  37. comp.answers on the 15th of every month.  You can retrieve the latest copy
  38. of this FAQ via anonymous FTP from rtfm.mit.edu in the directory
  39. /pub/usenet-by-group/comp.os.vxworks.  Remember to use ASCII mode 
  40. when transferring.
  41.  
  42. This FAQ was compiled by hjb@netcom.com using comments by readers of
  43. comp.os.vxworks as well as his own limited knowledge of VxWorks.  Credits
  44. appear at the end.  Comments and indications of doubt are enclosed in []s in
  45. the text.  Each section begins with dashes ("-") on a line of their own,
  46. then the section number.  This should make searching for a specific section
  47. easy.
  48.  
  49. This FAQ is also available via anonymous ftp in:
  50.  
  51.     netcom.com:pub/hjb/vxfaq.Z
  52.  
  53. -------------------------------------------------------------------------
  54.  
  55.         TABLE OF CONTENTS
  56.  
  57.     1. What is VxWorks? 
  58.     2. Brief History of VxWorks
  59.     3. What are some of the major features of VxWorks?
  60.     4. What are the Latest versions of VxWorks?
  61.     5. Where is the archive site for user-contributed code?
  62.     6. What application notes are available from Wind River?
  63.     7. How can I join the VxWorks user's group?
  64.     8. Is comp.os.vxworks also available via a mailing list?
  65.     9. Can I use gcc or g++ with VxWorks?
  66.     10. Other C/C++ Compiler tools for VxWorks?
  67.     11. Which cross-debuggers can I use with VxWorks?
  68.     12. What are differences between UNIX and VxWorks?
  69.     13. What are the performance/benchmark numbers for WIND kernel?
  70.     14. What are the performance/benchmark numbers for VxWorks TCP/IP?
  71.     15. What is the VxSim VxWorks Simulator?
  72.     16. Can I use one boot EPROM for multiple boards on the same net?
  73.     17. What's the deal with 68881 FPU code in interrupt handlers?
  74.     18. Why does ls() not work on netDrv devices?
  75.     19. Why can't I do ".." at top level directories or NFS mount points?
  76.     20. Why do I have trouble using relative symbolic links with NFS?
  77.     21. X for VxWorks
  78.     22. IEEE-488 (GPIB) driver for VxWorks
  79.     23. How does one disable NFS client caching?
  80.     24. Why doing a lot of slipInit()/slipDelete() cause routing 
  81.         table corruption?
  82.     25. How does one get better network I/O performance?
  83.     26. How does one troubleshoot a backplane driver malfunction?
  84.     27. How do I add select support to my driver?
  85.     28. bind() gets EADDRINUSE, how do I fix it?
  86.     29. Common errors in interrupt handlers with floating point 
  87.         co-proc hardware
  88.     30. Finding entry point of a given module using its name
  89.     31. The problem with irint() in earlier (5.0.2 ?) releases
  90.     32. What are +T, +I thingies in the "i" output?
  91.     33. Gotchas w.r.t watchdogs
  92.     34. Is it possible to delete a memory partition in VxWorks?
  93.     35. rename() does not work in netDrv and nfsDrv filesystems, why?
  94.     36. Free NFS Server for VxWorks
  95.     37. Free SNMP for VxWorks
  96.     38. What third party products are available for VxWorks?
  97.     39. What kind of products have been developed using VxWorks?
  98.     40. A complete list of CPU hardware supported by VxWorks
  99.     41. A complete list of peripheral devices supported by VxWorks
  100.     42. What's with these unbundled "accessories"?
  101.     43. How come my 5.0.2 BSP isn't available in 5.1, damn it?
  102.     44. How much is VxWorks?
  103.     45. What is MicroWorks?
  104.     46. Other Unbundled Products for VxWorks?
  105.     47. How can I find out more about VxWorks?
  106.     48. What other net.resources are available on real-time systems?
  107. [new]    49. How do i use FIONBIO in 5.0.2 when there is no fcntl()?  
  108. [new]    50. Free lex and yacc for use with VxWorks
  109. [new]    51. timer_gettime() bug
  110. [new]    52. bogus INCLUDE_TCP_DEBUG
  111. [new]    53. free ppp for VxWorks
  112.     9999. Contributions to comp.os.vxworks FAQs.
  113.  
  114. -------------------------------------------------------------------------
  115.  
  116. 1. What is VxWorks?
  117.  
  118. VxWorks, from Wind River Systems, is a networked real-time operating
  119. system designed to be used in a distributed environment.  It runs on a
  120. wide variety of hardware, including MC680x0, MC683xx, Intel i960, Intel
  121. i386, R3000, SPARC, Fujitsu SPARClite, and TRON Gmicro, based systems. 
  122. It requires a host workstation for program development; supported host
  123. platforms include Sun3, Sun4, HP9000, IBM RS-6000, DEC, SGI, and MIPS. 
  124.  
  125. It does not run development systems software such as compiler, linker
  126. and editor on the target machine.  The development environment is based
  127. on cross-development or remote-development method.  You will need a
  128. UNIX machine of some sort (e.g. SUN's) to run the compilers and
  129. debuggers.  The compiled application code can be downloaded to the
  130. target and runs as part of the VxWorks image.  During the development
  131. phase or thereafter, individual object code (.o files) can be
  132. downloaded dynamically to running target system.  Finished applications
  133. can be ROM'ed or whatever.
  134.  
  135. ----------------------------
  136.  
  137. 2. Brief History of VxWorks
  138.  
  139. Based on what I have heard from David Wilner and others, WRS was
  140. started by Jerry Fiddler and David Wilner in Jerry's garage as a
  141. contract/consultant shop for realtime, embedded systems and other fun
  142. things.  Francis Coppola was one of the earlier customers.
  143.  
  144. They wrote a bunch of neat programs for their work and found that they
  145. liked them a great deal themselves, and added more excellent features
  146. to the system, eventually adding some things unheard of in
  147. embedded/realtime market in those days such TCP/IP networking. And
  148. continued to pioneer in this area by adding NFS, etc.
  149.  
  150. VxWorks was the name given the collection of software which ran on
  151. top of various realtime kernels including VRTX and pSOS as well an
  152. earlier slower version of WIND kernel.  [ editorial:
  153. VxWorks no longer runs on other kernels; it now runs exclusively on 
  154. its own WIND kernel since the 5.0 release, for which the WIND was 
  155. rewritten by John Fogelin. ]
  156.  
  157. They got more people interested in the system and became successful.
  158. And moved from a little building in Emeryville to a larger one. And
  159. eventually to the present site in Alameda.  And hired a  lot of people.
  160.  
  161. WRS sold many many more copies of this system and continues to grow
  162. like a real successful company.
  163.  
  164. -----------------------------
  165.  
  166. 3. What are some of the major features of VxWorks?
  167.  
  168. In Version 5.1:
  169.  
  170.  - wind kernel unlimited tasks
  171.  - 256 priorities
  172.  - binary, counting mutex semaphores
  173.  - message q's
  174.  - POSIX pipes
  175.  - sockets
  176.  - shared memory
  177.  - profiling utilities
  178.  - ethernet support (i596, LANCE, NIC, SONIC)
  179.  - SLIP (no PPP yet)
  180.  - backplane driver for network
  181.  - rlogin (server & client)
  182.  - telnet (server only)
  183.  - rpc (no rpcgen)
  184.  - nfs (client)
  185.  - ftp (server & client)
  186.  - tftp (client & server)
  187.  - rsh
  188.  - bootp
  189.  - proxyarp
  190.  - C-interpreter shell (incomplete but useful)
  191.  - symbolic debugging
  192.  - disassembly
  193.  - performmance monitoring tools
  194.  - exception handling
  195.  - signal handling (not quite unix compatible)
  196.  - dynamic object image loader
  197.  - system symbol table
  198.  - system info utilities
  199.  - libraries of 600+ utility routines
  200.  - remote source level debugger(VxGDB)
  201.  - SCSI support
  202.  - DOS & RT11 & Raw filesystems.
  203.  - "full ANSI"
  204.  - "POSIX I/O"
  205.  
  206. It is a good idea to get a copy of VxWorks manuals before purchasing
  207. the system.  WRS can provide you with such documentation.  As far as I
  208. know there is no "VxBook" in the bookstores.
  209.  
  210. ----------------------------
  211.  
  212. 4. What are the Latest versions of VxWorks?
  213.  
  214. As as of June 1993,
  215.  
  216.      5.0.3.: TRON will be discontinued.
  217.      5.0.3 : i386
  218.      5.0.5 : r3000
  219.      5.1   : 680x0, 683xx, i960, SPARC
  220.      i386 and r3000 will be upgraded to 5.1.
  221.  
  222. ------------------------------
  223.  
  224. 5. Where is the archive site for user-contributed code?
  225.  
  226. The VxWorks archive system is available for FTP as thor.atd.ucar.edu.
  227. It is also accessible via email server at vxworks_archive@ncar.ucar.edu.
  228. Questions should be directed to its maintainer, Richard Neitzel
  229. <thor@thor.ucar.edu>.
  230.  
  231. To get more detailed infomation send email to:
  232.  
  233. vxworks_archive@ncar.ucar.edu
  234.  
  235. The message body must read:
  236.  
  237. send index
  238. send index from vx
  239. send index from unix
  240.  
  241. A summary of the archives is periodically posted to comp.os.vxworks.
  242.  
  243. Some of the usual titles available:
  244.  
  245. ansi, ansilib, benchmarks, bitcnt, c++builtin, c++headers, camaclib, cbench
  246. cntsem_class, crc, deadman, dhrystones, dirlib, dt1451, fcompress
  247. flags_class, force, gcc+68040, getdate, hkv30extintutil, ivecalloc, joblib2
  248. lclflag, libX11, loadmeter, math, monitor, msgque_class, ntpvx, ping, pipe
  249. poolLib, ring, semCnt, ss1, stevie, string, syslog, task_class, taskmon, tod
  250. tp41, ty335, veclist, vtape, vwcurses, vx_cplusplus, vxrsh, wdog_class, shar
  251. vxtool, vxview, xc
  252.  
  253. ------------------------------
  254.  
  255. 6. What application notes are available from Wind River?
  256.  
  257.   List of Wind Technical Notes
  258.  
  259.  Motorola MV147 Slave Base Control       9-1
  260.  System hang during lkup( ) output       10-1
  261.  Reserving Memory                        11-1
  262.  Serial IO Vanishing                     13-1
  263.  NFS: problems with writing files        14-1
  264.  Which interrupts does VxWorks use?      15-1
  265.  Debugging ftp problems                  18-1
  266.  Interrupt handlers, floating point      19-1
  267.  Booting From a Memory Board             22-1
  268.  Changing Network Interfaces             23-1
  269.  Writing Non-buffered Sockets            24-1
  270.  RPC and VxWorks                         25-1
  271.  Using SCSI devices with VxWorks 5.x     26-1
  272.  The Select Facility in VxWorks          28-1
  273.         Using on-board Serial Ports  29-1
  274.         Problems with ls()   30-1
  275.  SCSI     31-1
  276.  Trouble Shooting Booting Problems       32-1
  277.  
  278. -----------------------------
  279.  
  280. 7. How can I join the VxWorks user's group?
  281.  
  282. For User Group info contact WRS or Eric Rabinowitz of Panoramic Systems at:
  283.  
  284.  elr@netcom.com   or  ericr@wrs.com 
  285.  phone: 408-429-0598
  286.  
  287. ------------------------------
  288.  
  289. 8. Is comp.os.vxworks also available via a mailing list?
  290.  
  291. Lawrence Berkeley Labs maintains an automated mailing list which is
  292. bi-directionally gatewayed to comp.os.vxworks
  293.  
  294. It is called the 'VxWorks Exploder'.
  295.  
  296. Mail to vxwexplo@lbl.gov is automatically mailed to a number
  297. of sites, including Wind River.
  298.  
  299. Send subscription request to vxwexplo-request@lbl.gov.
  300.  
  301. ------------------------------
  302.  
  303. 9. Can I use gcc or g++ with VxWorks?
  304.  
  305. WRS's gcc GNU Toolkit distribution can be reshipped in its entirety. 
  306. WRS charges are for media and support, so obviously copies thereof
  307. don't matter to them.
  308.  
  309. Lots of customers use g++ as provided by the "net" --
  310. see the VxWorks Archive information below.
  311.  
  312. You can get a generic freely distributable GCC/G++ and compile your
  313. code for VxWorks.  Or you can just get a copy from someone who has a
  314. working GCC cross-development setup from WRS.
  315.  
  316. WRS worked with Cygnus to polish up their release of GCC but a generic
  317. GCC distribution works just fine as well.
  318.  
  319. For MC68K targets:
  320.  You can also use native SunOS 4.X cc running on Sun-3's.
  321.  You can also use various other free m68k C compilers
  322.  such as lcc, sozobon, etc. provided that you're willing
  323.  to hack on them.
  324.  
  325. Richard Neitzel (thor@thor.atd.ucar.edu) writes,
  326.  
  327. Thanks to some feedback I've corrected the archive instructions on how to
  328. build gcc, libgcc and libg++ for VxWorks. To make my life simpler the
  329. patches referenced are no longer included in the vx_cplusplus file. Instead
  330. there are now seperate patch files for the effected parts:
  331.  
  332. libg++-2.5-src.patch: Patches libg++/src.
  333. libgcc2-2.5.0.patch: Patch libgccc2.c for gcc-2.5.0.
  334. libgcc2-2.5.2.patch: Patch libgcc2.c for gcc-2.5.2.
  335. libio-2.5.patch: Patch the stream library.
  336.  
  337. See VxWorks Archive information in this FAQ for details on how to 
  338. get these files.
  339.  
  340. ---------------------------------------
  341.  
  342. 10. Other C/C++ Compiler tools for VxWorks?
  343.  
  344. WRS re-sells (re-engineered?) CenterLine cfront product and WindC++
  345. Gateway for CenterLine ObjectCenter. They come with browsers, etc. 
  346. Not free.
  347.  
  348. Wind C++ Gateway for ObjectCenter sold by WRS:
  349.  
  350. $995 / user 1-4 copies
  351. $875 / user 5-9 copies
  352.  
  353. Note that this is the cost over and above ObjectCenter.
  354.  
  355. ------------------------------
  356.  
  357. 11. Which cross-debuggers can I use with VxWorks?
  358.  
  359. GDB & other more expensive tools from WRS, MicroTec Research, etc.
  360.  
  361. WRS sells a lightly modified version of xxgdb which has a lousy GUI
  362. interface.  In 5.1 xvxgdb may have been slightly improved -- but the
  363. ObjectCenter C++ with VxWorks solution provides better GUI interface.
  364.       
  365. With a little bit of hacking, regular GDB works just fine.  Personally,
  366. I find GUI to a debugger gets in the way of real work.  I use GNU Emacs
  367. GDB interface which works well and can be easily customized.
  368.  
  369. There might be some old VxWorks customers that also use VxWorks-aware 
  370. dbxtool on Sun machines.  This used to be maintained and sold by SUN
  371. Consulting.
  372.  
  373. If you're only interested in debugging your "application" on VxWorks,
  374. the vxgdb approach (using RPC) works just fine.
  375.  
  376. If you are rather more interested in the guts of the system as well as
  377. your application you might want to spend some time building
  378. cross-debugging tools from generic GDB distribution into VxWorks.
  379.  
  380. ------------------------------------ 
  381.  
  382. 12. What are differences between UNIX and VxWorks?
  383.  
  384. They're both a hack.  UNIX has a larger installed base. :-)
  385.  
  386. Seriously though, similarities end there, IMHO.  VxWorks does have a lot of
  387. UNIX "compatible" routines in the user libraries.  So porting a UNIX
  388. application is not that hard.  But there are enough differences to make such
  389. a port take longer than normally expected.
  390.  
  391. For one thing, UNIX definitely is not realtime, whatever that means. 
  392. [ editorial: To me personally, what realtime means is this -- when there
  393. is a spinning process or task running like crazy doing some stuff
  394. busily, I still want my system to respond immediately when I type a
  395. character on my console keyboard.  VxWorks, and other real realtime
  396. OS'es, do this.  UNIX and MS-DOG don't. ]
  397.  
  398. VxWorks in its original form does not have any memory protection support.
  399. It runs in one mode.  No protected vs. user mode switching is done.  Running
  400. in supervisor mode on most processors, and not using traps for system calls,
  401. VxWorks can achieve minimal overhead on a given piece of hardware than
  402. UNIX.  Programming on VxWorks can be more tricky than UNIX for the same
  403. reason.
  404.  
  405. UNIX provides resource reclamation; by default, VxWorks does not.  
  406. [ editorial: using deleteHooks or whatever, you could implement
  407. this on your own.]  Instead programmers write what they need as
  408. needed.  As a result, the context switch time in VxWorks is on the
  409. order of a few micro-seconds (since there is a lot smaller context to
  410. save and restore). VxWorks does not have full "process";
  411. it only has tasks, or "threads", or light weight processes as some people
  412. like to call them.
  413.  
  414. Like any other multi-threaded environments (or SMP environments), care
  415. should be taken when writing multi-tasking code.  Each routine should be
  416. written carefully to be re-entrant (if it is going to be called from
  417. multiple contexts), semaphores are used a lot for this. And static variables
  418. are frowned upon.  Sometimes, when porting a UNIX application, you may need
  419. to add "task variables" for this reason (as done for rpcLib in VxWorks).
  420.  
  421. VxWorks: minimal interrupt latency (e.g. spl's are quasi-implemented as
  422. semaphores).  UNIX: ridiculous interrupt latency (e.g. spl's are implemented
  423. as interrupt lock and unlock calls!).
  424.  
  425. VxWorks: priority preemption, optional round-robin time-slicing.  
  426. Traditional UNIX: prioritized round-robin time-slicing.  
  427. Since VxWorks is just a glorified "program" it can be 
  428. changed and customized pretty easily.  Task scheduling can
  429. be customized as desired, for example.  Most people prefer priority based
  430. preemption in the realtime world.  UNIX prefers "fair-share time-slicing".
  431.  
  432. VxWorks networking code, however, is very UNIX compatible [editorial:
  433. it is essentially "ported" version of BSD UNIX TCP/IP code -- tahoe
  434. release ].  It is relatively easy to port socket based code to 
  435. VxWorks.  [ editorial: except the not-so-compatible hostLib routines, etc.]
  436.  
  437. VxWorks most definitely is not a "realtime UNIX", or a varient of UNIX as
  438. often misunderstood by some people.  The confusion perhaps is due to the
  439. fact that UNIX hosts are used most widely to develop applications for 
  440. VxWorks (and VxWorks itself).  [ editorial: Realtime UNIX sounds kind of like
  441. Military Intelligence to me. (can you say, oxymoron?) ;-) ]
  442.  
  443. There are a lot more differences!  In short, UNIX is a nice system to run
  444. emacs on.  VxWorks is much better at playing pin-ball game machines.
  445.  
  446. ----------------------------
  447.  
  448. 13. What are the performance/benchmark numbers for WIND kernel?
  449.  
  450. A WRS VxWorks 5.1 Benchmark Report hot off the press:
  451.  
  452. Benchmark numbers based on: mv167-25Mhz, 5.1
  453.  
  454.                                 Cache    Cache 
  455. Key Measurements                        Enabled    Disabled
  456.  
  457. Raw Context Switch Time                 4 us    14 us
  458. Cyclic Test Time                        172 us  638 us
  459. Suspend/Switch/Resume/Switch                23 us   86 us
  460.  
  461. Kernel Timings
  462.  
  463. Task Related
  464. taskSpawn                           124 us  370 us
  465. taskInit                            58 us   181 us
  466. taskActivate                        12 us   33 us
  467. taskDelete                          101 us  303 us
  468. Task Create / Delete                    249 us  684 us
  469. taskLock
  470.         CASE 1: no lock                 3 us    4 us
  471.         CASE 2: lock exists                 2 us    5 us
  472. taskUnlock
  473.         CASE 1: no lock                 2 us    12 us
  474.         CASE 2: lock exists                 5 us    6 us
  475. taskSuspend
  476.         CASE 1: ready task                  11 us   30 us
  477.         CASE 2: pended task                 9 us    19 us
  478.         CASE 3: suspended task              8 us    19 us
  479.         CASE 4: delayed task                9 us    19 us
  480. taskResume
  481.         CASE 1: ready task                  6 us    19 us
  482.         CASE 2: pended task                 10 us   19 us
  483.         CASE 3: suspended task              13 us   30 us
  484.         CASE 4: delayed task                9 us    18 us
  485.  
  486. Semaphore Related
  487. semBCreate                          66 us   152 us
  488. semCCreate                          46 us   150 us
  489. semMCreate                          45 us   139 us
  490. semDelete
  491.         Binary                      49 us   157 us
  492.         Counting                        49 us   163 us
  493.         Mutual Exclusion                    48 us   157 us
  494. semGive
  495.         CASE 1: tasks in queue  
  496.         Binary                      18 us   44 us
  497.         Counting                        20 us   46 us
  498.         Mutual Exclusion                    25 us   59 us
  499.         CASE 2: no tasks in queue       
  500.         Binary                      4 us    8 us
  501.         Counting                        5 us    11 us
  502.         Mutual Exclusion                    6 us    15 us
  503.  
  504. semTake
  505. CASE 1: semaphore available     
  506.         Binary                      4 us    9 us
  507.         Counting                        5 us    11 us
  508.         Mutual Exclusion                    5 us    13 us
  509.         CASE 2: semaphore unavailable   
  510.         Binary                      10 us   25 us
  511.         Counting                        11 us   27 us
  512.         Mutual Exclusion                    4 us    12 us
  513. Semaphore Give / Take
  514.         Binary                      7 us    15 us
  515.         Counting                        9 us    21 us
  516.         Mutual Exclusion                    10 us   26 us
  517. semFlush
  518.         Binary                      11 us   20 us
  519.         Counting                        11 us   20 us
  520.         Mutual Exclusion                    10 us   16 us
  521.  
  522. Miscellaneous Operating System Timings
  523.  
  524. Message Queue Related
  525. msgQCreate                          93 us   280 us
  526. msgQDelete                          71 us   229 us
  527. msgQSend
  528.         CASE 1: task pending                39 us   102 us
  529.         CASE 2: no tasks pending                23 us   64 us
  530.         CASE 3: queue full                  14 us   45 us
  531. msgQReceive
  532.         CASE 1: message available               20 us   62 us
  533.         CASE 2: message unavailable             15 us   41 us
  534.  
  535. Memory Related
  536. malloc                          28 us   81 us
  537. free                                32 us   104 us
  538.  
  539. Watchdog Related
  540. wdCreate                            42 us   106 us
  541. wdDelete
  542.         CASE 1: timer started               48 us   160 us
  543.         CASE 2: timer not started               44 us   150 us
  544. wdStart
  545.         CASE 1: timer in queue              20 us   70 us
  546.         CASE 2: no timer in queue               18 us   55 us
  547. wdCancel                            11 us   34 us
  548.  
  549. Floating-Point  
  550. robot application                       18 sec  51 sec
  551.  
  552. [ editorial:
  553. If you're anal enough to count pico-seconds in comparing realtime
  554. kernels, you  might want to actually get each of the evaluation copies
  555. from various vendors and test them yourself.  But remember benchmarks
  556. are misleading and almost always biased and inaccurate.  Given similar
  557. benchmark numbers, give or take a few microseconds, etc., your dollars
  558. are better spent in getting something you'll enjoy using. ]
  559.  
  560. -----------------------------
  561.  
  562. 14. What are the performance/benchmark numbers for VxWorks TCP/IP?
  563.  
  564. According to WRS, using VxWorks 5.1 on mv167-25mhz (i82596 ethernet)
  565.  
  566.                  w/ cache      w/o cache enabled
  567.  TCP/IP Throughput (KB/sec)      859 KB/sec      682 KB/sec
  568.  
  569. No numbers available on latency.
  570.  
  571. Using a reasonably fast processor 25Mhz MC68040 and a reasonably well
  572. made ethernet chip like SONIC or LANCE put together on a reasonable board
  573. design will achieve TCP throughput close to full bandwidth of ethernet.
  574.  
  575. [ editorial:
  576. This, of course, is rather slow in comparison with other fast
  577. implementations, since a 16Mhz MC68020 with onboard LANCE 
  578. or a PeeCee with an ethernet board can easily do the same.
  579. I know at least one implementation based on el-cheapo i486-50mhz/EISA/SONIC
  580. that does: 1170KB/sec.  ]
  581.  
  582. ---------------------------------
  583.  
  584. 15. What is the VxSim VxWorks Simulator?
  585.  
  586. Propaganda from WRS:
  587.  
  588.  It really is VxWorks running under UNIX!  So sure it
  589.  is not realtime, although all tasks and resources interact
  590.  in the same way -- great for prototyping "high-level" code.
  591.  Using the simulator saves wear and tear on h/w.  It (only)
  592.  allows sytem level debugging with native GDB.
  593.  
  594.  Portably written object code compiled for VxSim (for SunOS SPARC)
  595.  will usually load without recompilation on a SPARC target.  And,
  596.  BTW under 5.1 switching from one architecture to anthoer really is
  597.  pretty painless.
  598.  
  599. ------------------------------
  600.  
  601. 16. Can I use one boot EPROM for multiple boards on the same net?
  602.  
  603. WRS provides EPROMs with a default bogus bootline, virtually all
  604. boards come with non-valiatile RAM which is set as soon as the user
  605. fills in his parameters (which include CPU #).  Therefore 1 EPROM may
  606. be duplicated and used in all boards at a site.  If the board does not
  607. contain nvram then ROMs have to be specially blown, unless a custom
  608. scheme for reading some switches or something is coded to index into a
  609. bootline table.  In 5.1 BOOTP is supported -- no more repeated EPROM
  610. burning is necessary.
  611.  
  612. ------------------------------
  613.  
  614. 17. What's the deal with 68881 FPU code in interrupt handlers?
  615.  
  616. In general, FP context is optimally saved only when the scheduler
  617. notices that the new task coming in also uses the fpu (VX_FP_TASK).
  618. ISRs don't.  If no tasks are using the FPU then ISRs may go ahead,
  619. unless different levels of ISRs could interrupt each other and again
  620. cause a protocol violation.
  621.  
  622. And Stan Schneider says,
  623.  
  624. You have to set the "VX_FP_TASK" option flag when you spawn your task.  You
  625. also need to make sure you don't use the FPU in any interrupt service
  626. routines.  Even if your code uses no floating point, some (brain-dead)
  627. compilers save some FPU registers at the start of all routines if there's any
  628. floating point in the file.  That's not usually a problem if you're using the
  629. gcc compiler (at least with the "-O" flag on).  A sure way to check is via the
  630. dissassembler.
  631.  
  632. And Leonid Rosenboim says,
  633.  
  634. This problem is quite common, and really simple to fix, all you have to
  635. do is make sure that all tasks that do a float operation ever, will
  636. be spawned with the VX_FP task option set. This is the best and only
  637. solution. Also, if you run floating operations in ISRs care must be taken,
  638. to call fppSave() and fppRestore(). Also if you are using 5.1 on a 68040,
  639. there is a bug in the compiler that you must work around.
  640.  
  641. And Kent Long says,
  642.  
  643. This was indeed a real problem in the context switch code in 5.0.x which
  644. was corrected in 5.1.
  645.  
  646. In both OS versions, there is an optimization that causes the FP context
  647. to be swapped only when the incoming task has been spawned with the
  648. floating point (VX_FP) flag set.  In 5.0.x, the copying-in of the FP context
  649. was done via an fppSave() call.  This created problems if a new FP
  650. task was created after a previous FP task had been pre-empted by a non-FP
  651. task in the middle of an instruction.  The new task ended up with a 
  652. mid-instruction context (which causes the protocol violation), and the 
  653. old swapped-out FP task ultimately ended up with its context set to IDLE 
  654. (which is equally incorrect).
  655.  
  656. In 5.1, the FP context initialization was changed so that when a task
  657. is created, a pre-defined IDLE frame is copied into that tasks's context.
  658. Since there is no assumption about current FP state (as with fppSave),
  659. task creation is now decoupled from the regular switch logic.
  660.  
  661.  
  662. ------------------------------
  663.  
  664. 18. Why does ls() not work on netDrv devices?
  665.  
  666. Because the way directory information retrieval IOCTL calls are not acompatible
  667. between different types of "filesystems" in VxWorks.  Another reason why
  668. some think VxWorks filesytem does not exist; they're just a collection of
  669. ioDevice drivers, and there is not a real consistent "design" to it.
  670.  
  671. The lsOld() should work on "filesystems" that does not support ls().
  672.  
  673. Chuck Mead proposes the following special routine in case lsOld() does not
  674. work for you:
  675.  
  676.  
  677. #include "vxWorks.h"
  678. #include "bootLib.h"
  679.  
  680. #define RSHD 514
  681.  
  682. STATUS lsHost(path)
  683.    char  *path ;
  684. {
  685.    char *lsString;
  686.    int dataSock ;
  687.    int n ;
  688.    char nextChar ;
  689.  
  690.    extern BOOT_PARAMS sysBootParams ;
  691.    extern char *sysBootHost ;
  692.  
  693.    if (path == (char *) NULL)
  694.    {
  695.       lsString = (char *) malloc(4) ;
  696.       strcpy(lsString, "ls") ;
  697.    }
  698.    else
  699.    {
  700.       lsString = (char *) malloc(strlen(path) + 5) ;
  701.       sprintf(lsString, "%s%s", "ls ", path) ;
  702.    }
  703.  
  704.    dataSock = rcmd (sysBootHost, RSHD, sysBootParams.usr,
  705.         sysBootParams.usr, lsString, (int *) NULL) ;
  706.  
  707.    if (dataSock == ERROR)
  708.    {
  709.       printf("Error opening socket") ;
  710.       return (ERROR) ;
  711.    }
  712.  
  713.    n = fioRead(dataSock, &nextChar, 1) ;
  714.    while (n == 1)
  715.    {
  716.       printf("%c",nextChar) ;
  717.       n = fioRead(dataSock, &nextChar, 1) ;
  718.    }
  719.  
  720.    close(dataSock) ;
  721. }
  722.  
  723. ------------------------------
  724.  
  725. 19.  Why can't I do ".." at top level directories or NFS mount points?
  726.  
  727. Because, again, VxWorks does not really have a "filesystem" as most people
  728. understand it.  The top level directories are just implemented as device
  729. driver "node", which is used to identify the ioDev associated with the
  730. specific VxWorks "filesystem".  Since there is no underlying filesystem
  731. layer, the story ends there.  When you're at the top of the directory
  732. hierarchy within a given ioDev/filesytem, you simply cannot do "..".
  733.  
  734. ------------------------------
  735.  
  736. 20. Why do I have trouble using relative symbolic links with NFS?
  737.  
  738. See [Q: Why can't I do ".." at top level directories or NFS mount points?]
  739. above.  This is just another problem caused by the fact that a real filesystem
  740. does not exist for VxWorks.  NFS client implementation actually does implement
  741. the symbolic links correctly, using lookup and readlink.  The problem is
  742. due to the fact that, for some relative links that use ".." or whatever, that
  743. crosses over filesystems, VxWorks cannot have underlying subsystem that will
  744. handle file pathname to device mapping.  
  745.  
  746. Using absolute symbolic links work just fine (i.e. full path name from top).
  747.  
  748. ------------------------------
  749.  
  750. 21. X for VxWorks
  751.  
  752. WRS has a product called windX which supports Motif. There is also
  753. libX11 contribution in the VxWorks Archive. This package is perhaps
  754. fairly old and out of date. Essentially, to port X stuff to VxWorks
  755. you'll need to do make sure code is re-entrant everywhere.  There is a
  756. "multi-thread" safe version of Xlib available somewhere on the net, one
  757. might try porting that.  There are also vendors that have built X servers
  758. using VxWorks.  Jupiter Systems, in Alameda, makes high-end X server
  759. machines based on VxWorks.  Other X terminal vendors (HP?) also use VxWorks.
  760.  
  761. -----------------------------
  762.  
  763. 22. IEEE-488 (GPIB) driver for VxWorks
  764.  
  765.  - National Instruments has lots of GPIB stuff
  766.  - THEMIS computers has TSVME-409 whic hincludes a GPIB interface.
  767.  - APLABS probably has some GPIB stuff too.
  768.  
  769. -----------------------------
  770.  
  771. 23. How does one disable NFS client caching?
  772.  
  773. VxWorks caches read and write requests in NFS client code.
  774. To completely disable read and write cache, set nfsCacheSize to 0.
  775. To just flush the write cache as needed, use nfsCacheFlush() or
  776. FIOSYNC ioctl().
  777.  
  778. ------------------------------
  779.  
  780. 24. Why doing a lot of slipInit()/slipDelete() cause routing table corruption?
  781.  
  782. This is due to a bug in slipDelete() and/or if_dettach().  slipDelete()
  783. calls if_dettach() to clean up after itself (SLIP network interface driver).
  784. Not only is if_dettach() misspelled, it also doesn't do a complete job.
  785. One deficiency is that it does not delete routes that are pointing to the
  786. interface being deleted.  This is remedied via another function that deletes
  787. all routes for a give netif device driver.  [ ifRouteDelete() ??? ]
  788. slipDelete() does call this routine to delete routes.  Another problem is
  789. that if_dettach() does not delete a pointer to the netif device driver 
  790. structure in the global in_ifaddr linked list.  The in_ifaddr list is
  791. used by the network kernel code to find IP addresses of available network
  792. interfaces, among other things.  This lack of proper cleanup turns out to 
  793. be a rather hard-to-find memory corruption problem in network code, and
  794. usually manifests itself as routing table corruptions.
  795.  
  796. To fix this add the following routine, and call it right after calling
  797. slipDelete:
  798.  
  799. void in_ifaddr_remove(ifp)
  800.         struct ifnet *ifp;  /* ifp = ifunit("sl0") before slipDelete() called */
  801. {
  802.         struct in_ifaddr *ia, *prev_ia;
  803.  
  804.         if (!ifp) 
  805.                 return;
  806.  
  807.         prev_ia = 0;
  808.  
  809.         for (ia = in_ifaddr; ia; ia = ia->ia_next) {
  810.                 if (ia->ia_ifp == ifp) {
  811.                         if (prev_ia)
  812.                                 prev_ia->ia_next = ia->ia_next;
  813.                         else
  814.                                 in_ifaddr = ia->ia_next;
  815.                         return;
  816.                 }
  817.                 prev_ia = ia;
  818.         }
  819. }
  820.  
  821.  
  822. This, along with the route cleanup, should be incorporated into if_detach().
  823.  
  824. ------------------------------
  825.  
  826. 25. How does one get better network I/O performance?
  827.  
  828. Most of the overhead is due to socket to network core interface overhead.
  829. The copy that happens between the socket layer and network core code
  830. can be avoided by using the routines in uipc_socket.c (as in BSD tahoe
  831. release code available on various archive sites) and using mbufs directly.
  832.  
  833. You can also try using raw etherLib routines.  However, etherLib also
  834. does copying between user application and network driver.
  835.  
  836. If you must use the socket interface (sockLib), make sure you tune the
  837. socket level buffers sizes to optimal values using setsockopt() calls
  838. SO_SNDBUF and SO_RCVBUF.  You might also just try changing the globals
  839. that control the following default parameters to larger numbers (all
  840. the way upto 48K):
  841.  
  842.  tcp_sendspace (default 4K)
  843.  tcp_recvspace (default 4K)
  844.  udp_sendspace (default 2K)
  845.  udp_recvspace (default 4K)
  846.  
  847. To get around extra latency in some cases, you might turn on TCP_NODELAY
  848. option on TCP sockets.
  849.  
  850. ------------------------------
  851.  
  852. 26. How does one troubleshoot a backplane driver malfunction?
  853.  
  854. There are a few rules of thumb:
  855.  
  856.  1) try the simplest case first -- use polling instead of
  857.     bus or mailbox interrupts and software test-and-set
  858.     instead of hardware test-and-set.  See if this
  859.     works first.  And then try hardware test-and-set
  860.     and then the desired mailbox or bus interrupt.
  861.  
  862.  2) use bpShow() to see what's up.  Also look for magic code
  863.     0x1234 in share mem area being used for messages,
  864.     and verify heartbeat is being incremented.
  865.     At the "anchor" you should see the magic code (4 bytes)
  866.     followed by a long word which should be incrementing (the
  867.     heartbeat) every second.
  868.  
  869.  3) verify all memory mapping and make sure there's no
  870.     address conflicts on the bus
  871.  
  872.  4) make sure bus controller is functioning properly.
  873.     Some combinations of boards might not work well
  874.     especially if your system controller board
  875.     arbitrates the bus in one way and other boards
  876.     expect to be arbitrated in a different way.
  877.     Sometimes you might need to use a separate
  878.     system controller.  Of course, also make sure
  879.     you only have one bus master.  And that your VME
  880.     bus strappings (BREQ, IACK daisychains) are right.
  881.  
  882.  5) call Wind River's VxWorks tech-support... 
  883.  
  884. ------------------------------
  885.  
  886. 27. How do I add select support to my driver?
  887.  
  888. #include "selectLib.h"
  889. ...
  890.  
  891. xxx_init(...)
  892. {
  893.      ...
  894.      selWakeupListInit(&xxxdev->selwakeupList);
  895.      ...
  896. }
  897.  
  898. xxx_ioctl(...)
  899. {
  900.      ...
  901.      switch(request_type) {
  902.      ...
  903.      case FIOSELECT:
  904.           selNodeAdd(&xxxdev->selwakeupList,
  905.                (SEL_WAKEUP_NODE *)request_arg);
  906.           if ((selWakeupType((SEL_WAKEUP_NODE*)request_arg) == SELREAD)
  907.                && readable_condition_is_met)
  908.                selWakeup((SEL_WAKEUP_NODE*)request_arg);
  909.           if ((selWakeupType((SEL_WAKEUP_NODE*)request_arg) == SELWRITE)
  910.                && writable_condition_is_met)
  911.                selWakeup((SEL_WAKEUP_NODE*)request_arg);
  912.           break;
  913.      ...
  914.      case FIOUNSELECT:
  915.           selNodeDelete(&xxxdev->selWakeupList,
  916.                (SEL_WAKEUP_NODE*)request_arg);
  917.           break;
  918.      ...
  919.      }
  920. }
  921.  
  922. And, add calls to selWakeup() as appropriate in your interrupt handlers
  923. and read/write routines as selective conditions are toggled or satisfied.
  924.  
  925. ------------------------------
  926.  
  927. 28. bind() gets EADDRINUSE, how do I fix it?
  928.  
  929. Fix: do setsockopt() SO_REUSEADDR
  930.  
  931. ------------------------------
  932.  
  933. 29. Common errors in interrupt handlers with floating point co-proc hardware
  934.  
  935. Don't forget to use:
  936.  fppSave()
  937.  fppRestore()
  938.  
  939. Interrupt handler encapsulation code doesn't always save fpp registers for you.
  940.  
  941. ------------------------------
  942.  
  943. 30. Finding entry point of a given module using its name
  944.  
  945. Example from a poster in vxworks newsgroup (who?):
  946.  
  947.  
  948.  FUNCPTR  start;  /* found entry point goes here */
  949.  UINT8    symType;
  950.  int      tid;
  951.  
  952.  if(symFindByName(sysSymTbl,"_nlos_start",(char**)&start,&symType)==OK){
  953.     /* taskSpawn(name,priority,options,stacksize,entryAddress,arg1,..) */
  954.  
  955.     tid = taskSpawn("nlos",TASK_PRI_NLOS,SPAWN_OPTS,STACK_SIZE_NLOS,start,
  956.     arg1,arg2,.....);
  957.  }
  958.  
  959. ------------------------------
  960.  
  961. 31. The problem with irint() in earlier (5.0.2 ?) releases
  962.  
  963. The problem:
  964.  
  965.  /* Include Files */
  966.  #include "vxWorks.h"
  967.  #include "math.h"
  968.  
  969.  long irint_count = 0;
  970.  
  971.  sinTest()
  972.  {
  973.       int sinTable;
  974.  
  975.       while(1)
  976.       {
  977.            sinTable = irint(sin(4./1024.*(2.*3.14))*10.);
  978.            irint_count++;
  979.       }
  980.  }
  981.  
  982.  
  983.  % cc68k -I/vxworks/vw/h -c sinTest.c
  984.  
  985.  -> ld < sinTest.o
  986.  
  987.  /* 0x08 Option = VX_FP_TASK within taskLib.h */
  988.  -> taskSpawn ("sinTest", 100, 0x08, 4000, sinTest)
  989.  /* OR without the Floating Point Option */
  990.  -> sp sinTest
  991.  
  992.  -> irint_count
  993.  
  994.  Bus Error
  995.  Program Counter: 0xb0ac0124
  996.  Status Register: 0x3004
  997.  Access Address : 0xb0ac0120
  998.  Special Status : 0x01e6
  999.  Task: 0xfcb82c "sinTest"
  1000.  
  1001.  
  1002.  
  1003. The answer:
  1004.  
  1005. Submitted-by wrs!yuba!kent@uunet.uu.net  Fri Sep 27 18:55:25 1991
  1006. Submitted-by: wrs!yuba!kent@uunet.uu.net (Kent Long)
  1007.  
  1008.  > In the function irint, there is a bug that sets the floating point
  1009.  > Exception enable byte register to random values.  Here is the
  1010.  > disasembled code:
  1011.  >
  1012.  >                         _irint:
  1013.  > 00e034  4e56 0000                LINK  .W    A6,#0
  1014.  > 00e038  f227 6b80                FMOVE .X    F7,-(A7)
  1015.  > 00e03c  f22e 5780 0008           FMOVE .D    ($8,A6),F7
  1016.  > 00e042  f22e 6380 0008           FMOVE .L    F7,($8,A6)
  1017.  > 00e048  202e 0008                MOVE  .L    ($8,A6),D0
  1018.  >
  1019.  > 00e04c  f201 9000                FMOVE .L    D1,#<FPCR>
  1020.  
  1021. <insert audible groan here>
  1022.  
  1023.  > 00e050  504f                     ADDQ  .W    #8,A7
  1024.  > 00e052  4e5e                     UNLK        A6
  1025.  > 00e054  4e75                     RTS
  1026.  >
  1027.  >    Line 0e04c is the line that sets the FPCR to some random value,
  1028.  > as D1 is unknown going into the function.  I rewrote the routine,
  1029.  > without line 0e4c, and everything works fine.
  1030.  >    If anyone out there knows why this line was put in, I would
  1031.  > appreciate knowing.  Hope this may keep someone else from spending
  1032.  > a couple of days tracking down this problem.
  1033.  
  1034. I have confirmed that this is a bug in all 5.x versions of VxWorks for
  1035. the 68k.  (In fact, it's in 4.0.2 as well.)  As Mark correctly observed,
  1036. the problem is that the FPCR register is erroneously being set.
  1037.  
  1038. This was a simple cut-and-paste error in the VxWorks source module.
  1039. The line which sets the FPCR should instead be restoring the value
  1040. of FP7, which was saved on the stack earlier (as you can see in the
  1041. code above).  So, it would appear that another side effect of this
  1042. bug is to clobber FP7.
  1043.   
  1044. The fix is pretty simple.  The following patch scripts should get things
  1045. back to what they should be.  (You can just include the appropriate lines
  1046. in your startup script, or enter them from the VxWorks shell.)
  1047.  
  1048. For VxWorks 5.0.1 and 5.0.2:
  1049.  
  1050.         pMathPatch = mathHardIrint + 0x18;
  1051.         *pMathPatch = (short) 0xf21f;
  1052.         pMathPatch = mathHardIrint + 0x1a;
  1053.         *pMathPatch = (short) 0x4b80;
  1054.  
  1055. This bug does NOT affect VxWorks 5.1.  The disassembled code for Vx5.1,
  1056. (HK68K/V3D) is:
  1057.                         _mathHardIrint:
  1058. 2042e58  4e56 0000                LINK  .W    A6,#0
  1059. 2042e5c  f227 6800                FMOVE .X    F0,-(A7)
  1060. 2042e60  f22e 5400 0008           FMOVE .D    (0x8,A6),F0
  1061. 2042e66  f22e 6000 0008           FMOVE .L    F0,(0x8,A6)
  1062. 2042e6c  202e 0008                MOVE  .L    (0x8,A6),D0
  1063. 2042e70  f21f 4800                FMOVE .X    (A7)+,F0
  1064. 2042e74  4e5e                     UNLK        A6
  1065. 2042e76  4e75                     RTS
  1066.  
  1067. Kent Long further clarifies,
  1068.  
  1069. This was indeed a real problem in the context switch code in 5.0.x which
  1070. was corrected in 5.1.
  1071.  
  1072. In both OS versions, there is an optimization that causes the FP context
  1073. to be swapped only when the incoming task has been spawned with the
  1074. floating point (VX_FP) flag set.  In 5.0.x, the copying-in of the FP context
  1075. was done via an fppSave() call.  This created problems if a new FP
  1076. task was created after a previous FP task had been pre-empted by a non-FP
  1077. task in the middle of an instruction.  The new task ended up with a 
  1078. mid-instruction context (which causes the protocol violation), and the 
  1079. old swapped-out FP task ultimately ended up with its context set to IDLE 
  1080. (which is equally incorrect).
  1081.  
  1082. In 5.1, the FP context initialization was changed so that when a task
  1083. is created, a pre-defined IDLE frame is copied into that tasks's context.
  1084. Since there is no assumption about current FP state (as with fppSave),
  1085. task creation is now decoupled from the regular switch logic.
  1086.  
  1087. ------------------------------
  1088.  
  1089. 32. What are +T, +I thingies in the "i" output?
  1090.  
  1091. The following is an excellent description of all these symbols by many people
  1092. on the net, including "Fred J. Roeber" and others:
  1093.  
  1094. Description                                 Status symbol
  1095. =====================================       ===============
  1096. <blah> and task's priority inherited         <blah> + I                    
  1097. Delayed and suspended                        DELAY+S
  1098. Pended and suspended                         PEND+S
  1099. Pended and Delayed                           PEND+T
  1100. Pended, delayed and suspended                PEND+S+T
  1101.  
  1102. The DELAY state indicates that the task has done some sort of delayed
  1103. call while PEND means the task has done something that caused it to
  1104. block like trying to semTake a semaphore someone else was holding.
  1105. PEND+T means that the task is both delaying and pending; it has done a
  1106. semTake with a timeout. +I means that the task has (temporarily)
  1107. inherited a higher priority through the use of a mutex semaphore.
  1108.  
  1109. The priority inheritance protocol also accounts for the ownership of
  1110. more than one mutual exclusion semaphore at a given time.  A task in
  1111. such a situation will execute at the priority of the highest priority
  1112. task blocked on any of the owned resources.  The task will return to
  1113. its normal, or standard, priority only after relinquishing all of the
  1114. mutual exclusion semaphores with the inversion safety option enabled.
  1115.  
  1116. If you use nested mutex semaphores with priority inheritance turned on then
  1117. when a task inherits a high priority due to some inner semaphore it owns,
  1118. it doesn't lose that priority until it relinquishes all the semaphores it
  1119. holds.  This doesn't quite follow the rules for priority inheritance (to
  1120. the extent that there really are any rules) in that normally, a task's
  1121. inherited priority should decrease as it releases each nested semaphore to
  1122. whatever the priority ceiling is for the semaphores it still holds.  Getting
  1123. this incremental priority reduction to work right in practice, though,
  1124. is extremely difficult (some of the SUN papers on the Solaris real time
  1125. scheduling indicate that this was one of the hardest things for SUN to
  1126. get right in their OS upgrades).  Given that VxWorks is a real time embedded
  1127. OS, I, for one, don't care if WRS uses the current implementation even
  1128. though it isn't "pure" because the result is a more reliable implementation
  1129. that runs more deterministically.  Anyway, my guess is that you will find
  1130. that you have some nested semaphore code where you are doing something
  1131. after releasing one of the nested semaphores that shouldn't be done at a
  1132. high priority.  
  1133.  
  1134. ------------------------------
  1135.  
  1136. 33. Gotchas w.r.t watchdogs
  1137.  
  1138. watchdog handlers run at interrupt level.  You should not use
  1139. routines that can block in interrupt level code.  Frequent mistakes:
  1140. using printf() in watchdog routines -- use logMsg() instead.
  1141.  
  1142. ------------------------------
  1143.  
  1144. 34. Is it possible to delete a memory partition in VxWorks?
  1145.  
  1146. No.  memPartDestroy() is not really implemented.  Perhaps it will
  1147. be in the future.  Currently it just returns ERROR.  
  1148.  
  1149. ------------------------------
  1150.  
  1151. 35. rename() does not work in netDrv and nfsDrv filesystems, why?
  1152.  
  1153. Because rename() is not implemented for netDrv (although it could be),
  1154. and nfsDrv does not implement rename() completely either.
  1155.  
  1156. Talk to WRS to get these fixed.
  1157.  
  1158. ------------------------------
  1159.  
  1160. 36. Free NFS Server for VxWorks
  1161.  
  1162. A free, incomplete, sample implementation (i.e. hack) of NFS Server
  1163. for VxWorks is available in:
  1164.  
  1165.  netcom.com:pub/hjb/nfsd/
  1166.  
  1167. There is a README file there that describes further details.  The current
  1168. snapshot of this implementation is a result of a couple of days of 
  1169. hacking, doesn't do everything right, and intended for educational and
  1170. further hacking purpose.
  1171.  
  1172. There is someone else who's porting the MS-DOS PC-based nfs server (SOSS?)
  1173. to VxWorks.  Not clear on its availability yet (let me know!)
  1174.  
  1175. ------------------------------
  1176.  
  1177. 37. Free SNMP for VxWorks
  1178.  
  1179. hoff@bnlux1.bnl.gov (Lawrence T. Hoff) reports,
  1180.  
  1181. We ported the CMU SNMPv2 code to vxWorks 5.1. This latest round of posts has
  1182. prompted me to put it in anonymous ftp (ctrldev1.rhic.bnl.gov --
  1183. 130.199.96.82).
  1184.  
  1185. SNMP Research sells VxWorks compatible port of their SNMP implementation
  1186. with support.  Their's cost $$$$$, though.
  1187.  
  1188. ------------------------------
  1189.  
  1190. 38. What third party products are available for VxWorks?
  1191.  
  1192. I tried to include the third party products, list of consultants,
  1193. services, goodies, etc. available for VxWorks from various sources but...
  1194. there are too many to list here.  Instead,
  1195.  
  1196. the file:
  1197.  
  1198.  netcom.com:pub/hjb/vxworkers.Z
  1199.  
  1200. is updated in realtime to contain a list of individuals and companies
  1201. that offer help, services (paid or unpaid), and goods for VxWorks.
  1202.  
  1203. To get a copy (if you don't have ftp access) or to be listed in this file, 
  1204. please contact or send info in ASCII to:
  1205.  
  1206.  hjb@netcom.com.
  1207.  
  1208. ------------------------------
  1209.  
  1210. 39. What kind of products have been developed using VxWorks?
  1211.  
  1212.  - flight simulators
  1213.  - radio and optical telescopes
  1214.  - automative ABS & realtime suspension
  1215.  - naviation systems
  1216.  - deep sea instrumentation
  1217.  - PBXs
  1218.  - traffic lights
  1219.  - modems
  1220.  - sonar systems
  1221.  
  1222.  [ editorial: And, regrettably, in: ]
  1223.  
  1224.  - military stuff
  1225.  
  1226. ---------------------------------
  1227.  
  1228. 40. A complete list of CPU hardware supported by VxWorks
  1229.  
  1230. Complete list of WRS supported BSP's are available in:
  1231.  
  1232.  netcom.com:pub/hjb/vxbsp.Z
  1233.  
  1234. VxWorks runs on a lot of different hardware.  Majority of hardware
  1235. supported is based on VME bus.  Porting VxWorks to a new VME board
  1236. based on MC68K takes only a few days, give or take a week, depending
  1237. on your karmic condition at the time.  A lot of the ports are
  1238. initially done by the customers and later "approved" by WRS, for
  1239. which they charge, in order to keep them on "supported" list.
  1240.  
  1241. Porting to a new "architecture" (new processor) takes longer.
  1242. This varies more widely -- from a few months to a few years.
  1243.  
  1244. ---------------------------------
  1245.  
  1246. 41. A complete list of peripheral devices supported by VxWorks
  1247.  
  1248. Complete list of WRS supported BSP's are available in:
  1249.  
  1250.  netcom.com:pub/hjb/vxbsp.Z
  1251.  
  1252. VxWorks supports a wide variety of devices.  A lot of device drivers 
  1253. are written both by customers and WRS staff.  There are device drivers
  1254. for almost popular available ethernet chips (except perhaps SEEQ and
  1255. Fujitzu, etc.), various serial chips (MC68681 DUART, Zilog 8350 Sync/Async
  1256. COMM chip, etc.), little I/O thingies in micro-controllers (MC68302
  1257. serial I/O, etc.), SCSI, etc.
  1258.  
  1259. Customers of VxWorks, hackers and other hardware vendors (especially
  1260. VME) usually have a VxWorks driver for their board.  There are drivers
  1261. for FDDI boards, GPIB boards, A/D D/A boards, Graphics controllers,
  1262. frame grabbers, stepper motors, pin-ball machines, and etch-a-sketch
  1263. toy games.
  1264.  
  1265. A list of available device driver for VxWorks can be found in:
  1266.  
  1267.  netcom.com:pub/hjb/vxdrivers.Z
  1268.  
  1269. Some evil VxWorkers have drivers for military/weapons systems.
  1270.  
  1271. ----------------------------------
  1272.  
  1273. 42. What's with these unbundled "accessories"?
  1274.  
  1275. Propaganda from WRS:
  1276.  
  1277.  The new product/feature doesn't need to wait for the
  1278.  next OS release.  Only the users who want/need it pay for it 
  1279.  lengthens price list which keeps individual items lower
  1280.  but still enhances WRS revenue growth.
  1281.  
  1282.  Please Note:
  1283.  WRS still always adds features to the core product, and
  1284.  has never taken items out of core product to make them
  1285.  unbundled.  Unlike UNIX vendors and others.
  1286.  
  1287. -----------------------------------------
  1288.  
  1289. 43. How come my 5.0.2 BSP isn't available in 5.1, damn it?
  1290.  
  1291. Propaganda from WRS:
  1292.  
  1293.  WRS tries to give customers 1 year warning when any product
  1294.  may be discontinued.  Unfortunately, all the bugs in
  1295.  the notification system are still to be worked out.
  1296.  Complain vehemently to your sales rep. if he didn't
  1297.  keep you informed.  WRS BSP obsoletion policy is primarily
  1298.  based on BSP volume and h/w avalability.
  1299.  
  1300. The 5.1 Guide and Release Notes provide a step by step recipe to
  1301. upgrade from 5.0.2 -- minimal changes,  start by ANISifying.  The BSP
  1302. Port Kit 1.1 provides extensive  info for the masochist.
  1303.  
  1304. ----------------------------------------
  1305.  
  1306. 44. How much is VxWorks?
  1307.  
  1308.  In general: Not free, in fact, quite the opposite.
  1309.  
  1310.  - Development License $23.5K (per project?)
  1311.  - Source $120K.
  1312.  - Target Licenses from $1000 for single quantity to $10 for 100,000+.
  1313.  
  1314. ------------------------------
  1315.  
  1316. 45. What is MicroWorks?
  1317.  
  1318. VxWorks is also available as a kernel-only product (MicroWorks 1.0) for
  1319.  the following processors:
  1320.  
  1321.  i960, 680x0, 683xx
  1322.  
  1323. MicroWorks is -- half the product at a half the price.
  1324.  
  1325. It has no network, native debug, shell, or profiling.  Comes with
  1326. VxMon a very portable ROM monitor to talk with an enhanced vxGDB 2.0
  1327. also included -- this is the debug agent which allows true system
  1328. level debugging in ISR or wherever.  In future, VxWorks may also be
  1329. able to work with VxMon.
  1330.  
  1331. Development License $12,500.
  1332.  
  1333. ------------------------------------
  1334.  
  1335. 46. Other Unbundled Products for VxWorks?
  1336.  
  1337. Other unbundled "accessory" products are: VxMP ($4K) which is an
  1338. extended shared memory capabilities for the kernel allowing semaphores
  1339. and other objects to be manipulated over the backplane transparently
  1340. (really!).
  1341.  
  1342. VxVMI ($3K) is a library of virtual memory interface routines allowing
  1343. text & kernel data protection.  complementary products: BSP Port Kit
  1344. 1.1 ($2K), VxSim 1.0 ($5K), WindX ($3.5K), WindC++ ($2.5K), WindC++
  1345. Gateway for ObjectCenter ($?K's), and Realtime Innovations StethoScope (3K).
  1346.  
  1347. ----------------------------- 
  1348.  
  1349. 47. How can I find out more about VxWorks?
  1350.  
  1351.  Read: comp.os.vxworks
  1352.  Email: inquiries@wrs.com
  1353.  Call: 1-800-KIK-WIND
  1354.  
  1355. ------------------------------
  1356.  
  1357. 48. What other net.resources are available on real-time systems?
  1358.  
  1359. There is at least one other newsgroup devoted exclusively to a particular
  1360. vendor's real-time operating system:
  1361.  
  1362. comp.os.os9  Discussions about the OS/9 operating system.
  1363.  
  1364. Here are some other related newsgroups:
  1365.  
  1366. comp.arch        Computer architecture.
  1367. comp.arch.bus.vmebus    Hardware and software for VMEbus Systems.
  1368. comp.os.misc        General OS-oriented discussion not carried elsewhere.
  1369. comp.realtime        Issues related to real-time computing.
  1370. comp.os.os9        Issues related to OS9 and OS9000 realtime OS.
  1371.  
  1372. There are too many other newsgroups devoted to computer operating systems
  1373. to list here.  The interested reader is advised to check the "newsgroups"
  1374. file on a local news service machine.
  1375.  
  1376. The automatic server for users of pSOS RTOS is now in place.
  1377.  
  1378. PSOSUSER - A list intended for the discussion of topics relating to
  1379.            pSOSystem and other products of Integrated Systems Inc.,
  1380.            Software Components Group.
  1381.  
  1382. Send articles to psosuser@isi.com and administrative requests to
  1383. listserver@isi.com.
  1384.  
  1385. If you aren't already subscribed and would like to, please send a mail
  1386. message to listserv@isi.com containing the following in the body of
  1387. the message
  1388.  
  1389. SUBSCRIBE PSOSUSER <substitute your full name here>
  1390.  
  1391. ------------------------------
  1392.  
  1393. 49. How do i use FIONBIO in 5.0.2 when there is no fcntl()?  
  1394.  
  1395. Use ioctl() instead.
  1396.  
  1397. ...
  1398. {
  1399.     ...
  1400.     int on = 1;    /* turn it on */
  1401.     ...
  1402.     ioctl(fd, FIONBIO, &on);
  1403.     ...
  1404. }
  1405.  
  1406. ------------------------------
  1407.  
  1408. 50. Free lex and yacc for use with VxWorks
  1409.  
  1410. John Winas (winas@phebos.aps.anl.gov) writes,
  1411.  
  1412. I just (moments ago) uploaded the two packages to thor.ncar.ucar.edu where
  1413. the vxWorks archive is.  When ever the maintainer moves it into the release
  1414. area they will be available to everyone.  I named the file lexyacc.tar.Z
  1415. and it contains all of the sources and make files for you to build them.
  1416. It all seems to work perfectly on my sun sparc running 4.1.3.  The
  1417. only thing you have to configure is the full path name to where you wish
  1418. to keep flex so that it can find its skeleton file when you use it to
  1419. lexify your .l files.  Byacc has no skeleton files and simply needs to 
  1420. be in your path.
  1421.  
  1422. I am interested in any bugs found in because we are using them here.  Feel
  1423. free to email me at winans@phebos.aps.anl.gov.
  1424.  
  1425. ------------------------------
  1426.  
  1427. 51. timer_gettime() bug
  1428.  
  1429. From: kent@wrs.com (Kent Long)
  1430.  
  1431. In article <9311230139.AA21147@focal.com> bobk@focal.com (Bob Klawuhn) writes:
  1432. >I am currently trying to user the timerLib to obtain
  1433. >the amount of time that a timer has left before it
  1434. >expires. I am trying to use the timer_gettime function. 
  1435. >The value that it seems to return is always the time
  1436. >that the start timer was given, not what is left on the
  1437. >timer.
  1438.  
  1439.  
  1440. This is indeed a bug in the 5.1 and 5.1.1 VxWorks versions.
  1441. It is now being tracked as WRS SPR #2673.
  1442.  
  1443. As a workaround, the following could be done following the
  1444. timer_gettime() call, to convert the erroneous results into
  1445. the desired remainder value:
  1446.  
  1447.  
  1448.      #include "private/timerLibP.h"
  1449.      struct timespec timeNow;
  1450.  
  1451.      (void) clock_gettime (CLOCK_REALTIME, &timeNow);
  1452.      TV_SUB (timerid->exp.it_value, timeNow);
  1453.  
  1454. ...which leaves the remainder in it_value.
  1455.  
  1456. ------------------------------
  1457.  
  1458. 52. bogus INCLUDE_TCP_DEBUG
  1459.  
  1460. From: hipp@wrs.com (Emily Hipp)
  1461.  
  1462. >Bus Error
  1463. >Program Counter: 0x0001c738
  1464. >Status Register: 0x3000 
  1465. >Access Address : 0xbfbfbfd3
  1466. >Special Status : 0x0505
  1467. >Task: 0x3dcc54 "tExcTask"
  1468. >TCP tracing not enabled (use INCLUDE_TCP_DEBUG).  
  1469.  
  1470. This is misleading information.  INCLUDE_TCP_DEBUG is not supported
  1471. as a configAll.h include option.
  1472.  
  1473. [ editorial: 
  1474.   INCLUDE_TCP_DEBUG never got integrated into VxWorks config files.
  1475.   To get around this bug, until WRS fixes it, either unset SO_DEBUG 
  1476.   socket option using getsockopt()/setsockopt(), or call tcpTraceInit() (sp?)
  1477.   which will drag in tcp_debug.o and set the tcp_trace() routine to
  1478.   be called when debug option is set on TCP sockets.
  1479. ]
  1480.  
  1481. ------------------------------
  1482.  
  1483. 53. free ppp for VxWorks
  1484.  
  1485. Is available via anonymous ftp 
  1486.  
  1487.     netcom.com:pub/peacefulstar/dab/vpppd-1.0.tar.gz
  1488.  
  1489. ------------------------------
  1490.  
  1491. 9999: Contributions to comp.os.vxworks FAQs.
  1492.  
  1493. The following net.folks, among others, have contributed to this posting:
  1494.  
  1495.  Name            email address
  1496.  ------------        ----------------------------    
  1497.  Mark Linimon         linimon@nominil.lonestar.org
  1498.  Geoff Espin        geoff@wrs.com
  1499.  Rev. Bob Crispen    crispen@foxy.boeing.com
  1500.  Stan Schneider        stan@rti.com
  1501.  Fred J Roeber        fjr@ssd.ray.com
  1502.  Marc Friedman        maf@verdix.com
  1503.  Joe Van Andel        vanandel@ncar.ucar.edu
  1504.  Bob Marino        ram@mr.picker.com
  1505.  Richard Kowalsky    cmdorat@tc.fluke.com 
  1506.  Kent Long        kent@wrs.com
  1507.  James Moore        james@wrs.com
  1508.  Chuck Meade        chuckm@verdix.com
  1509.  Patrick T. Pinkowski    ppinkow@jupiter.ksc.nasa.gov
  1510.  D'Anne Thompson    dat@noao.edu
  1511.  Leonid Rosenboim    leonid@rst.hellnet.org
  1512.  David Lim        lim@robotics.jpl.nasa.gov
  1513.  Richard Neitzel    thor@thor.atd.ucar.edu
  1514.  John Winas        winas@phebos.aps.anl.gov
  1515.  
  1516. I welcome flames, insults, accusations, reactions, additions, and
  1517. corrections to this posting via email:
  1518.  
  1519.  hjb@netcom.com 
  1520.  
  1521. ------------------------------
  1522.  
  1523. ===============================================================================
  1524.  
  1525. Hwa-Jin Bae  (hjb@netcom.com)              510-466-9166 (msg/page)    
  1526. PEACEFUL STAR Consultants -- "Hackers R Us"    510-536-7607 (office)
  1527. 2899 Ford St, OAKLAND, CA 94601-2125        510-536-5889 (fax)
  1528.