FreeBSD

From Openmoko

(Difference between revisions)
Jump to: navigation, search
(header sizes)
(Next steps: There is a UART driver in p4 but were missing others)
Line 54: Line 54:
  
 
== Next steps ==
 
== Next steps ==
Implement console driver over uart.
+
* Drivers:
 +
** LCD
 +
** MMC
 +
** USB
  
 
== Using a Kernel Testimage ==
 
== Using a Kernel Testimage ==

Revision as of 01:43, 10 November 2007

Interested in using FreeBSD on the Neo1973 or as a Host OS? Get in touch with mn -at- bsdgroup.de and andrew -at- fubar.geek.nz, they are currently exploring what to do about this.


Contents

Running FreeBSD in Qemu-neo1973

A FreeBSD port is only ready for kernel developers.

Required tools

You will need mkimage from u-boot. It's available in Ports under devel/u-boot.

You will also need Qemu-neo1973. Hints on building it are avaliable from this page.

Building FreeBSD

You will need to download http://fubar.geek.nz/files/freebsd/neo1973/neo1973-0.20070930.tar.bz2 and extract it over the FreeBSD src tree. Warning: It replaces sys/arm/arm/locore.S with its own version.

From the FreeBSD src tree run:


make buildworld TARGET=arm TARGET_ARCH=arm TARGET_CPUTYPE=arm920t
make buildkernel TARGET=arm TARGET_ARCH=arm TARGET_CPUTYPE=arm920t KERNCONF=NEO1973
/path/to/mkimage -A arm -O freebsd -T kernel -C none -a 30008000 -e 30008110 -n "Kernel Image" -d /usr/obj/path/to/kernel /usr/obj/same/path/kernel.boot

You will now have a copy of FreeBSD that is able to be loaded by u-boot.

Running FreeBSD

From the qemu directory edit the openmoko/flash.sh and add the line


kernel_image="/usr/obj/path/to/kernel.boot"

after the four "most_recent" lines.

Next run


./openmoko/download.sh
./openmoko/flash.sh

This will fetch the required parts and create an image to run. They require you to have bash installed.

Finally run qemu with


arm-softmmu/qemu-system-arm -M neo -m 130 -mtdblock openmoko/openmoko-flash.image -kernel openmoko/openmoko-kernel.bin -usb -show-cursor

It will display "Kernel loading..." with no further messages.

You can append

-serial telnet:localhost:1200,server

to the qemu startup line to start a telnet server which represents the serial console, just

telnet localhost 1200

and qemu will go on with the startup process.

Useful pages

GTA02 Openness

Next steps

  • Drivers:
    • LCD
    • MMC
    • USB

Using a Kernel Testimage

Another method of getting the kernel into the neo is to use an image for the emulated sd card. I already have a file called sd.img ( dd'ed from a 32mb usb stick).

cp /usr/obj/arm/usr/src/sys/NEO1973/kernel .
/usr/obj/arm/usr/src/tmp/usr/bin/objcopy -O binary kernel
sudo mdconfig -a -t vnode -f sd.img
sudo mount_msdosfs /dev/md0s1 /mnt/tmp
sudo cp kernel /mnt/tmp/
sudo umount /mnt/tmp
sudo mdconfig -d -u 0
arm-softmmu/qemu-system-arm -M neo -m 130 -mtdblock openmoko/openmoko-flash.image -kernel openmoko/openmoko-kernel.bin -sd sd.img -usb -show-cursor -serial telnet:localhost:1200,server

In another terminal:

telnet localhost 1200
mmcinit
fatload mmc 0 0x30008000 kernel
go 0x30008000

And wait for the crash :)

Kernel Constants

  • KERNVIRTADDR is the virtual address at which the kernel is loaded (and linked) (0xc0008000)
  • KERNPHYSADDR is the physical address at which the kernel is loaded (0x30008000)
  • PHYSADDR is the physical address of the RAM (0x30000000)
  • KERNBASE is the virtual address of the beginning of the kernel virtual address space (0xc0000000)
  • STARTUP_PAGETABLE_ADDR is a physical address, suitable for the very early pagetable we build in locore.S (0x30800000)
  • FLASHADDR is the address of the flash, virtual or physical depending on what the loader does (??)
  • LOADERRAMADDR the address at which the loader maps the RAM if we're running with the MMU enabled, and the physical address if not (??)

Headers

u-boot header size: 64 Bytes elf header size: ??

Personal tools

Interested in using FreeBSD on the Neo1973 or as a Host OS? Get in touch with mn -at- bsdgroup.de and andrew -at- fubar.geek.nz, they are currently exploring what to do about this.


Running FreeBSD in Qemu-neo1973

A FreeBSD port is only ready for kernel developers.

Required tools

You will need mkimage from u-boot. It's available in Ports under devel/u-boot.

You will also need Qemu-neo1973. Hints on building it are avaliable from this page.

Building FreeBSD

You will need to download http://fubar.geek.nz/files/freebsd/neo1973/neo1973-0.20070930.tar.bz2 and extract it over the FreeBSD src tree. Warning: It replaces sys/arm/arm/locore.S with its own version.

From the FreeBSD src tree run:


make buildworld TARGET=arm TARGET_ARCH=arm TARGET_CPUTYPE=arm920t
make buildkernel TARGET=arm TARGET_ARCH=arm TARGET_CPUTYPE=arm920t KERNCONF=NEO1973
/path/to/mkimage -A arm -O freebsd -T kernel -C none -a 30008000 -e 30008110 -n "Kernel Image" -d /usr/obj/path/to/kernel /usr/obj/same/path/kernel.boot

You will now have a copy of FreeBSD that is able to be loaded by u-boot.

Running FreeBSD

From the qemu directory edit the openmoko/flash.sh and add the line


kernel_image="/usr/obj/path/to/kernel.boot"

after the four "most_recent" lines.

Next run


./openmoko/download.sh
./openmoko/flash.sh

This will fetch the required parts and create an image to run. They require you to have bash installed.

Finally run qemu with


arm-softmmu/qemu-system-arm -M neo -m 130 -mtdblock openmoko/openmoko-flash.image -kernel openmoko/openmoko-kernel.bin -usb -show-cursor

It will display "Kernel loading..." with no further messages.

You can append

-serial telnet:localhost:1200,server

to the qemu startup line to start a telnet server which represents the serial console, just

telnet localhost 1200

and qemu will go on with the startup process.

Useful pages

GTA02 Openness

Next steps

Implement console driver over uart.

Using a Kernel Testimage

Another method of getting the kernel into the neo is to use an image for the emulated sd card. I already have a file called sd.img ( dd'ed from a 32mb usb stick).

cp /usr/obj/arm/usr/src/sys/NEO1973/kernel .
/usr/obj/arm/usr/src/tmp/usr/bin/objcopy -O binary kernel
sudo mdconfig -a -t vnode -f sd.img
sudo mount_msdosfs /dev/md0s1 /mnt/tmp
sudo cp kernel /mnt/tmp/
sudo umount /mnt/tmp
sudo mdconfig -d -u 0
arm-softmmu/qemu-system-arm -M neo -m 130 -mtdblock openmoko/openmoko-flash.image -kernel openmoko/openmoko-kernel.bin -sd sd.img -usb -show-cursor -serial telnet:localhost:1200,server

In another terminal:

telnet localhost 1200
mmcinit
fatload mmc 0 0x30008000 kernel
go 0x30008000

And wait for the crash :)

Kernel Constants

  • KERNVIRTADDR is the virtual address at which the kernel is loaded (and linked) (0xc0008000)
  • KERNPHYSADDR is the physical address at which the kernel is loaded (0x30008000)
  • PHYSADDR is the physical address of the RAM (0x30000000)
  • KERNBASE is the virtual address of the beginning of the kernel virtual address space (0xc0000000)
  • STARTUP_PAGETABLE_ADDR is a physical address, suitable for the very early pagetable we build in locore.S (0x30800000)
  • FLASHADDR is the address of the flash, virtual or physical depending on what the loader does (??)
  • LOADERRAMADDR the address at which the loader maps the RAM if we're running with the MMU enabled, and the physical address if not (??)

Headers

u-boot header size: 64 Bytes elf header size: ??