[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: Fwd: [Caml-list] Ocaml on RaspberryPi bare-metal crashes
> From: Goswin von Brederlow <goswin-v-b at web.de> > Subject: [Caml-list] Ocaml on RaspberryPi bare-metal crashes > Date: 4 November 2013 08:10:15 GMT-5 > To: caml-list at inria.fr > Reply-To: Goswin von Brederlow <goswin-v-b at web.de> > > Hi, > > over the weekend I wrote some boot code and glue to make ocaml run > bare-metal on a RaspberryPi. Here is what I did: > > - Compile ocaml source into a single object file: > ocamlopt -output-obj -o prog.o foo.ml > > - Compile a boot.S and main.c file providing the hardware interface > and libc (libm, libdl) functions needed by ocaml. A lot of stuff is > just stubs that will return errors or nonsense (like all the math > functions return 0). But I have memory and print functions working. > The main() initializes the hardware and calls caml_startup(). > > - Add libasmrun.a and libgcc.a from the system. > > - Link it all together and objcopy to binary to get a kernel image for > booting. > > Everything compiles and links without errors. And the kernel boots and > outputs its startup messages before starting ocaml. But then is where > things get tricky: > > ---- foo.ml ---- > let () = () > ---------------- > Ocaml starts and finishes and the kernel outputs its finished message. > Everything seems to be working fine. > > ---- foo.ml ---- > let () = Printf.printf "Hello World\n%!" > ---------------- > Ocaml does its startup (calls the same libc functions as before) but > then the system resets before printing "Hello World\n". I don't see > any sprintf() or fputs() or fwrite() calls. > > I'm not sure why it crashes and I haven't setup exception handlers yet > that would tell me what or where exactly it crashes. But the only new > bits are the initialization of the printf module and the printf call > itself. Must be one or the other. > > Does anyone want to take a blind guess what could be wrong? > > One idea I got while writing the email is that maybe the stack is the > problem. I only setup a 16k stack at boot. Does ocaml create its own > stack or should I make the stack larger? Would a simple printf exceed > 16k stack? > > MfG > Goswin I since solve the crash. It was actualy 2 problems: 1) the GC uses floating point operations and I didn't have the FPU enabled. 2) malloc() needs to return blocks 8 byte aligned (not 4) or storing 64bit values crashes. After that ocaml works (limited to the serial for I/O). MfG Goswin
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |