74 lines
2.3 KiB
Plaintext
74 lines
2.3 KiB
Plaintext
|
|
|
|
Somewhat threw this together.
|
|
|
|
I have not tried newlib in a while, for a while there it was quite
|
|
difficult to get a combination of binutils, gcc and newlib that would
|
|
build crosscompiled. Somewhat trivial now.
|
|
|
|
went here
|
|
|
|
ftp://sources.redhat.com/pub/newlib/index.html
|
|
|
|
downloaded newlib-1.20.0.tar.gz
|
|
|
|
untarred it
|
|
|
|
since I already had a gnu toolchain I built using the scripts in my
|
|
build_gcc that I built to /opt/gnuarm
|
|
|
|
tar xzvf newlib-1.20.0.tar.gz
|
|
cd newlib-1.20.0
|
|
|
|
-- now here is my solution
|
|
cd newlib/libc/sys/arm/
|
|
mv syscalls.c syscalls.corig
|
|
touch syscalls.c
|
|
mv libcfunc.c libcfunc.corig
|
|
touch libcfunc.c
|
|
mv crt0.S crt0.Sorig
|
|
touch crt0.S
|
|
cd ../../../../
|
|
-- should be back in the newlib-1.20.0 directory
|
|
|
|
./configure --target=arm-none-eabi --prefix=/opt/gnuarm
|
|
make
|
|
make install
|
|
|
|
what I would then do is go into syscalls and start pruning, make all
|
|
the functions return whatever the proper flavor of success was. to
|
|
get printf to work you need isatty to return the right thing. note
|
|
I also have a functional malloc here by defining the beginning of my
|
|
heap and doing trivial memory management.
|
|
|
|
The way I used to do all of this is based on something I learned from
|
|
others, before building gcc pull in the proper newlib directories
|
|
and then build gcc with the right headers and newlib stuff and it
|
|
would build it all into one nice package (when it worked) so you didnt
|
|
have to specify lib paths. Since I threw this together I had to specify
|
|
the lib paths to things you will need to fix those paths for yours.
|
|
|
|
The reason why I neutered the three files in newlib is it is a quick and
|
|
easy way to allow the newlib makefile to continue without complaint but
|
|
also to allow the project to own those system calls. Since I run bare
|
|
metal each project may want to do something different. If this were an
|
|
operating system use of newlib then I would consider one solution for
|
|
everyone and have it built into the normal place.
|
|
|
|
I had to fight the linker a little to get the right code in the right
|
|
place. Be careful to check your disassembly of your binary so that
|
|
you know that your start code is at the beginning of your image not
|
|
somewhere after crti or crtbegin or something like that.
|
|
|
|
you should see
|
|
|
|
...
|
|
12345678
|
|
0000800C
|
|
Hello World!
|
|
0x0000800C
|
|
32780
|
|
|
|
If it all works. for now I will not leave binaries in the repo even
|
|
though I expect this is a challenging build for many.
|