In lieu of a blog we will go a simple route here just posting notes with their associated dates. Jump to the bottom of the page to see the latest boot log output from the target.
We are in the ongoing process of pushing out code to the svn repository and currently it is behind the point of our internal repository but we will catch up. This was done in order to better document the order of the development instead of dropping another tarball.
Important target notes for now 11/1/07
you must add these lines to your asy.conf file in your $ROOT/kernel/drv
ttyb-ignore-cd=1;
ttyb-mode="115200,8,n,1,-";
You must enter in the following once the ODW boots and your at the smartfirmware prompt. This will route the ethernet irq to a non shared number.
54600080 f1000c78 l!
a09990 f1000c7c l!
3c680080 f1000c78 l!
a01ffff f1000c7c l!
boot eth:192.168.1.10,openfirmware
The current status is that we are at the point of running our first code from userland. As you can see there is a bit more work to do but progress has been made. In this run we have replaced the "usual" init with a application that is statically linked that simply does an open of the console device, a write of
"Hello, world!" and then exits.
> elfexec
elfexec: level = 0
> elfexec -> getelfhead
< elfexec -> getelfhead
> elfexec -> getelfphdr
< elfexec -> getelfphdr
execargs: size = 4096
hatunloadcallback: vaddr=dfffd000, len=2000
hatunloadcallback: cb = NULL
ppcmmualloc: > vmemalloc
ppcmmualloc: < vmemalloc
ppcmmusetup: not kernel hat
ppcmmusetup: > mmusegload
ppcmmusetup: < mmusegload
> execargs -> stkcopyout
-> grow
-> growinternal: sp=dfffefc0, growszc=0
<- growinternal: newsize=1000
asfault: seg->sops->fault = e0204ff4 = unix:segvnfault+0
<- grow
< execargs -> stkcopyout
asfault: seg->sops->fault = e0204ff4 = unix:segvnfault+0
< elfexec
> exec_init — rc=0
Hello, world! <----— This is what we have been waiting for!!!
WARNING: init(1M) exited with status 0: restarting automatically
To browse the latest project source just go here
Now at rev 97. Major items to note
We have sync'd with onnv bld 58 -— hmmm aren't we a bit behind
Well this is the bulk of the commit, we have not done a merge since earlier this year. Why? It's a messy thing being on a parallel path here, but this will take us from 57 to 58. We will now be spending time on playing catchup to get back in sync with the releases. Guy does this by himself. There is alot more work to do now with each one of these since we are successfully building much more of the consolidation. The lack of accounting for a 3rd architecture can be painfully seen with each one of these but we grind away.
Updates to sgs. We can now build rtld (ld.so.1)
It is now at rev 95. Many updates to lib/ and a number of shared objects are building. We have yet to actually test any of this on the target since we need a functional rtld, which should be here soon.
You will need to build the libs with make -k install. We have a problem with building lint related items and that will get you temporarily past the issue.
To build you will also need the updated toolchain which has a reconfigured gcc which now handles c++.
Once you have the right shared objects you should also be able to build cmd/init and cmd/sh.
Ok, we're now at rev 93 and the repo is in sync with the Sun Labs development. All of the latest code is out. It should build cleanly, just follow the instructions. If you have any questions, feedback, suggestions or want to jump in post to the discussion list.
We're in the process of updating the task pages and overall documentation on the project itself. Please take the time to review and provide feedback or information updating.
The ppc-dev repo is now at rev 89 this is around the mid Aug 07 development timeline so we're now only a few months behind. Lots of ddi and interrupt development was going on. The additional good news here is that the repo is building on the outside by community members.
It is now at rev 82 this is now around the June 07 development timeline so the ppc-dev code base is catching up. This putback has updates to the VM, HAT layer and PMDB. A few more drivers completes the PPC driver build dirs and their associated Makefiles.
It is now at rev 80. This putback generally completes adding the PPC driver build dirs and their associated Makefiles. It also has the start of the CBE work along with update pci nexus and genral interrupt work. There are updates to the tool set that Guy has created, see the work in onbld. Added a bit of support for the EFIKA platform, but ODW continues to be the platform we develop on.
You may notice in the log alot of comments to code regarding double mappings. This was a problem we fought with for a while before finding an oversight related to the ODW firmware and active BAT regs that we thought were disabled.
It is now at rev 79. This putback includes a large number of the PPC driver build dirs and Makefiles. It also has the start of the rootnexus and ddi interface.
It is now at rev 78. At this point the interrupt framework and the cbe was just being added. The PMDB (Poor Mans Debugger) was updated and also some VM related work was added. The RHINE ethernet chip driver was added here.
It is now at rev 72. This is about half way through the merge of the ppc-dev tree with bld 57. Best to wait till the whole merge is pushed out before attempting to build and test. Note you will need to load ands run VOF on top of the ODW's firmware. A binary has been provided.
It is now at rev 62. This includes the beginning merge of the ppc-dev tree with bld 56 which is around the Jan 07 timeframe. Notable commits are related to mdb and other kernel boot funcs.
It is now at rev 38. This is up to the merge of the tree with bld 54. You will have to use the updated toolchain GNU/GCC/AS/solaris ld from now on to build. Get it here
It is now at rev 24. These updates were still related to general work that continued in the kernel bringup but you may also notice the cmd/sgs ld work that's was going on.
Gotta love svn. The merge command works well on files that are already in place. but won't create new files. We've been using svn cat to create the new files, do an svn add, then go for the merge.
Populated it with the source from the initial code release. As usual doing something for the 1st time always takes a bit longer to get the hang of it. The SCM management support wasn't available back at the time of the 1st source drop so the tarball was essentially it. You can access according to the std instructions. For example you would have svn+ssh://user at svn dot opensolaris dot org/svn/ppc-dev/ppc-dev. You also need to be affiliated with the project and have a public key available on your profile.
The GNU ld was covering up the incorrect symbol relocations, fancy that. The new one is here /opt/polaris/powerpc-solaris2/bin/as. The difference is that the new as should generate the proper relocations for unaligned 32 and 16 bit address relocations. With this new as we can go back to compiling with -g -gdwarf-2.
onnv-gate build 54 (2006-Nov-22) and the ppc-dev source base is complete. This is not a simple job, many files must be hand merged after the bulk is integrated.
- Figured out problems with inetboot. Restricted reads to 1K as the ethernet driver in the OF drops back to back packets. Also randomized the initial port number so that back to back reboots won't have to wait for 4 minutes for the previous connections to time out.
- Cross built ld. Required libconv, libelf, libld, liblddbg as well. Most of usr/src/cmd/sgs builds, but not all. Skipped over TLS (thread local storage) stuff for now. Also did nothing for 64-bit. Main issues surrounded no cross building was envisioned or testing. Byte flipping issues abound.
- kernel and boot both can be properly built by the Solaris ld. We've switched over to the Solaris ld totally now and using the Solaris kernel mapping layout. Still cannot run at 0xe0000000 as OF has problems dealing with non real mode addresses.
- Got krtld working. Apparently fully functional. Issues w/byte flipping in doreloc() and addend values were both in the addend field of the relocation and left at the memory location referred to by the relocation.
- Worked on and analyzed issues with usr/src/tools/ctf
- Started working on mdb/kmdb. Makefile tree in place.
- Created a work around solution for genassym/assym.h until the ctf tools are functional. Compile the offsets (data table only) with the GNU gcc cross compiler into an assembler file. Use that assembler file as input into Sun x86 c compiler. Relies on the fact that the x86 and PowerPC assemblers are very similar.
It is available in /opt/onbld/usr/ccs/bin/ld. There are also the libraries which are in /opt/onbld/lib/. In order to run the new linker you must set in your environment LD=/opt/onbld/usr/ccs/bin/ld then export LD.
But now we run into some very strange issues with symbol unaligned relocations. Since we use the Metrowerks PowerTAP and Codewarrior for source level debuging we need to have DWARF symbols even though we can build successfully without them. The solaris ld complains, but the GNU ld never did.
(for sh and bsh at least).
krtld is running.
inetboot loads /platform/chrp/kernel/unix.
inetboot reads unix and observes that misc/krtld
is required. inetboot reads in /kernel/misc/krtld.
Control is transferred to krtld. krtld relocates
itself and then reads unix for its symbols and
well as reading that genunix is needed. krtld
then reads in genunix and relocates it and
binds everything together. Control is then
transferred to unix which starts execution.
This was quite a bit of work just to get to this point but now there is a working development system available to all who would like to particpate in any area of this project. There is no closed code, all of the platform source is open. The build is sync with ON a bit past BLD_47. The Polaris task map was updated also.
In simple terms the kernel boots and outputs to the console to a point and then will panic. This is currently during the VM initialization. Development continues not only on the VM/HAT but in parallel on KRTLD, RTLD. At this time however we statically link unix/genunix to facilitate debugging. The task map is the best way to obtain details on development status of each area.
Quite a bit of progress had been made since the October release, see below
PegasosII Boot Strap (c) 2002-2005 bplan GmbH (BUILD 20051216202806)
Running on CPU PVR:80020101
Enable L1 ICache… Done.
Clean/Flush Block enabled
Reading ICS9248 : 84EFFF3FFFFF Done.
Setting Front Side Bus to 133MHz… Done.
Memory has not changed
Configuring Memory
Memory Config Done
Configuring PCI0… Done.
Configuring PCI1… Done.
Configuring ETH… Done.
Releasing IDE reset … Done.
onfiguring Legacy Devices
Initializing KBD…00000032 FAILED.
Testing 10000000 Bytes, Pass: 00000000 Failed: 00000000
RAM TEST (fill random)… Done.
SmartFirmware:
cpu0: PowerPC,74x7 CPUClock 999 Mhz BUSClock 133 Mhz (Version 0x8002,0x0101)
SVEN : initoptionsfromnvram : user
no/bad nvramrc – performing default startup script
channel 0 unit 0 : ata | ST340014A | 3.06
ATA device not present or not responding
channel 1 unit 0 : atapi | SAMSUNG CDRW/DVD SM-352F | T900
EMULATION INT HANDLER ENTERED WITH:
INT NO: 15
EAX=0003 EBX=1111 ECX=2222 EDX=3333 ESP=0000 EBP=5555 ESI=6666 EDI=7777
AX=4E08 BX=C405 CX=0003 DX=102A SP=6C9D BP=5555 SI=5CF1 DI=7777
DS=C000 ES=BAD0 SS=C000 CS=F000 IP=FE15 NV UP — PL ZR NA PE NC
CS:IP = F4 FS=BAD4 GS=BAD5C536 C000 0244 3000 0000 01B4 AF7F 0200
UNHANDLED INT 10 FUNCTION 0007 WITHIN EMULATION
VM using 1985163 x86 cycles for GFX init
Welcome to SmartFirmware(tm) for bplan Pegasos2
Version 1.2.99 (20060904162246)
SmartFirmware(tm) Copyright 1996-2001 by CodeGen, Inc.
All Rights Reserved.
Pegasos BIOS Extensions Copyright 2001-2005 by bplan GmbH.
All Rights Reserved.
entering main read/eval loop…
======> must first enter the following cmds to move where the eth irq is routed
======> currently there are multiple devices that are generating ints and we do
======> not know who is doing it
ok 54600080 f1000c78 l!
ok a09990 f1000c7c l!
ok 3c680080 f1000c78 l!
ok a01ffff f1000c7c l!
000c78 l!
======> load VOF with a similar command below, depending on your bootsever setup
ok boot eth:192.168.1.10,openfirmware
RRRrhineinit: MAC address is 00:0b:2f:4b:54:20
Device "keyboard" can't be opened for input
Device "screen" can't be opened for output
======> VOF is now loaded
======> Use this simple VOF command that will load a kernel from your
======> bootserver nfsroot proto/root
ok boot net -v
======> but first let's get inetboot from tftpboot
Booting "inetboot" from server 192.168.1.10 (vespa2)
Boot device: /pci@80000000/ethernet@d
Boot args: -v
boot: OpenSolaris on PowerPC Boot Interface.
OpenSolaris on PowerPC from Sun Microsystems Laboratories and the PPC Dev Community Project!
memlistpage = 1860000
scratchnofailmemp = 1871000
scratchmemp = 1871000
Physmem avail:
addr = 0x0:0x111000, size = 0x0:0x3ef000
addr = 0x0:0x55a000, size = 0x0:0xf6a6000
Virtmem avail:
addr = 0x0:0x0, size = 0x0:0x1800000
addr = 0x0:0x184a000, size = 0x0:0x6000
addr = 0x0:0x1871000, size = 0x0:0xfa78f000
Phys installed:
addr = 0x0:0x0, size = 0x0:0x10000000
bootpath: 0x1859600 /pci@80000000/ethernet@d
bootargs: 0x1859700 -v
filename: 0x185e2f0
kernname: 0x1844ae8 /platform/chrp/kernel/unix
boot: bsys_printf is at offset 0x38 instead of 60
boot: this will likely make old kernels die without printing a message.
Physinstalled: addr = 0x0:0x0, size = 0x0:0x10000000
Physfree: addr = 0x0:0x111000, size = 0x0:0x3ef000
addr = 0x0:0x55a000, size = 0x0:0xf6a6000
Virtfree: addr = 0x0:0x0, size = 0x0:0x1800000
addr = 0x0:0x184a000, size = 0x0:0x6000
addr = 0x0:0x1871000, size = 0x0:0xfa78f000
device path '/pci@80000000/ethernet@d'
Now mounting root fs on device /pci@80000000/ethernet@d
Using RARP/BOOTPARAMS…
Internet address is: 192.168.1.11
Internet address (via rarp) is: 192.168.1.11
hostname: polariscl
domainname: sunlabs.sfbay.sun.com
Found 192.168.1.10 @ 0:9:3d:0:13:79
root server: polarisbs (192.168.1.10)
root directory: /bootserv/nfsroot
root fs mounted on device /pci@80000000/ethernet@d
standalone = /platform/chrp/kernel/unix', args = -v'
trying '/platform/chrp/kernel/unix'
Boot file (/platform/chrp/kernel/unix) opened!
fd = 1
calling readelf, elfheader is:
eident 0x7f454c46, 0x1020100, 0x0, 0x0
emachine 0x14
eentry 0xe0001000
eshoff 0x1241c58
eshnentsize 40
eshnum 25
eshstrndx 24
Entry point: e0001000
lseek: args = 1 34 0
Size: Doing header 0x0
phdr
poffset = 34, pvaddr = 0
pmemsz = 0, pfilesz = a0
Doing header 0x1
phdr
poffset = 325400, pvaddr = 0
pmemsz = 0, pfilesz = b
Doing header 0x2
phdr
poffset = e0, pvaddr = e0001000
pmemsz = 3c7e10, pfilesz = 3c7e10
seeking to 0xe0
0x3c7e10+allocating memory: e0001000 3c7e10 0
reading 0x3c7e10 bytes into 0xe0001000
Doing header 0x3
phdr
poffset = 3c7f00, pvaddr = e2000000
pmemsz = bc078, pfilesz = 11fbc
seeking to 0x3c7f00
0x11fbc+allocating memory: e2000000 bc078 0
reading 0x11fbc bytes into 0xe2000000
bss from 0xe2011fbc size 0xaa0bc
0xaa0bc Bytes
Doing header 0x4
phdr
poffset = 3d9798, pvaddr = e2011898
pmemsz = 0, pfilesz = 88
modpath: /platform/chrp/kernel /kernel /usr/kernel
Opened misc/krtld OK
=====> Got KRTLD, let's get rolling
Calling exitto(e03c8e10)
_edata = e20bc2e0
libmacroslen=3
libmacroslen=3
=====> See where you have loaded the kernel
module /platform/chrp/kernel/unix: text at [0xe0001000, 0xe03c8e0f] data at 0xe2000000
module misc/krtld: text at [0xe03c8e10, 0xe03f30eb] data at 0xe20bc078
=====> Here are the first statements from the kernel
Processor Version Reg (PVR) = 80020101 (version=8002, revision=101)
Found Valid CPU: MPC7457
HID0old=0x8410c09c
=8410c09c<TBEN,DPM,ICE,DCE,SGE,LRSTK,FOLD,BHT>
HID0new=0x8410c09c
=8410c09c<TBEN,DPM,ICE,DCE,SGE,LRSTK,FOLD,BHT>
HID0set=0x0
=0
HID0rst=0x0
=0
HID1=0x2c80
=2c80<PC3,SYNCBE,ABE>
L2CR=0
L3CR=0
mlsetup.c:117: mlsetup() starting…
Initialized t0 thread.
mlsetup.c:543: fiximpobp() starting…
promsetcachegeometry: try l2-cache
promsetcachelevel: l2-cache
promsetcachegeometry: try l3-cache
mlsetup.c:557: fiximpobp() done.
mlsetup.c:394: configtimebase() starting…
Calculated decincrpertick = 0x51615 for 10ms tick
Obtained timebase frequency = 33333333 hz
Calculated timebase period = 61440 (30 nsec / tick)
Calculated timebase ticks per 10usec = 333
Error per second under = 20480 = 10 ppb
Error per second over = 33312853 = 16266 ppb
mlsetup.c:425: configtimebase() done.
Loaded decrementer with 0xffff0000
mlsetup.c:303: mlsetup() done.
Running with VOF version 2.0
> ppcmmuinit
< ppcmmuinit
Leaving locore.s … executing main()…
[progress bar init]
startup.c:764: startupinit(): starting…
===> File: chrp/os/startup.c, Line: 765, e001e064 = unix:startupinit+50
startupinit(): starting…
> startupinit
startup.c:768: startupinit(): bootid()
../../chrp/os/startup.c//startupinit//772
======> Here is the PMDB shell, you need to type in what you want
PMDB = Poor Man's DeBugger
Kernel configuration shell:
Commands that affect startup:
ut Run unit test
ch Copy Solaris interrupt handlers
ei Enable Interrupts
ro Protect kernel text pages; set to read-only
kmpage kmemalloc objects of given size whole pages
config Run configure
ttyinit Run ttyinit
demo Run demo, just before init
Commands that enable/disable debug trace messages:
ga Show native PowerPC genassym
td Trap debug
mmufr MMU Flight Recorder
pwatch Panic on any attempt to modify a watched PTE
kmf Set kmemflags = arg[1]
If no args, set to default value
cbe Set cbedebug
Other:
cf Show all configuration (startup and debug)
cfs show startup options
cfd show debug configuration
go exit debugger and continue running Solaris
m0 =
m1 = ch config ei ttyinit go
PMDB configuration:
Startup:
Unit test (ut) : 0
Copy handlers (ch) : 0
Enable Interrupts (ei) : 0
Read-only ktext (ro) : 0
Run configure (config) : 0
Run ttyinit (ttyinit) : 0
Run demo (demo) : 0
Debug:
Trap debug (td) : 0
CBE debug (cbe) : 0
Genassym (ga) : 0
MMU FlightRec(mmufr) : 0
Panic Watch (pwatch) : 0
kmemflags (kmf) : f
pmdb kconf: m1
pmdb kconf: config
pmdb kconf: ch
pmdb kconf: go
> copyhandlers
< copyhandlers
< startupinit
startup.c:791: startupinit() done
startup.c:972: startupmemlist() starting…
phys-installed: 2 elements
phys-avail: 4 elements
virt-avail: 10 elements
MEMLIST: phys-installed:
Address Size
----------------— ----------------—
0x0 0x10000000
MEMLIST: phys-avail:
Address Size
----------------— ----------------—
0x307000 0x1f9000
0x922000 0xf2de000
MEMLIST: virt-avail:
Address Size
----------------— ----------------—
0x0 0x1800000
0x184a000 0x6000
0x1970000 0xde691000
0xe03f4000 0x1c0c000
0xe20cc000 0x19f34000
MEMLIST: bootphysinstalled:
Address Size
----------------— ----------------—
0x0 0x10000000
MEMLIST: bootphysavail:
Address Size
----------------— ----------------—
0x307000 0x1f9000
0x922000 0xf2de000
MEMLIST: bootvirtavail:
Address Size
----------------— ----------------—
0x0 0x1800000
0x184a000 0x6000
0x1970000 0xde691000
0xe03f4000 0x1c0c000
0xe20cc000 0x19f34000
===> File: chrp/os/startup.c, Line: 1062, e001e608 = unix:startupmemlist+100
physmax = 0xffff
===> File: chrp/os/startup.c, Line: 1063, e001e638 = unix:startupmemlist+130
physinstalled = 0x10000
probekernelvof:
stext = e0001000
etext = e03f30ec
sdata = e2000000
edata = e20cba8e
ppcmmuptvof
ppcmmuptswitch:
ptvirt=fdc00000
ptphys=fc00000
ptsize=400000
hashptegmask = ffff
ptes=fdc00000, eptes=fe000000, ptsize=400000
startup.c:1081: > startupbuildmemnodes
platbuildmemnodes: list=196f000
memnodeaddslice: mnode=0, start=0, end=ffff
startup.c:1083: < startupbuildmemnodes
===> File: chrp/os/startup.c, Line: 1100, e001e784 = unix:startupmemlist+27c
savail = 0xe20cc000
===> File: chrp/os/startup.c, Line: 1101, e001e7b4 = unix:startupmemlist+2ac
eavail = 0xe20cc000
===> File: chrp/os/startup.c, Line: 1108, e001e850 = unix:startupmemlist+348
sgap = 0xe20cc000
===> File: chrp/os/startup.c, Line: 1109, e001e880 = unix:startupmemlist+378
egap = 0xe20cc000
===> File: chrp/os/startup.c, Line: 1110, e001e8b0 = unix:startupmemlist+3a8
savail = 0xe20cc000
===> File: chrp/os/startup.c, Line: 1111, e001e8e0 = unix:startupmemlist+3d8
eavail = 0xe20cc000
===> File: chrp/os/startup.c, Line: 1131, e001ea10 = unix:startupmemlist+508
sgap = 0xe20cc000
===> File: chrp/os/startup.c, Line: 1132, e001ea40 = unix:startupmemlist+538
egap = 0xe20cc000
===> File: chrp/os/startup.c, Line: 1133, e001ea70 = unix:startupmemlist+568
savail = 0xe20cc000
===> File: chrp/os/startup.c, Line: 1134, e001eaa0 = unix:startupmemlist+598
eavail = 0xe20cc000
nucleusalloc: startupmemlist() modtext:
remaining space = 0+0, need 6291456
nucleusalloc: startupmemlist() moddata:
remaining space = 0+0, need 6291456
===> File: chrp/os/startup.c, Line: 1270, e001edfc = unix:startupmemlist+8f4
smodtext = 0xe03f5000
===> File: chrp/os/startup.c, Line: 1271, e001ee2c = unix:startupmemlist+924
emodtext = 0xe09f5000
===> File: chrp/os/startup.c, Line: 1272, e001ee5c = unix:startupmemlist+954
smoddata = 0xe20cd000
===> File: chrp/os/startup.c, Line: 1273, e001ee8c = unix:startupmemlist+984
emoddata = 0xe26cd000
===> File: chrp/os/startup.c, Line: 1274, e001eebc = unix:startupmemlist+9b4
econtig = 0xe20cc000
===> File: chrp/os/startup.c, Line: 1275, e001eeec = unix:startupmemlist+9e4
savail = 0xe20cc000
===> File: chrp/os/startup.c, Line: 1276, e001ef1c = unix:startupmemlist+a14
eavail = 0xe20cc000
===> File: chrp/os/startup.c, Line: 1300, e001f014 = unix:startupmemlist+b0c
physmem = 0xffff
===> File: chrp/os/startup.c, Line: 1313, e001f054 = unix:startupmemlist+b4c
memsegsz = 0x104
nucleusalloc: valloctry() memsegbase:
remaining space = 0+0, need 260
===> File: chrp/os/startup.c, Line: 1322, e001f0b8 = unix:startupmemlist+bb0
memlistsz = 0x1000
nucleusalloc: valloctry() memlists:
remaining space = 0+0, need 4096
===> File: chrp/os/startup.c, Line: 1332, e001f170 = unix:startupmemlist+c68
pagehashsz = 0x10000
nucleusalloc: valloctry() pagehash:
remaining space = 0+0, need 65536
===> File: chrp/os/startup.c, Line: 1338, e001f1bc = unix:startupmemlist+cb4
npages = 0xffff
===> File: chrp/os/startup.c, Line: 1340, e001f1fc = unix:startupmemlist+cf4
ppsz = 0x4fffb0
nucleusalloc: valloctry() ppbase:
remaining space = 0+0, need 5242800
pagecoloringinit:
pcsize=262144
pcassoc=8
pccolors=8
PAGECOLORSMIN=16
pagecolors=16
cpupagecolors=8
colorequiv=0
colorequivszc[0] = 16
===> File: chrp/os/startup.c, Line: 1345, e001f280 = unix:startupmemlist+d78
pagecolormemsz = 0x260
===> File: chrp/os/startup.c, Line: 1349, e001f2d4 = unix:startupmemlist+dcc
pagectrssize = 0x298
Init HMEs:
sizeof(hmet) = 20
nptes = 524288
nptegp = 32768
NPTEPERPTEGP = 16
sizeof (ptegpt) = 16
nucleusalloc: valloctry() hments:
remaining space = 0+0, need 10485760
nucleusalloc: valloctry() ptegps:
remaining space = 0+0, need 524288
nucleusalloc: valloctry() ptelockhashtab:
remaining space = 0+0, need 8192
phys-installed: 2 elements
phys-avail: 4 elements
virt-avail: 14 elements
MEMLIST: phys-installed:
Address Size
----------------— ----------------—
0x0 0x10000000
MEMLIST: phys-avail:
Address Size
----------------— ----------------—
0x308000 0x1f8000
0x1522000 0xe6de000
MEMLIST: virt-avail:
Address Size
----------------— ----------------—
0x0 0x1800000
0x184a000 0x6000
0x1971000 0xde690000
0xe03f4000 0x1000
0xe09f5000 0x160b000
0xe20cc000 0x1000
0xe26cd000 0x19933000
MEMLIST: physinstall:
Address Size
----------------— ----------------—
0x0 0x10000000
MEMLIST: physavail:
Address Size
----------------— ----------------—
0x308000 0x1f8000
0x1522000 0xe6de000
MEMLIST: virtavail:
Address Size
----------------— ----------------—
0x0 0x1800000
0x184a000 0x6000
0x1971000 0xde690000
0xe03f4000 0x1000
0xe09f5000 0x160b000
0xe20cc000 0x1000
0xe26cd000 0x19933000
===> File: chrp/os/startup.c, Line: 1365, e001f364 = unix:startupmemlist+e5c
eavail = 0xe20cc000
===> File: chrp/os/startup.c, Line: 1366, e001f394 = unix:startupmemlist+e8c
vallocsz = 0xf96000
===> File: chrp/os/startup.c, Line: 1378, e001f46c = unix:startupmemlist+f64
vallocbase = 0xe26cd000
nucleusalloc: performallocations() vallocbase:
remaining space = 0+0, need 16343040
valloce26cd000 1000=4K
valloce26ce000 1000=4K
valloce26cf000 10000=64K
valloce26df000 500000=5M
valloce2bdf000 1000=4K
valloce2be0000 1000=4K
valloce2be1000 a00000=10M
valloce35e1000 80000=512K
valloce3661000 2000=8K
[0] bzero(e26cd000, 1000)
[1] bzero(e26ce000, 1000)
[2] bzero(e26cf000, 10000)
[3] bzero(e26df000, 500000)
[4] bzero(e2bdf000, 1000)
[5] bzero(e2be0000, 1000)
[6] bzero(e2be1000, a00000)
[7] bzero(e35e1000, 80000)
[8] bzero(e3661000, 2000)
startup.c:1429: Calling kphysminit()…
===> File: chrp/os/startup.c, Line: 2434, e00212ec = unix:kphysminit+f8
minavail = 0x308000
===> File: chrp/os/startup.c, Line: 2437, e002131c = unix:kphysminit+128
ddiphysmin = 0x2
kphysminit/2441: pmem=1970018
kphysminit/2452: addr=308000 size=1f8000
MEMSEG addr=0x308000 pgs=0x1f8 pfn 0x308-0x500, pmem=1970018, pp=e26df000, curmemseg=e26cd000
kphysminit/2535: -> addphysmem(pp=e26df000, num=1f8, basepfn=308)
mtypemodifymax: mnoderangecnt=2
mtypemodifymax: mtype=0, pfn=308, endpfn=500
mtypemodifymax: hipfn=fff, inc=1f8, pfn=500
kphysminit/2537: <- addphysmem
kphysminit/2441: pmem=1970030
kphysminit/2452: addr=1522000 size=e6de000
MEMSEG addr=0x1522000 pgs=0xe6de pfn 0x1522-0xfc00, pmem=1970030, pp=e26e8d80, curmemseg=e26cd014
kphysminit/2535: -> addphysmem(pp=e26e8d80, num=e6de, basepfn=1522)
mtypemodifymax: mnoderangecnt=2
mtypemodifymax: mtype=0, pfn=1522, endpfn=fc00
mtypemodifymax: mtype=1, pfn=1522, endpfn=fc00
mtypemodifymax: hipfn=ffff, inc=e6de, pfn=fc00
kphysminit/2537: <- addphysmem
===> File: chrp/os/startup.c, Line: 2544, e002194c = unix:kphysminit+758
availrmeminitial = 0xe8d6
===> File: chrp/os/startup.c, Line: 2545, e002197c = unix:kphysminit+788
availrmem = 0xe8d6
===> File: chrp/os/startup.c, Line: 2546, e00219ac = unix:kphysminit+7b8
freemem = 0xe8d6
startup.c:1431: kphysminit() done
===> File: chrp/os/startup.c, Line: 1432, e001f5a0 = unix:startupmemlist+1098
npages = 0xe8d6
printsharedpagespt(fdc00000, 80000)
phys
share pages
1 9803
PTE @ fdc9b4c0:
[0] 0x80000f09 = {V=1,VSID=1e,H=0,API=9} va=e26cd000
[1] 0x1522190 = {RPN=1522,R=1,C=1,WIMG=2=—m-,PP=0=SrwUxx}
===> File: chrp/os/startup.c, Line: 1458, e001f5e8 = unix:startupmemlist+10e0
vallocbase = 0xe26cd000
===> File: chrp/os/startup.c, Line: 1459, e001f618 = unix:startupmemlist+1110
vallocsz = 0xf96000
startup.c:1471: startupmemlist() done
startup.c:1532: > startupkmem
===> File: chrp/os/startup.c, Line: 1536, e001f974 = unix:startupkmem+70
heapbase = 0xe3692000
===> File: chrp/os/startup.c, Line: 1544, e001f9ec = unix:startupkmem+e8
bootkernelheap = 0xe36d2000
===> File: chrp/os/startup.c, Line: 1553, e001fa60 = unix:startupkmem+15c
kernelheap = 0xe36d2000
===> File: chrp/os/startup.c, Line: 1554, e001fa90 = unix:startupkmem+18c
ekernelheap = 0xeb6d2000
startup.c:1562: > kmeminit
SunOS Release 5.11 Version polaris-trunk 32-bit
Copyright 1983-2007 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
DEBUG enabled
startup.c:1564: < kmeminit
startup.c:1594: > bpinit
startup.c:1596: < bpinit
startup.c:1598: < startupkmem
startup.c:1610: startupmodules() starting…
startup.c:1619: paramcalc
startup.c:1622: modsetup
/-\startup.c:1628: paraminit
startup.c:1639: hatinit
===> ../../ppc/vm/hatppcmmu.c, line 403, hatinit/ppcmmulockinit
===> ../../ppc/vm/hatppcmmu.c, line 406, hatinit/ppcmmuinit2
startup.c:1645: seginit
seginit
segpinit
- semainit phashtab = 0
physmem = 65535
- segpinitmem_config()
segpinitmem_config
< segpinitmemconfig
< segpinit
< seginit
startup.c:1648: modload specfs
startup.c:1652: modload devfs
startup.c:1656: dispinit
Trying setupddi()
- > setupddiUsing default device instance data
- > implddicallbackinit<- implddicallbackinit
- > logeventinit<- logeventinit
- > fminit<- fminit
- > iddiloaddrvconf<- iddiloaddrvconf
- > ldiinit<- ldiinit
- > iddidevicesinit<- iddidevicesinit
- > iddireaddevicesfiles
<- iddireaddevicesfiles
<- setupddi
Finished setupddi()
Loading root modules
Finished loading root modules
Skipping cmiinit() — but that is OK.
startup.c:1712: startupmodules() done
startup.c:1809: startupvm() starting…
===> File: chrp/os/startup.c, Line: 1897, e002032c = unix:startupvm+50
segmapstart = 0xe3692000
===> File: chrp/os/startup.c, Line: 1898, e002035c = unix:startupvm+80
segmapreserved = 0x40000
===> File: chrp/os/startup.c, Line: 1899, e002038c = unix:startupvm+b0
segmapsize = 0x40000
===> File: chrp/os/startup.c, Line: 1934, e0020450 = unix:startupvm+174
segmapstart = 0xe3694000
===> File: chrp/os/startup.c, Line: 1935, e0020480 = unix:startupvm+1a4
segmapsize = 0x3e000
===> File: chrp/os/startup.c, Line: 1937, e00204d8 = unix:startupvm+1fc
finalkernelheap = 0xe36d2000
startup.c:1944: Calling hatkernalloc()…
startup.c:1946: hatkernalloc() done
startup.c:1956: Protecting boot pages
===> File: chrp/os/startup.c, Line: 1798, e0020298 = unix:protectbootrange+268
bootprotectcnt = 0xb
startup.c:1975: Calling hatkernsetup()…
startup.c:1977: hatkernsetup() done
startup.c:1982: Disabling BOPALLOC
setcallback: old 0x0 new 0xe00ab504
Skipping hatcpuonline(CPU)
startup.c:1996: Calling kvminit()…
attach(kas, start=e0001000, size=9f4000, ktextseg)<- segattach
** NOTE: Ensure smoddata..emoddata is in kas.
> segkmemcreate(ktextseg)<- segkmemcreate
> segattach(kas, start=e26cd000, size=f96000, kvalloc)<- segattach
> segkmemcreate(kvalloc)<- segkmemcreate
> segattach(finalkernelheap, …)
<- segattach
===> File: chrp/os/startup.c, Line: 2680, e0021bec = unix:kvminit+1f0
kvseg.sbase = 0xe36d2000
<- segkmemcreate
===> File: chrp/os/startup.c, Line: 2684, e0021c40 = unix:kvminit+244
kvseg.sbase = 0xe36d2000
startup.c:1998: kvminit() done
===> File: chrp/os/startup.c, Line: 2011, e002078c = unix:startupvm+4b0
finalkernelheap = 0xe36d2000
===> File: chrp/os/startup.c, Line: 2065, e0020808 = unix:startupvm+52c
toxicbitmaplen = 0x7e00
===> File: chrp/os/startup.c, Line: 2069, e0020888 = unix:startupvm+5ac
toxicbitmap = 0xe3ecc000
mem = 262144K (0x10000000)
Skipping hatinitfinish()
startup.c:2149: segkpcreate(segkp)
segkpcreate: segkpbitmap=e3eca000, kpsd->kpsdarena=e3d4a690
segkpcreate: kmemzalloc
segkpcreate: -> segkpinitmemconfig
segkpcreate: <- segkpinitmemconfig
===> File: chrp/os/startup.c, Line: 2156, e0020a34 = unix:startup_vm+758
segkp = 0xe206deb8
Virtual address address map:
name start size end
virt 0 100000000 100000000
name start size end
user 0 e0000000 e0000000
kmem e0000000 10000000 f0000000
name start size end
ktext e0000000 3f4000 e03f4000
e03f4000 1000 e03f5000
modtext e03f5000 600000 e09f5000
e09f5000 160b000 e2000000
kdata e2000000 cc000 e20cc000
e20cc000 601000 e26cd000
valloc e26cd000 f96000 e3663000
e3663000 d000 e3670000
iomem e3670000 20000 e3690000
e3690000 4000 e3694000
kmap e3694000 3e000 e36d2000
heap e36d2000 7e00000 eb4d2000
gap eb4d2000 4b2e000 f0000000
prom f0000000 f800000 ff800000
dbug ff800000 400000 ffc00000
gap ffc00000 400000 100000000
===> File: chrp/os/startup.c, Line: 2187, e0020b50 = unix:startupvm+874
segmap = 0xe206e7d4
===> File: chrp/os/startup.c, Line: 2188, e0020b80 = unix:startupvm+8a4
segmapstart = 0xe3694000
===> File: chrp/os/startup.c, Line: 2189, e0020bb0 = unix:startupvm+8d4
segmapsize = 0x3e000
===> File: chrp/os/startup.c, Line: 2190, e0020be0 = unix:startupvm+904
segmap->sbase = 0xe3694000
===> File: chrp/os/startup.c, Line: 2191, e0020c10 = unix:startupvm+934
segmap->ssize = 0x3e000
startup.c:2208: Initialize segmapcrargs a
startup.c:2213: -> segmapcreate
startup.c:2216: <- segmapcreate
Skipping { setupvaddrforppcopy(CPU); }
Skipping segdevinit()
Kernel address space:
start = e0001000, size = 9f4000
start = e26cd000, size = f96000
start = e3694000, size = 3e000
start = e36d2000, size = 7e00000
start = ff800000, size = 400000
startup.c:2234: startupvm() done
startup.c:2265: startupend() starting…
iomemmap: PCI ISA:
virt=e3670000, phys=fe000000, size=10000
PTE @ fdcd9b80:
[0] 0x80000f0d = {V=1,VSID=1e,H=0,API=d} va=e3670000
[1] 0xfe000038 = {RPN=fe000,R=0,C=0,WIMG=7=-img,PP=0=SrwUxx}
iomemmap: Discovery 2 internal:
virt=e3680000, phys=f1000000, size=10000
PTE @ fdcda780:
[0] 0x80000f0d = {V=1,VSID=1e,H=0,API=d} va=e3680000
[1] 0xf1000038 = {RPN=f1000,R=0,C=0,WIMG=7=-img,PP=0=SrwUxx}
cpuintralloc: cp->cpuintrstack 0xe461bff0
startup.c:2308: Enabling interrupts
printsharedpagespt(fdc00000, 80000)
phys
share pages
1 13570
startup.c:2355: Calling configure()…
configure entered
configure: returned from checkdriverdisable()
implddisunbusnamechild() returned ""
implddisunbusinitchild: returned from ddisetnameaddr
root nexus = ODW,board
implddisunbusnamechild() returned ""
implddisunbusinitchild: returned from ddisetnameaddr
implddisunbusnamechild() returned ""
implddisunbusinitchild: returned from ddisetnameaddr
implddisunbusnamechild() returned ""
implddisunbusinitchild: returned from ddisetnameaddr
pseudo0 at root
pseudo0 is /pseudo
configure: returned from iddiinitroot()
configure: returned from implbusreprobe()
startup.c:2357: configure() done
machsoftlvltovect: ipl=1, psmsetsoftint=0x0
hatinituserland: vsidr=1
startup.c:2373: startupend() done
[progress bar start]
mach
softlvltovect: ipl=10, psmsetsoftint=0x0
machsoftlvltovect: ipl=2, psmsetsoftint=0x0
clkstart: loaded decrementer with 0x51615.
Leaving cbeinit:
lgrpplatprobe: maxmemnodes=1, topolimit=4
cpuid.c -> cpuidgetchipid: cpuid is not being read for PPC.
cpuid.c -> cpuidgetcoreid: cpicoreid is not being read for PPC.
main: about to do spl0()
main: about to do vfsmountroot()
vfsmountroot: about to call rootconf()
pseudo-device: dld0
dld0 is /pseudo/dld@0
implsunbusnamechild: hack – NEEDSWORK!
implddisunbusnamechild() returned "c0000000"
implddisunbusinitchild: returned from ddisetnameaddr
implsunbusnamechild: hack – NEEDSWORK!
implddisunbusnamechild() returned "80000000"
implddisunbusinitchild: returned from ddisetnameaddr
pci1 at root: space 80000000 offset 40000000
todset: not yet implemented!!!
WARNING: Time-of-day chip unresponsive; dead batteries?
Requesting Internet address for 0:b:2f:4b:54:20
Found my IP address: c0a8010b (192.168.1.11)
hostname: polariscl
domainname: sunlabs.sfbay.sun.com
todset: not yet implemented!!!
root on polarisbs:/bootserv/nfsroot fstype nfsdyn
WARNING: Cannot find /system/contract
WARNING: Cannot mount /proc
WARNING: Cannot find /etc/mnttab
WARNING: Cannot find /system/object
main: about to do errorqinit()
machsoftlvltovect: ipl=2, psmsetsoftint=0x0
main: about to do cpukstatinit()
main: about to do ddiwalkdevs()
main: about to do poststartup()
startup.c:2375: poststartup() starting…
startup.c:2377: poststartup() done
main: just before consconfig()
stdin path = /pci@80000000/isa@c/serial@i2f8
stdout path = /pci@80000000/isa@c/serial@i2f8
conskbdlh = e49f71b0
consmslh = e49f70f0
iconsconfigcreatevp: /pseudo/wc@0:wscons
lookupname(/devices/pseudo/wc@0:wscons)
create vnode = 0xe4dab940 – dev 0x3c0000
linking stream under wc
iconsconfigcreatevp: /pseudo/iwscn@0:iwscn
lookupname(/devices/pseudo/iwscn@0:iwscn)
create vnode = 0xe4dab640 – dev 0x380000
PCI-device: isa0
machsoftlvltovect: ipl=4, psmsetsoftint=0x0
ISA-device: asy0
asy0 is /pci@80000000/isa@c/serial@i2f8
stdindev 1a80000, stdoutdev 1a80000, kbddev ffffffff, mousedev ffffffff
console input is tty (/pci@80000000/isa@c/serial@i2f8)
iconsconfigcreatevp: /pci@80000000/isa@c/serial@i2f8
lookupname(/devices/pci@80000000/isa@c/serial@i2f8:b)
create vnode = 0xe4d9be40 – dev 0x1a80000
consconfigkbdabortenable
consconfigsetuppolledio: start
consconfigsetuppolledio: registering callbacks
consconfigsetuppolledio: end
mousedev ffffffff, kbddev ffffffff, fbdev ffffffff, rconsdev 1a80000
main: just before iddiforceattach_drivers()
main: just before setupclock()()
startinit
startinit_common
ppcmmualloc: > vmemalloc
ppcmmualloc: < vmemalloc
startinitcommon -> hat_setup
ppcmmusetup: not kernel hat
ppcmmusetup: > mmusegload
ppcmmusetup: < mmusegload
< startinitcommon -> hatsetup
init_core
< init_core
init_mstate
< init_mstate
exec_init(/sbin/init, 0xe200c200)
execinit: argvlen=12
execinit: p=e4ec1408
execinit: p->pusrstack=dffff000
tcopyops == NULL
asfault: seg->sops->fault = e0204ff4 = unix:segvnfault+0
gexec: magic = { 7f 45 4c 46 01 02 01 00 }
elfexec
elfexec: level = 0
elfexec -> getelfhead
< elfexec -> getelfhead
elfexec -> getelfphdr
< elfexec -> getelfphdr
execargs: size = 4096
hatunloadcallback: vaddr=dfffd000, len=2000
hatunloadcallback: cb = NULL
ppcmmualloc: > vmemalloc
ppcmmualloc: < vmemalloc
ppcmmusetup: not kernel hat
ppcmmusetup: > mmusegload
ppcmmusetup: < mmusegload
execargs -> stkcopyout
-> grow
-> growinternal: sp=dfffefc0, growszc=0
<- growinternal: newsize=1000
asfault: seg->sops->fault = e0204ff4 = unix:segvnfault+0
<- grow
< execargs -> stkcopyout
asfault: seg->sops->fault = e0204ff4 = unix:segvnfault+0
< elfexec
exec_init — rc=0
Hello, world! <- This is what we have been waiting for!!!
WARNING: init(1M) exited with status 0: restarting automatically
restartinit: restarting /sbin/init
execinit: argvlen=8
execinit: p=e4ec1408
execinit: p->pusrstack=dffff000
tcopyops == NULL
gexec: magic = { 7f 45 4c 46 01 02 01 00 }
elfexec
elfexec: level = 0
elfexec -> getelfhead
< elfexec -> getelfhead
elfexec -> getelfphdr
< elfexec -> getelfphdr
execargs: size = 4096
hatunloadcallback: vaddr=2000000, len=1000
hatunloadcallback: cb->hcbfunction = e01fab64
hatunloadcallback: vaddr=dfffe000, len=1000
hatunloadcallback: cb = NULL
ppcmmualloc: > vmemalloc
ppcmmualloc: < vmemalloc
ppcmmusetup: not kernel hat
ppcmmusetup: > mmusegload
ppcmmusetup: < mmu_segload
execargs -> stkcopyout
-> grow
-> growinternal: sp=dfffefd0, growszc=0
<- growinternal: newsize=1000
asfault: seg->sops->fault = e0204ff4 = unix:segvnfault+0
<- grow
< execargs -> stkcopyout
asfault: seg->sops->fault = e0204ff4 = unix:segvnfault+0
< elfexec
Hello, world!
WARNING: init(1M) exited with status 0: restarting automatically
restartinit: restarting /sbin/init
execinit: argvlen=8
execinit: p=e4ec1408
execinit: p->pusrstack=dffff000
tcopyops == NULL
gexec: magic = { 7f 45 4c 46 01 02 01 00 }
Here are the loaded modules
id text-va text-sz name file-name flags
0 e0001000 3c8a30 unix /platform/chrp/kernel/unix
1 e03c9a30 2a2dc krtld misc/krtld
2 0 0 clbootstrap misc/clbootstrap
3 e03f5000 8c1c specfs fs/specfs
4 0 0 dtrace dtrace
5 e03fdc1c 918c devfs fs/devfs
6 e0406da8 6294 TS sched/TS
7 e040d03c 16c TSDPTBL sched/TSDPTBL
8 e040d1a8 22a4 swapgeneric misc/swapgeneric
9 e040f44c c96e8 nfs fs/nfs
10 e04d8b34 28bd0 rpcmod strmod/rpcmod
11 e0501704 2d44 tlimod misc/tlimod
12 e0504448 8b2c rpcsec misc/rpcsec
13 e050cf74 135c4 vfe drv/vfe
14 e0520538 4c8c mac misc/mac
15 e05251c4 209f00 ip drv/ip
16 e072f0c4 4de4 md5 misc/md5
17 e0733ea8 2e29c kcf misc/kcf
18 e0762144 1e44 swrand crypto/swrand
19 e0763f88 208c hook misc/hook
20 e0766014 160c neti misc/neti
21 e0767620 3c7c pci drv/pci
22 e076b29c 889c rootnex drv/rootnex
23 e0773b38 75fc nfsdlboot misc/nfsdlboot
24 e077b134 3234 strplumb misc/strplumb
25 e077e368 90c macether mac/macether
26 e077ec74 a4d4 dld drv/dld
27 e0789148 8154 dls misc/dls
28 e079129c 434 ip6 drv/ip6
29 e07916d0 44c tcp drv/tcp
30 e0791b1c 45c tcp6 drv/tcp6
31 e0791f78 4a4 udp drv/udp
32 e079241c 454 udp6 drv/udp6
33 e0792870 42c sctp drv/sctp
34 e0792c9c 434 sctp6 drv/sctp6
35 e07930d0 d530 icmp drv/icmp
36 e07a0600 44c icmp6 drv/icmp6
37 e07a0a4c a0cc arp drv/arp
38 e07aab18 6cec timod strmod/timod
39 e07b1804 234 options drv/options
40 e07b1a38 f94 pseudo drv/pseudo
41 e07b29cc 89c clone drv/clone
42 e07b3268 1734 sad drv/sad
43 e07b499c 18e84 dev fs/dev
44 e07cd820 4004 ctfs fs/ctfs
45 0 0 procfs fs/procfs
46 e07d1824 b4e4 tmpfs fs/tmpfs
47 e07dcd08 2a4c objfs fs/objfs
48 e07df754 1e4 consconfig misc/consconfig
49 e07df938 481c consconfigdacf dacf/consconfigdacf
50 e07e4154 410c conskbd drv/conskbd
51 e07e8260 55cc kbtrans misc/kbtrans
52 e07ed82c 24e4 consms drv/consms
53 e07efd10 213c wc drv/wc
54 e07f1e4c 68c4 tem misc/tem
55 e07f8710 129c iwscn drv/iwscn
56 e07f99ac 3234 isa drv/isa
57 e07fcbe0 3434 busra misc/busra
58 e0800014 b914 asy drv/asy
59 e080b928 c924 kssl drv/kssl
60 e081824c 67b4 elfexec exec/elfexec
61 e081ea00 b64 cn drv/cn