This is the mail archive of the
newlib@sources.redhat.com
mailing list for the newlib project.
Re: make i/o work ?
- From: "J. Johnston" <jjohnstn at redhat dot com>
- To: Mr dot Smoke at gmx dot net
- Cc: newlib at sources dot redhat dot com
- Date: Tue, 05 Feb 2002 18:50:25 -0500
- Subject: Re: make i/o work ?
- Organization: Red Hat Inc.
- References: <20020206183456.9A65316F1E@Bull.Cheese.de>
"Mr.Smoke" wrote:
>
> Hi,
>
> how can i get the i/o stuff working in newlib 1.9 ?
> I read many docs (B.Gatlif for ex.) but not realy sure what i need to do.
>
That's bit of an open question. What particular platform are you targetting
(v850?) and
what particular board or do you just want to use the simulator?
> Thatīs what i suppose:
> I need a inbyte() and outbyte() function. Must they be build with the
> complete newlib sources, or can i include them in my programms which will be
> linked against newlib ?
>
Newlib is built to sit on a relatively small syscall layer. Typically, this
layer is kept separate in libgloss to allow multiple implementations (e.g. an
evaluation board vs a simulator). Newlib itself does not know about inbyte()
or outbyte(); it calls the read/write syscalls. See
newlib/libc/include/reent.h
for details on what the syscall interface routines need to be named.
You also need a crt0 and a crt1 (if you want C++ ctor/dtor support).
If you are building to run on a simulator, the task is quite straightforward.
Assuming you are targetting the v850, looking at the v850 simulator, a syscall
is a trap 0
/* Registers passed to trap 0 */
#define FUNC State.regs[6] /* function number, return value */
#define PARM1 State.regs[7] /* optional parm 1 */
#define PARM2 State.regs[8] /* optional parm 2 */
#define PARM3 State.regs[9] /* optional parm 3 */
Thus, you need to add a set of syscall routines that newlib will call that use
trap 0. See the libgloss/mn10300 code which also uses trap 0.
If you want to run off a board, there is the RedBoot monitor you can use for
certain v850 boards. See http://sources.redhat.com/redboot for details. You
will have to write a libgloss library that calls the RedBoot syscall interface.
Offhand I don't know, but it might just be trap 0 as well. Alternatively,
you could just use eCos instead of newlib which contains a configurable C
library and
RedBoot that already support v850. See http://sources.redhat.com/ecos for more
details.
-- Jeff J.