Sponsored By
Efika 5200B Project
Embedded Solaris

in category Operating Systems
proposed by noah.yan on 12th February 2006 (accepted on 20th March 2006)
Project Summary
There have been a number of Embedded linux distribution for various devices, but seems no available solaris distribution for them. This project is to invesitigate the issues of creating an embedded Solaris port based on the comming OpenSolaris PPC port (Polaris) and identifies the major issues of such porting. To create an embedded Solaris is a big effort, while we do not expect to create a product one in this project, but an alpha version that address major issues should be posibble. At least, this project should serve as the starting point of the similar efforts. Based on the project progress, we may request more resources from both Genesis, Freescale, IBM and Sun Solaris team in order to create a production one.

EFIKA is a great test board for this purpose and I am currently working in the Polaris project. So it is the best time to investigate the posssiblities of creating an embedded Solaris while porting Solaris to PPC. Another advantage of using EFIKA is that the default platform for Polaris porting is ODW which has the same OF/HAL as EFIKA.

Typicall issues need to be addressed in order to port a general-purpose OS to an embedded kernel include: how to minimize the memory footprint by removing unnecessnary code (e.g., the MP support if for a UP device) and data structures for embedded devices, the energy issues of the OS for battery-powered devices, and other issues, such as real-timeness and graphics support.

The acquired EFIKA board will be used and tested in Poalris porting in order to investigate which parts of Polaris should be considered for porting Soalris as an embedded os. When Polaris boots up, the plan to create the embedded Soalris could be:
1. Minimize the memory footprint of current solaris kernel by removing the unnecessnary code and data structures.
2. Investigate the energy issues of Solaris for battery-powered devices.
3. Other issues, such as real-timeness

Thanks for your support!
Noah Yan

Project Blog Entries

  The ice-age boot-up of Solaris on EFIKA
posted by noah.yan on 24th January 2007


Continue on the last blog, the Solaris PowerPC kernel boot-up on EFIKA, both as usual and unusual, on Dec 4th 2006.

As usual, which we expect due to the facts that the ODW and EFIKA use the same firmware, and it is industry standard (IEEE1275) used widely in Sun SPARC systems and Apple PowerPC systems. It is a very nice solution to provide binary compabilities for different hardware configuration. As ODW is the target machine for Solaris PowerPC development, we are not surprising at all to see the kernel bootup without problem.

As unusual, even with the same firmware in EFIKA as in ODW, there are differences in hardware, which means the firmware implementation is not the same on these two board, even they all both have the standard interfaces. Yet the differences are well addressed by the firmwares and they are transparent to the kernel. An os kernel (or a kernel loader) that is developed on top of it is BINARY portable. Please note, it is not just portable in source level or just application binary compatible.

Here is the boot log from serial port:

[07:25 PM] :~$ date
Mon Dec 4 19:25:30 CST 2006
[07:25 PM] :~$ tip -115200 /dev/ttya
connected
EFIKA 5K2 Boot Strap [RELEASE BUILD] (c) 2002-2006 bplan GmbH (BUILD 20061101134
833)
Running on CPU PVR: 0x80822014
Running on system SVR: 0x80110022
BIOS Code position: 0xFFF040D0
Setup System Config... Done.
Setup Memory Config... Done.
Setup PCI... Done.
Setup ATA... Done.
Setup USB... Done.
Setup ETH... Done.
Testing 08000000 Bytes, Pass: 00000000 Failed: 00000000
RAM TEST (fill random)... Done.
cpu0: PowerPC,G2 CPUClock 396 Mhz BUSClock 132 Mhz (Version 0x8082,0x2014)
Welcome to SmartFirmware(tm) for bplan EFIKA5K2
Version 1.3 (20061107101950)
SmartFirmware(tm) Copyright 1996-2001 by CodeGen, Inc.
All Rights Reserved.
Pegasos BIOS Extensions Copyright 2001-2006 by bplan GmbH.
All Rights Reserved.
ok ls
openprom
aliases
options
packages
chosen
memory@0
cpus
rtas
failsafe
builtin@F0000000
pci@80000000
ok printenv
Variable Value (Default Value)
------------------------------------------------------------------------------
ac-back-behaviour on ()
security-password ********
security-#badlogins ()
security-mode ()
fcode-debug? false (false)
load-base 0x00400000 (0x00400000)
virt-size -1 (-1)
virt-base -1 (-1)
real-size 0x00400000 (0x00400000)
real-base 0x00000000 (0x00000000)
real-mode? true (true)
little-endian? false (false)
inverse-video? false (false)
oem-banner This space for rent. (This space for rent.)
oem-banner? false (false)
oem-logo? false (false)
screen-#rows 24 (24)
screen-#columns 80 (80)
output-device screen (screen)
input-device keyboard (keyboard)
use-nvramrc? true (true)
nvramrc
1: devalias eth /builtin/ethernet
2: probe-all install-console banner
client-ip ()
server-ip ()
secondary-diag? false (false)
use-argv[0]? false (false)
usb-enable? true (true)
fb-mode 0x0x0 (0x0x0)
diag-switch? false (false)
diag-file diag (diag)
diag-device eth (eth)
boot-protocol dhcp (dhcp)
boot-device eth (eth)
boot-file os_image (os_image)
boot-command boot (boot)
auto-boot-timeout 5000 (5000)
auto-boot? false (false)
ok setenv client-ip 192.168.1.15
client-ip = 192.168.1.15
ok setenv server-ip 192.168.1.13
server-ip = 192.168.1.13

ok printenv
Variable Value (Default Value)
------------------------------------------------------------------------------
ac-back-behaviour on ()
security-password ********
security-#badlogins ()
security-mode ()
fcode-debug? false (false)
load-base 0x00400000 (0x00400000)
virt-size -1 (-1)
virt-base -1 (-1)
real-size 0x00400000 (0x00400000)
real-base 0x00000000 (0x00000000)
real-mode? true (true)
little-endian? false (false)
inverse-video? false (false)
oem-banner This space for rent. (This space for rent.)
oem-banner? false (false)
oem-logo? false (false)
screen-#rows 24 (24)
screen-#columns 80 (80)
output-device screen (screen)
input-device keyboard (keyboard)
use-nvramrc? true (true)
nvramrc
1: devalias eth /builtin/ethernet
2: probe-all install-console banner
client-ip 192.168.1.15 ()
server-ip 192.168.1.13 ()
secondary-diag? false (false)
use-argv[0]? false (false)
usb-enable? true (true)
fb-mode 0x0x0 (0x0x0)
diag-switch? false (false)
diag-file diag (diag)
diag-device eth (eth)
boot-protocol dhcp (dhcp)
boot-device eth (eth)
boot-file os_image (os_image)
boot-command boot (boot)
auto-boot-timeout 5000 (5000)
auto-boot? false (false)
ok boot eth:192.168.1.13,inetboot
RR
boot: OpenSolaris on PowerPC Boot Interface.
OpenSolaris on PowerPC from Sun Labs and the Blastwave Community!

memlistpage = 186a000
scratchmemp = 186b000
Physmem avail:
addr = 0x0:0x1801000, size = 0x0:0x67ff000
Virtmem avail:
addr = 0x0:0x0, size = 0x0:0x8000000
Phys installed:
addr = 0x0:0x0, size = 0x0:0x8000000
bootpath: 0x1863800 /builtin@F0000000/ethernet@F0003000:192.168.1.13,inetboot
bootargs: 0x1863900 -v
filename: 0x1868938
kernname: 0x18448d0 ppc/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:0x8000000

Physfree: addr = 0x0:0x1801000, size = 0x0:0x67ff000

Virtfree: addr = 0x0:0x0, size = 0x0:0x8000000
device path '/builtin@F0000000/ethernet@F0003000:192.168.1.13,inetboot'
client path '/builtin@F0000000/ethernet@F0003000'
Now mounting root fs on device /builtin@F0000000/ethernet@F0003000:192.168.1.13,
Using RARP/BOOTPARAMS...
Internet address is: 192.168.1.15
Internet address (via rarp) is: 192.168.1.15
hostname: efika.yan.hom
domainname: yan.hom
Found 192.168.1.13 @ 0:16:41:17:97:2c
root server: (192.168.1.13)
root directory: /export/home/yanyh/bootbase/nfsroot
root fs mounted on device /builtin@F0000000/ethernet@F0003000:192.168.1.13,inetboot
standalone = `ppc/unix', args = `-v'
boot: cannot open ppc/unix
Enter filename [ppc/unix]: /platform/ppc/kernel/unix
trying '/platform/ppc/kernel/unix'
Boot file (/platform/ppc/kernel/unix) opened!
fd = 1
calling readelf, elfheader is:
e_ident 0x7f454c46, 0x1020100, 0x0, 0x0
e_machine 0x14
e_entry 0x22a9010
e_shoff 0x355578
e_shnentsize 40
e_shnum 10
e_shstrndx 9
Entry point: 22a9010
lseek: args = 1 34 0
Size: Doing header 0x0
phdr
p_offset = 10000, p_vaddr = 2000000
p_memsz = ba6304, p_filesz = 3410c0
seeking to 0x10000
0x3410c0+allocating memory: 2000000 ba6304 0
reading 0x3410c0 bytes into 0x2000000
\
  Busy coding and lazy blogging -- the boot-up
posted by noah.yan on 24th January 2007


Sorry for so late to update the progress. This blog is a little bit of summary and history before I go to the technical details of the cute EFIKA with Solaris.

Genesi has been supporting me in OpenSolaris PowerPC port from the beginning of the project and offered me an Open Desktop Workstation for this port when I was doing internship in Sun Lab of Pulsar project and later for this project. We are familiar already of my work and their machines before the EFIKA age.

The EFIKA was shipped to me on Dec 4th 2006 and within a hour, I wired up, set up the boot server and the EFIKA just boot up smoothly, as usual and unusual ... ...
Genesi Network: Genesi - Main Site Power2People PowerDeveloper