Building FreeBSD World

From PS3 Developer wiki
Jump to navigation Jump to search


Introduction[edit | edit source]

  • You can either cross-compile the FreeBSD world on your PC FreeBSD or compile it natively on PS3.
  • Unfortunately, you can not change monitor resolution on PS3 FreeBSD dynamically yet. That means, you have to patch the loader and kernel syscon driver for your monitor resolution.

Fetching Source Code[edit | edit source]

svn co svn://svn.freebsd.org/base/releng/9.1 /usr/devel

Or use the head branch (very unstable):

svn co svn://svn.freebsd.org/base/head /usr/devel

Kernel Patches[edit | edit source]

Building World[edit | edit source]

cd /usr/devel

# First apply patches if you want

# Update LV1 calls

cd /usr/devel/sys/powerpc/ps3
awk -f ps3-hv-asm.awk < ps3-hvcall.master > ps3-hvcall.S
awk -f ps3-hv-header.awk < ps3-hvcall.master > ps3-hvcall.h

cd /usr/devel/sys/powerpc/conf
mkdir /root/kernels
cp GENERIC64 /root/kernels/PS3
ln -s /root/kernels/PS3
cd ../../..

env MAKEOBJDIRPREFIX=/usr/obj/PS3 make buildworld buildkernel installkernel installworld distribution \
	TARGET=powerpc TARGET_ARCH=powerpc64 KERNCONF=PS3 DESTDIR=/root/PS3

cd /root/PS3
tar cvJf ../freebsd_world.tar.xz .

Rebuilding Loader[edit | edit source]

  • If you make changes to loader source then you don't have to rebuild the whole world again. You can recompile the loader only.
cd /usr/devel
env MAKEOBJDIRPREFIX=/usr/obj/PS3 make TARGET=powerpc TARGET_ARCH=powerpc64 buildenv
cd sys/boot
make all install DESTDIR=/root/PS3

Rebuilding Kernel[edit | edit source]

  • If you change your kernel configuration or make changes to kernel source then you don't have to rebuild the whole world again. You can recompile the kernel only.
cd /usr/devel
env MAKEOBJDIRPREFIX=/usr/obj/PS3 make buildkernel installkernel \
	TARGET=powerpc TARGET_ARCH=powerpc64 KERNCONF=PS3 DESTDIR=/root/PS3

Installing World on PS3 HDD[edit | edit source]

  • Use a PS3 FreeBSD LiveCD

Creating New Filesystem[edit | edit source]

newfs -U /dev/ps3disk3p3

Extracting World[edit | edit source]

  • Store your FreeBSD world on a USB drive.
mkdir /tmp/usb
mkdir /tmp/ufs

mount -t msdosfs /dev/da0s1 /tmp/usb
mount -t ufs /dev/ps3disk3p3 /tmp/ufs

cd /tmp/ufs
tar xvJf /tmp/usb/freebsd_world.tar.xz

/etc/fstab[edit | edit source]

/dev/ps3disk3p3         /       ufs     rw      1 1
/dev/ps3disk3p1         none    swap    sw      0 0
proc                    /proc   procfs  rw      0 0

/etc/rc.conf[edit | edit source]

hostname="freebsd"

ifconfig_glc0="SYNCDHCP"

sshd_enable="YES"

keyrate="fast"
keymap="us.iso"
#keymap="fr.iso"
#keymap="german.iso"
scrnmap="NO"
font8x16="iso15-8x16"
font8x14="iso15-8x14"
font8x8="iso15-8x8"

/etc/kboot.conf[edit | edit source]

  • My latest petitboot supports mounting UFS2 filesystems. In this case petitboot will add the FreeBSD boot entry automatically. With old petitboot image you have to mount UFS2 filesystem manually and kexec the file loader.ps3
freebsd=/boot/loader.ps3