FreeBSD
From Openmoko
m (→Building FreeBSD: Update to the latest snapshot) |
Maledictus (Talk | contribs) (header sizes) |
||
Line 82: | Line 82: | ||
* FLASHADDR is the address of the flash, virtual or physical depending on what the loader does (??) | * 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 (??) | * 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: ?? |
Revision as of 18:44, 1 October 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
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: ??