Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Jul 2002 10:49:56 -0400 (EDT)
From:      Andy <andy@wantpackets.com>
To:        freebsd-ppc@freebsd.org
Subject:   Re: FreeBSD-powerpc compiled init -> "ppcdisk"
Message-ID:  <1027003796.3d36d5944e85b@www.wantpackets.com>
In-Reply-To: <3D3674D5.864C543E@ptree32.com.au>
References:  <1026963034.3d36365a28b28@www.wantpackets.com> <3D3674D5.864C543E@ptree32.com.au>

next in thread | previous in thread | raw e-mail | index | archive | help
Quoting Peter Grehan <peterg@ptree32.com.au>:

> Hi Andrew,
> 
> >   "ppcdisk" from Oct 18 does not contain anything in reguards to any
> binaries (or
> >  it would seem so as it compresses to about nothing.)  I compiled and
> linked init
> >  as a FreeBSD powerpc binary, and would like to try it out.
> 
>  I'm amazed that you managed to get init to compile, since there are
> some major pieces missing in libc. I'll put a pointer to the patches
> further down.
  Ouch for me.  Talk about redoing the wheel.  I spent two and a half batteries
 and some AC figuring out stuff already done ;/ (But that's fine with me)
  I'll compare what you did to what I did.

> 
>  Actually, there are a whole lot more things that will get in your way,
> but
> if you're willing, keep reading :-)
  No, not "if," say "because."

> 
> >  I cannot do this be
> >  cause I can't(do not know how?) to mount the big endian ppcdisk image
> to put the
> >  file init in /sbin.  I ask for somebody to tell me how to mess with
> big endian
> >  stuff with my i386 or to do the above themselves on a NetBSD-PPC (or
> any ffs-rea
> >  ding os on the powerpc).  The binary is available at
> >  https://wantpackets.com/~andy/init .
> >   (using the 4.6-RELEASE write_mfs_in_kernel.c works :)
> 
>  I currently use mkisofs to build an ISO image, build ofwd, cd9660 and 
> GEOM into the ppc kernel, and use psim's disk capability to mount root.
> The idea also being that I can use this ISO image on a real system when

  I guess that's a good idea.  For a second, I thought about having a hd image
 but then realized I would have the same problem as I do now...
 (didn't know about all the cool things psim can do)

> 
> I'm happy with it. So, the steps are:
> 
>  1. Apply the relevant kernel/libc patches from
> 
>        http://www.ptree32.com.au/freebsd/ppc-0718.tgz 
> 
>  2. Take out the BOOTP, BOOTP_NFSROOT, and NFS_ROOT lines from your
> kernel 
>     conf file. Add GEOM and CD9660 (I'm using GEOM since an Apple
> partition 
>     module will be added to it at some point). Also, GEOM requires the
>     following lines to be added to files.powerpc. I guess they might
> make it
>     into the MI files file at some point.
> 
>       crypto/rijndael/rijndael-alg-fst.c optional geom
>       crypto/rijndael/rijndael-api-fst.c optional geom
> 
>  3. Populate a directory tree with /sbin/init, /dev, and various files
> &
> utilities.
>     (e.g. /bin/sh, /bin/ls, /etc/rc) and create an ISO image of this.
> 
>  5. In the kernel compile directory, create a psim device tree file,
> with the
>     following lines. Yes, there's a lot of crap here, but unfortunately
> it's
>     required by psim.
> 
> /#address-cells 1
> 
> #
> # CPU definition.
> #
> /cpus/cpu@0
> 
> #
> # disk file, done via phb junk. wish there was a better way.
> #
> /phb@0x70000000
>         ./device_type "pci
>         ./name "pci
>         ./#address-cells 3
>         ./#size-cells 2
>         ./ranges ni0,0,0,0 0xc0000000 0x10000
> 
> /phb@0x70000000/ide@1
>         ./device_type "ide
>         ./name "ide
>         ./assigned-addresses \
>                 ni0,0,10,1f0 8 \
>                 ni0,0,14,3f8 8 \
>                 ni0,0,18,170 8 \
>                 ni0,0,1c,378 8 \
>                 ni0,0,20,200 8
>         ./reg \
>                 1 0 \
>                 i0,0,10,0 8 \
>                 i0,0,18,0 8 \
>                 i0,0,14,6 1 \
>                 i0,0,1c,6 1 \
>                 i0,0,20,0 8
>         ./ready-delay 1000
> 
> # Put ISO image file here
> /phb@0x70000000/ide@1/disk@0/file "PPC.IMG
>   
> 
>  6. Create a .gdbinit file with the option to tell psim to read in the
> device
>     tree. You probably don't need to use 128M for the '-r' param.
> 
>       target sim -e chirp -r 134217728 -f psim-tree
>       load
 I use 32mb from the Oct 18 email.  I refer to it as something so great, and so
often, it should be bronzed.

> 
>  7. Now boot the kernel with psim, and it should eventually get to the
> root
>     mount prompt. When it does, enter 'cd9660:ofwd0', and that should
> kick off
>     the boot process:
> 
> (gdb) r
> Starting program:
> /mnt/home/freebsd/work/sys/powerpc/compile/PETERG/kernel.debug 
> powerpc_init: no loader metadata.
> Copyright (c) 1992-2002 The FreeBSD Project.
> Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993,
> 1994
>         The Regents of the University of California. All rights
> reserved.
> FreeBSD 5.0-CURRENT #198: Thu Jul 18 06:14:18 GMT 2002
>    
> grehan@fb1.ptree32.com.au:/mnt/home/freebsd/work/sys/powerpc/compile/PETERG
> CPU: PowerPC Simulator (psim) (Revision 0)
> real memory  = 133132288 (130012K bytes)
> avail memory = 125636608 (122692K bytes)
> nexus_probe: can't get interrupt-controllernexus0: <OpenFirmware Nexus
> device>
> ofwd0: <OpenFirmware disk> on nexus0
> ofwd0: located at /phb@0x70000000/ide@1/disk@0
> Initializing GEOMetry subsystem
> Timecounter "powerpc"  frequency 16666666 Hz
> Timecounters tick every 10.000 msec
> 
> Manual root filesystem specification:
>   <fstype>:<device>  Mount <device> using filesystem <fstype>
>                        eg. ufs:da0a
>   ?                  List valid disk boot devices
>   <empty line>       Abort manual input
> 
> mountroot> cd9660:ofwd0
> cd9660:ofwd0
> Mounting root from cd9660:ofwd0
> cd9660: RockRidge Extension
> Jan  1 00:00:01 init: login_getclass: unknown class 'daemon'
> 
>  8. Now the fun begins, since things appear to hang about here. The
> problem is
>    that init has opened /dev/console, which kicks off the OpenFirmware
> console
>    polling process. But, the psim stdin implementation is blocking, so
> the
>    ofw_cons_checkc() routine in ofw_timeout() doesn't return. A
> workaround is
>    to hit ^C in gdb: if you see something like:
> 
>    ^C
>    Program received signal SIGINT, Interrupt.
>    0x80004004 in ?? ()
>    (gdb) 
> 
>    you know that you're stuck in OpenFirmware. BUT, if you continue
> from
> here,
>    the stdin routine *will* return an error status, and things will
> continue.
> 
>    I'm sure this psim problem can be fixed, but I've worked around it
> either with
>    ^C, or by putting in a variable that prevented ofw_cons_checkc()
> from
> being
>    called until I set it in the debugger.
> 
>  9. If you're lucky, you may get to a shell prompt, but this is where
> my
>     debugging is currently at.
 Luck?  "dont need no luck!"

> 
> later,
> 
> Peter.
> 

Please note that I am on the mailing list now,
and receiving two emails with the same content is dissapointing when you are 
hoping for something new.  As of now, I have not tried your instructions,
but will download your patches and program outside for a battery.



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-ppc" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1027003796.3d36d5944e85b>