Netbooting ARM/MIPS devices: ubldr

As it was mentioned in previous post U-Boot can boot FreeBSD kernel directly but this approach doesn’t allow a great deal of control over boot process: there is no way to set tunables’ values or pre-load module. Controlling this stuff requires more knowledge of FreeBSD internal data structures and its boot process then U-Boot holds. On i386 and other Tier1 architectures this task is handled by the loader(8) program. It’s last stage boot loader (e.g. it’s supposed to pass control to FreeBSD kernel only), highly customizable and scriptable. loader(8) relies on one of the previous stages boot loader to access resources like disks, console, network. For i386 it’s BTX and BIOS. ...

April 19, 2013 · 3 min · 526 words · Oleksandr Tymoshenko

Netbooting ARM/MIPS devices: kinds of kernel and u-boot

U-Boot is a boot loader. Its task is to get kernel into memory and pass control to it. I will cover only parts of it related to netboot. kernel or kernel.bin But before we start loading something we need to know what to load. In previous post I mentioned that there are kernel, kernel.bin, and ubldr files. Let’s get into details. First of all: ubldr requires its own post. So there will be one more covering just ubldr. Now kernel and kernel.bin. ...

February 15, 2013 · 3 min · 580 words · Oleksandr Tymoshenko

Netbooting ARM/MIPS devices: server setup

I was asked to share details about my root-over-NFS setup so here they are. I decided to split how-to in two posts: server/kernel part and u-boot part. Usual components in the setup are: DHCP server TFTP server NFS server NAT (optional) DHCP server I use net/isc-dhcp42-server as a server. Sample dhcpd.conf: option root-opts code 130 = string; # NFS / mount options log-facility local7; subnet 192.168.10.0 netmask 255.255.255.0 { server-name "cinderella.bluezbox.com"; server-identifier 192.168.10.1; option subnet-mask 255.255.255.0; option broadcast-address 192.168.10.255; option domain-name-servers 8.8.8.8; option domain-name "bluezbox.com"; next-server 192.168.10.1; option routers 192.168.10.1; } group { host pandaboard { hardware ethernet 0E:60:33:B1:46:01; fixed-address 192.168.10.90; filename "kernel.PANDA.bin"; option root-path "/src/FreeBSD/nfs/armv6"; option root-opts "nolockd"; } host rpi { hardware ethernet b8:27:eb:f6:08:83; fixed-address 192.168.10.91; filename "ubldr"; option root-path "/src/FreeBSD/nfs/rpi"; option root-opts "nolockd"; } } Config is pretty self-explanatory. I use google’s 8.8.8.8 nameserver but you can change it to your very own DNS server. Difference between various filename “…” will be explained later. ...

February 14, 2013 · 3 min · 565 words · Oleksandr Tymoshenko