Building image for Raspberry Pi: up to date version

February 1, 2013 — 134 Comments

Update 1: Add -DDB_FROM_SRC to install targets
Update 2: Add user “pi” with password “raspberry”
Update 3: Added host system requirements suggested in comments
Update 4: Rename bcm2835-rpi-b.dtb to rpi.dtb

It’s been a while since I posted original build instruction and a lot has change. Here is new version of it with some explanations:

First make sure your host system is configured properly:

  • WITHOUT_FORTH= must NOT be set in src.conf
  • msdos support must be available in the kernel
  • geom_md support must be available in the kernel

All code has been moved to HEAD. freebsd-pi repository on github serves only historical purpose and I guess will be removed at some point in future. So in order to build image you need sources for -head

svn co svn://

TARGET_CPUTYPE is dropped to in favor of TARGET_ARCH=armv6. U-Boot, firmware files and boot process were upgraded too. Current boot chain is as follows:

  • Pi is powered up and loads firmware files
  • Firmware loads FDT blob defined in config.txt as device_tree variable at address defined as device_tree_address and fixes up fields like memory size, clock frequency and MAC address
  • Firmware loads u-boot and passes control to it
  • U-boot loads boot.scr and executes it
  • Default boot.scr loads ubldr(loader(8)-compatible implementation built over U-Boot API) and passes control
  • ubldr checks FreeBSD partition for /boot/loader.rc, loads it, the loads /boot/kernel/kernel and passes control to it
  • loader.rc should contain “fdt addr 0x100” command. It will pass FDT blob filled in step #2 to kernel

So updated build script will look something like this:

set -e

# Change this
export GPU_MEM=128
export PI_USER=pi
export PI_USER_PASSWORD=raspberry
export SRCROOT=/src/FreeBSD/head
export MNTDIR=/mnt
export MAKEOBJDIRPREFIX=/src/FreeBSD/obj
export IMG=/src/FreeBSD/obj/bsd-pi.img

export TARGET_ARCH=armv6
export MAKESYSPATH=$SRCROOT/share/mk

if [ -z "$MNTDIR" ]; then
        echo "MNTDIR is not set properly"
        exit 1

KERNEL=`realpath $MAKEOBJDIRPREFIX`/arm.armv6/`realpath $SRCROOT`/sys/$KERNCONF/kernel
UBLDR=`realpath $MAKEOBJDIRPREFIX`/arm.armv6/`realpath $SRCROOT`/sys/boot/arm/uboot/ubldr
DTB=`realpath $MAKEOBJDIRPREFIX`/arm.armv6/`realpath $SRCROOT`/sys/$KERNCONF/rpi.dtb

make -C $SRCROOT kernel-toolchain
make -C $SRCROOT MALLOC_PRODUCTION=yes buildworld

buildenv=`make -C $SRCROOT buildenvvars`

eval $buildenv make -C $SRCROOT/sys/boot clean
eval $buildenv make -C $SRCROOT/sys/boot obj
eval $buildenv make -C $SRCROOT/sys/boot UBLDR_LOADADDR=0x2000000 all

rm -f $IMG
dd if=/dev/zero of=$IMG bs=128M count=8
MDFILE=`mdconfig -a -f $IMG`
gpart create -s MBR ${MDFILE}

# Boot partition
gpart add -s 32m -t '!12' ${MDFILE}
gpart set -a active -i 1 ${MDFILE}
newfs_msdos -L boot -F 16 /dev/${MDFILE}s1
mount_msdosfs /dev/${MDFILE}s1 $MNTDIR
fetch -q -o - | tar -x -v -z -C $MNTDIR -f -

cat >> $MNTDIR/config.txt <<__EOC__
cp $DTB $MNTDIR/devtree.dat
umount $MNTDIR

# FreeBSD partition
gpart add -t freebsd ${MDFILE}
gpart create -s BSD ${MDFILE}s2
gpart add -t freebsd-ufs ${MDFILE}s2
newfs /dev/${MDFILE}s2a

# Turn on Softupdates
tunefs -n enable /dev/${MDFILE}s2a
# Turn on SUJ with a minimally-sized journal.
# This makes reboots tolerable if you just pull power on the BB
# Note:  A slow SDHC reads about 1MB/s, so a 30MB
# journal can delay boot by 30s.
tunefs -j enable -S 4194304 /dev/${MDFILE}s2a
# Turn on NFSv4 ACLs
tunefs -N enable /dev/${MDFILE}s2a

mount /dev/${MDFILE}s2a $MNTDIR


echo 'fdt addr 0x100' > $MNTDIR/boot/loader.rc

echo '/dev/mmcsd0s2a / ufs rw,noatime 1 1' > $MNTDIR/etc/fstab

cat > $MNTDIR/etc/rc.conf <<__EORC__


cat > $MNTDIR/etc/ttys <<__EOTTYS__
ttyv0 "/usr/libexec/getty Pc" xterm on secure
ttyv1 "/usr/libexec/getty Pc" xterm on secure
ttyv2 "/usr/libexec/getty Pc" xterm on secure
ttyv3 "/usr/libexec/getty Pc" xterm on secure
ttyv4 "/usr/libexec/getty Pc" xterm on secure
ttyv5 "/usr/libexec/getty Pc" xterm on secure
ttyv6 "/usr/libexec/getty Pc" xterm on secure
ttyu0 "/usr/libexec/getty 3wire.115200" dialup on secure

echo $PI_USER_PASSWORD | pw -V $MNTDIR/etc useradd -h 0 -n $PI_USER -c "Raspberry Pi User" -s /bin/csh -m
pw -V $MNTDIR/etc groupmod wheel -m $PI_USER
PI_USER_UID=`pw -V $MNTDIR/etc usershow $PI_USER | cut -f 3 -d :`
PI_USER_GID=`pw -V $MNTDIR/etc usershow $PI_USER | cut -f 4 -d :`
mkdir -p $MNTDIR/home/$PI_USER

umount $MNTDIR
mdconfig -d -u $MDFILE



134 responses to Building image for Raspberry Pi: up to date version

  1. Why no vchiq this time?

  2. Success on a FreeBSD 9.1R amd64 build server. I needed to manually add the auditdistd user like so:
    # pw useradd auditdistd -u 78 -g 77 -d /var/empty -s /usr/sbin/nologin -c “Auditdistd unprivileged user”

    • Oh, I totally missed that. Actually Brooks Davis merged NetBSD’s mtree(8) that fixed this problem. You just need to add -DDB_FROM_SRC to install targets. I updated script.

      • I had to hack Makefile.inc1 to get the script to run (r246525)

        +IMAKE_MTREE= MTREE_CMD=”/usr/sbin/nmtree ${MTREEFLAGS}”

        I forgot to cc you on the email I sent brooks. Other than that, I have a running FreeBSD RPi Obviously not the right fix but got it working.

        FreeBSD raspberry-pi 10.0-CURRENT FreeBSD 10.0-CURRENT #1 r246571M: Fri Feb 8 18:46:52 EST 2013 root@odyssey:/home/db/FreeBSD/obj/arm.armv6/home/db/svn/system/head/sys/RPI-B arm

  3. And a question: It looks like you are enabling SSH in the image. What would be the username/password?

  4. Do you no how to change overscan settings on FreeBSD I have been searching about for about 2 days and I cant find any info I am running my pi on a old tube tv and I am loosing about a inch on each side of the screen so I cant see much on the console. It has been annoying me I would really appreciate it if you could help.

    • I haven’t tried FreeBSD on Raspberry Pi with composite output so don’t have first hand experience. From OS point of view there are not many knobs to control video output. Did you check video-related options for config.txt? Here is the link: There seems to be several overscan-related

      • Thanks for that also sorry for the slow reply I have been busy but it works I had it in my head that they /boot/config.txt was Linux only lol.

  5. What is -DDB_FROM_SRC for?

  6. All of these images are crashing when I run portsnap fetch extract lately.

  7. One other tweak would be to change the value of IMG to $MAKEOBJDIRPREFIX/bsd-pi.img so that IMG and MAKEOBJDIRPREFIX are always synchronized.

    • I do not think people would want image in their obj/ directory. It’s just that in my VM obj/ is a separate mountpoint with enough space for image.

  8. In the three lines invoking pw(8) near the end of the script the pi user is hardcoded as ‘pi’ , which breaks the script if $PI_USER is set to something different. Those three lines should use the user name in $PI_USER too.

  9. i have build a image on virtualbox and wrote the bsd.img to a 4gb sdcard, but when i turn the rasp on it only sees 1gb / not all 4GB, how to fix that? so all the space is used on the card for /

    • Replace

      dd if=/dev/zero of=$IMG bs=128M count=8


      dd if=/dev/zero of=$IMG bs=128M count=32

      or otherwise adjust size that fits your card

      • This does not seem to work with a 16GB card. I adjusted above to make a 16GB image, but when I write to card, I get dd: /dev/da1: end of device. Is there a good guide on the math/physics behind this?

        • I’m not sure about a guide. I’d just dump image from the target card, check real size and adjusted blocksize/count properly.

          • Thanks. I think what I was missing was diskinfo(8). Once I manned that and was able to get a REAL size for my card in MB, I was able to create an image tailored to my card, with swap too!

  10. Hei,

    is it possible to compile freebsd with included gcc 4.2.2 or later?


  11. Hei gonzo.

    There is a problem with some packages too like minidlna. it says that armv6… is not supported just like with gcc.

    Any suggestions?


  12. I have added a number of switches and updates to this script in my own copy. Would like your permission to post on github. With a link back of course. Thoughts?

  13. ————————————————————–
    >>> World build completed on Wed Feb 20 11:36:44 MSK 2013
    “/usr/head/sys/boot/Makefile”, line 4: Could not find
    make: fatal errors encountered — cannot continue

  14. I amended the build script to suit my system:

    -export SRCROOT=/usr/src/head
    -export MNTDIR=/mnt/rpi
    -export MAKEOBJDIRPREFIX=/usr/src/obj
    -export IMG=/usr/src/obj/bsd-pi.img
    +export SRCROOT=/src/FreeBSD/head
    +export MNTDIR=/mnt
    +export MAKEOBJDIRPREFIX=/src/FreeBSD/obj
    +export IMG=/src/FreeBSD/obj/bsd-pi.img

    -dd if=/dev/zero of=$IMG bs=128M count=32
    +dd if=/dev/zero of=$IMG bs=128M count=8

    But when I try to boot I get:
    Mounting from ufs:/dev/mmcsd0s2a failed with error 19.

    • Do you have full boot log?

      SDHCI controller is still picky about cards, I’m working on fixing it. You can try adding
      set hw.bcm2835.sdhci.hs=”0″
      to loader.rc.

      Or hw.bcm2835.min_freq=8000000

  15. mine is a bit worst as it does not completely boot at all.

    at boot time, i end up getting the

    prompt. And if i do a “?” it shows sometimes it only shows “mmcsd0” as the device.
    a few seconds later
    it shows panic: mountroot: unable to (re-)mount root.
    then screen gets filled with

    … (at this point, remove the power and re-position the card), boot again

    i may get lucky when aftter
    mountroot> ?

    it may show:

    if there’s no panic… then after the list ill do

    then it boots, and goes through just fine. However, if I reboot again, it will not re-mount.

    • As I told to caesius – try experimenting with SDHCI driver tunables in loader.rc. On my raspberry Pi this combination works best:

      set hw.bcm2835.sdhci.hs=”0″
      set hw.bcm2835.min_freq="8000000"

      If it doesn’t work – try reducing min_freq to 400000.

      • This is a little bit annoying, two of my three different sd cards need these settings. Unfortunately, the problem does not occur at every reboot, so I’ve noticed it late. I made automatic reboot loops (100 reboots) to find it out. With both affected cards it occurs only in ~ 10% of the reboots. With these settings it does not occur.

  16. I’m having trouble getting the world to build. It seems to error out during the fsck_ffs compile. I’ve poked around but can’t seem to find the problem. Any ideas?

    cc1: warnings being treated as errors
    /root/FreeBSD/head/sbin/fsck_ffs/fsutil.c: In function ‘printIOstats’:
    /root/FreeBSD/head/sbin/fsck_ffs/fsutil.c:452: warning: format ‘%ld’ expects type ‘long int’, but argument 2 has type ‘time_t’
    *** [fsutil.o] Error code 1

    Stop in /root/FreeBSD/head/sbin/fsck_ffs.
    *** [fsck_ffs_make] Error code 1

    Stop in /root/FreeBSD/obj/arm.armv6/root/FreeBSD/head/rescue/rescue.
    *** [objs] Error code 1

    Stop in /root/FreeBSD/head/rescue/rescue.
    *** [all] Error code 1

    Stop in /root/FreeBSD/head/rescue.
    *** [rescue.all__D] Error code 1

    Stop in /root/FreeBSD/head.
    *** [everything] Error code 1

    Stop in /root/FreeBSD/head.
    *** [buildworld] Error code 1

    Stop in /root/FreeBSD/head.

  17. Nevermind, it needed to be type %lld instead of %ld. It looks like someone already fixed it in the latest svn.

  18. Whoops, didn’t see your post. Yeah. Building again! =)

    I was going to setup my personal server to do nightly builds and pack them into a normal and Berryboot compatible image. Would it be okay if I posted a download link when I get it all up and running?

  19. Hi, gonzo, I had build the img successful, but yet we only have the img, and how can i make a kernel for the qemu -kernel arg?

  20. Oh, I have saw the older post about qemu, sorry about that.

  21. Does overclocking work as usual in the config.txt, and is there any way I could measure CPU frequency in freebsd?

    • Yes, overclocking settings should work just fine. As for measuring CPU frequency – I do not think there is a way to do it right now, but I’ll take a look what can be done there

  22. Hello Gonzo
    great job getting FreeBSD running on the Raspberry. I love it.
    I booted it from the freebsd-pi-r245446.img.gz from
    It works fine, slow, but it works. ports compiles, so everything is fine in that department.

    I wanted to update kernel and world on my system, and then came my problems:

    On the Pi:
    The kernel and the tool-chain compiles fine. Building world fails in the the crypto/heimdal part w. “compile_et not found” I did try to get newer sources several times. still no joy.

    On a i386 vm:
    The code cross compiles fine. I can build bot kernel and world. works like a charm.

    The final problem the one that really nags me:
    If I do a make installkernel KERNCONF=RPI-B neither the cross-compiled kernel nor the kernel compiled on Pi will boot.
    In both cases: It reads in the kernel. I get all the way to the line:
    kernel arguments (null)
    Then nothing more happens. Not that I’m aware off
    I never see:
    root mount waiitng for: usb…

    On both machines I did :
    make kernel-toolchain
    make KERNCONF=RPI-B WITH_FDT=yes buildkernel
    make MALLOC_PRODUCTION=yes buildworld
    Just as described above. Of cause I remembered export =TARGET_ARCH=armv6 when cross compiling.
    On the Pi / was aready mounted. On the vm i mounted the sd card under /mnt and used DESTDIR=

    In both cases /boot is updated w. new kerne.

    Any suggestions is highly appreciated.


    • Try adding WITHOUT_KERBEROS=yes to your make commands.AFAIR there might be problem when you’re trying to build kerberos stuff on the system built originally without it.

  23. Great work!
    Are you familiar with ?
    Same CPU/GPU to the Hackberry.
    What is your view on a bsd supporting all functionality in pcduino?

    • Port is in very basic state but there is some work going on right now. ganbold@ works on Cubieboard and imp@ got a MarsBoard, so we can expect fairly decent port soon-ish.

  24. I could build the rpi image with 10-CURRENT as of 2013-03-27, but today (2013-04-13) the build fails with the following error message:

    cc -c -O -pipe -std=c99 -g -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign -fformat-extensions -Wmissing-include-dirs -fdiagnostics-show-option -Wno-error-tautological-compare -Wno-error-empty-body -Wno-error-parentheses-equality -nostdinc -I. -I/root/rpi/head/sys -I/root/rpi/head/sys/contrib/altq -I/root/rpi/head/sys/contrib/libfdt -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -ffreestanding -Werror /root/rpi/head/sys/arm/broadcom/bcm2835/bcm2835_intr.c
    /root/rpi/head/sys/arm/broadcom/bcm2835/bcm2835_gpio.c:389:13: error: unsequenced modification and access to ‘flags’ [-Werror,-Wunsequenced]
    if ((flags &= sc->sc_gpio_pins[i].gp_caps) != flags)
    ^ ~~~~~
    1 error generated.
    *** [bcm2835_gpio.o] Error code 1
    1 error
    *** [buildkernel] Error code 2
    1 error
    *** [buildkernel] Error code 2
    1 error

    NOTE: the error arrows are broken because the font is not fixed. The ^ is below the “&=”, while the ~~~~~ is below the “flags” at the end.

    • The code section is:

      /* Filter out unwanted flags. */
      if ((flags &= sc->sc_gpio_pins[i].gp_caps) != flags)
      return (EINVAL);

      I can see you would want to filter out flags which are not supported (by doing &= with gp_caps), but i do not see what the comparison with flags after that should do. Either it’s the old flags and the expression would be false if flags was changed – you could do & instead of &= then… Or it’s the new flags, the expression would be always true then. I changed the code so that it does what the comment above says. After applying this patch, it compiles for me. You might want to commit this. If the formatting is broken, i can email it to you.

      Index: sys/arm/broadcom/bcm2835/bcm2835_gpio.c
      — sys/arm/broadcom/bcm2835/bcm2835_gpio.c (revision 249439)
      +++ sys/arm/broadcom/bcm2835/bcm2835_gpio.c (working copy)
      @@ -386,8 +386,7 @@
      return (EINVAL);

      /* Filter out unwanted flags. */
      – if ((flags &= sc->sc_gpio_pins[i].gp_caps) != flags)
      – return (EINVAL);
      + flags &= sc->sc_gpio_pins[i].gp_caps;

      /* Can’t mix input/output together. */
      if ((flags & (GPIO_PIN_INPUT|GPIO_PIN_OUTPUT)) ==

  25. Hi, is it possible I can run this installation from a Linux machine?

  26. Is it possible to run a diskless system (apart from the FAT32 boot partition)? I notice that you were TFTP loading kernels previously so I guess it’s possible but it looks like uboot.img doesn’t probe the USB NIC by default.

    I’ve been running Linux with root-on-NFS but it’s a bit easier there because the kernel is in the FAT32 partition so I can just use cmdline.txt to tell the kernel to use root over NFS.

    Ideally, I’d like uboot (or ubldr) to use DHCP and either TFTP or NFS to load the kernel. Is this possible? If so, can you point me to some documentation on the necessary steps.

    • Yes, it’s possible. I run my development Pi in diskless mode. U-Boot just executes script in boot.scr if USB is not strarted – please attach serial port output for further investigation.

      As for how setup diskless boot I recently posted series of articles on this topic:

      If there is some information missing – let me know, I’ll fill in missing pieces.

  27. Josef Larsson May 4, 2013 at 11:33 am

    Managed to get it running as a router now with USB ethernet. Thank you very much :). It seems to be running at less than full speed but I have to test it thoroughly to say so confidently.

    One interesting behaviour is that ping latency seems to cycle in the following fashion for both ethernet cards: 10 ms, 9 ms, 8ms, … , 1ms, 10 ms, 9ms, 8ms, …, 1 ms and round again.

    Another problem seems to be the C++-compiler that get some kind of memory alignment error everytime I use it. (

    • If not known, it’s possible to switch from clang to gcc (which is still part
      of the base system), you have only to redefine CC, CXX and CPP in your
      /etc/make.conf . Not all ports will compile with clang at the moment.

      • Josef Larsson May 6, 2013 at 1:41 am

        Knew that already, but thanks anyway. Another approach is to set USE_GCC=any in the makefile of the port in question.

    • Ok, now I’m running in the same problem, tried to compile my first world directly on the pi. When sending my first post, I thought this was related to the llvm port and not to the world itself. Do you have a solution in the meanwhile?

      • Josef Larsson May 7, 2013 at 11:19 am

        Last time I checked, the clang-compiler built with world had the same version number as clang-devel in ports.

        If GCC won’t do for the world compilation, I do not think you can build world on the Pi before that bug is fixed.

        • I’ve tried to build the world with gcc, it breaks after 1 day compiling with
          an error.

          gcc -O -pipe -I/usr/src/lib/libc/include -I/usr/src/lib/libc/../../include -I/usr/src/lib/libc/arm -DNLS -D__DBINTERFACE_PRIVATE -I/usr/src/lib/libc/../../contrib/gdtoa -I/usr/src/lib/libc/../../contrib/libc-vis -DINET6 -I/usr/obj/usr/src/lib/libc -I/usr/src/lib/libc/resolv -D_ACL_PRIVATE -DPOSIX_MISTAKE -I/usr/src/lib/libc/../../contrib/jemalloc/include -I/usr/src/lib/libc/../../contrib/tzcode/stdtime -I/usr/src/lib/libc/stdtime -I/usr/src/lib/libc/locale -DBROKEN_DES -DPORTMAP -DDES_BUILTIN -I/usr/src/lib/libc/rpc -I/usr/src/lib/libc/arm/softfloat -I/usr/src/lib/libc/softfloat -DSOFTFLOAT_FOR_GCC -DYP -DNS_CACHING -DSYMBOL_VERSIONING -std=gnu99 -Wsystem-headers -Werror -Wall -Wno-format-y2k -Wno-uninitialized -Wno-pointer-sign -c accept4.S
          accept4.S: Assembler messages:
          accept4.S:3: Error: undefined symbol `SYS_accept4′ in operation
          *** [accept4.o] Error code 1

          Stop in /usr/src/lib/libc.
          *** [lib/libc__L] Error code 1

          Stop in /usr/src.
          *** [libraries] Error code 1

          Stop in /usr/src.
          *** [_libraries] Error code 1

          Stop in /usr/src.
          *** [buildworld] Error code 1

          • JFYI. In the meantime it’s possible to compile the world using the rpi. What we
            need is a more recent base system, it’s still not working with older installations.
            I’ve just compiled head/254366 without any problems (using a base system
            which was two weeks old).

  28. As I tried to compile NodeJS (I know, ridiculous :p).. Does the current FreeBSD ARM support HardFloat, and if not.. are you aware of any work on adding HFloat support?

    • I believe hardfloat was not supported because gcc version in base was ancient. Andrew Turner had some plans on hardfloat support AFAIR but I am not sure about current state. I’ve been out of loop for a few weeks and catching up now

  29. Ettore Simone May 24, 2013 at 10:57 am

    Any plan to merge it into NanoBSD?

  30. Just a few notes for people running the build on a custom built FreeBSD.. The build machine I’m using is running 9.1-STABLE r250632. I was trying to build HEAD @ r251098.

    – WITHOUT_FORTH= must NOT be set in src.conf
    – msdos support must be available in the kernel (cd /usr/src/sys/modules/msdosfs; make; make install)
    – geom_md support must be available in the kernel (cd /usr/src/sys/modules/md; make; make install)

    Thanks for your work on this 🙂

  31. Jaesung Jeong July 3, 2013 at 5:26 pm

    There is no bcm2835-rpi-b.dtb file in SOURCE_ROOT/sys/boot/fdt/dts/ directory.

    Your build script ( tells that
    $DTB is OBJDIRPREFIX/arm.armv6/……../sys/RPI-B/bcm2835-rpi-b.dtb
    but there is no file in that directory.

    Is there any my mistake ?

    Thanks a log.

  32. Jaesung Jeong July 11, 2013 at 6:21 pm

    Thanks for your nice information.
    I have one more question.

    when using gpart, what’s the type of ‘!12’ ?
    I guess that ‘!12’ is ms-dos type, but I can find any information about it.
    There is no explanation about !12 in man of gpart.
    Can you explain about this?

    Thanks a lot…

  33. Hi,

    Thanks for that howto, is Xorg supported now?

  34. Working only WITHOUT_ARM_EABI in src.conf
    Change: DTB=`realpath $MAKEOBJDIRPREFIX`/arm.armv6/`realpath $SRCROOT`/sys/$KERNCONF/bcm2835-rpi-b.dtb

    DTB=`realpath $MAKEOBJDIRPREFIX`/arm.armv6/`realpath $SRCROOT`/sys/$KERNCONF/rpi.dtb

  35. Josef Larsson July 24, 2013 at 3:38 am

    Just wanted to report that I have used my RPI as a router (using PF) successfully with 51 days of uptime so far with the following overclock settings:


    I use an external USB ethernet adapter as my second network card. The only down side with this configuration so far, compared to a buzzing computer is network throughput. I get about 90 % of the download speed and 60 % of the upload speed that my connection is capable of. Most likely this has to do with the fact that FreeBSD currently uses PIO mode while Linux uses DMA mode, according to .

  36. Thanks for your good work.

    I’m getting the following error running your script:

    “Makefile.inc1”, line 161: CPUTYPE global should be set with ?=.
    *** [kernel-toolchain] Error code 1

    Stop in /usr/src/FreeBSD/head.

    Any ideas?

  37. Hi,
    I’m looking for support of if_gif, so i can create a Sixxs-tunnel-solution in my RPi. I’m struggling to install subversion (and then the source), but my box dumps the build. Is it possible for some to help me to compile the if_gif.ko in FreeBSD for RPI?

    • Hi Jonas,

      if_gif is already there.

      root@pizelot:~ # ll /boot/kernel/if_gif.ko*
      -r-xr-xr-x 1 root wheel 27224 Aug 28 05:10 /boot/kernel/if_gif.ko
      -r-xr-xr-x 1 root wheel 99615 Aug 28 05:10 /boot/kernel/if_gif.ko.symbols

      root@pizelot:~ # kldload if_gif

      root@pizelot:~ # kldstat
      Id Refs Address Size Name
      1 8 0xc0100000 5a99c4 kernel
      2 1 0xc27c3000 15000 tmpfs.ko
      3 1 0xc2828000 b000 uhid.ko
      4 1 0xc493b000 d000 if_gif.ko

      • No, there’s no if_gif.ko (or any *.ko) there. I only got the “core” stuff in my image FreeBSD 10.0-CURRENT #84 r252209M:

        “-r-xr-xr-x 1 root wheel 5430046 Jun 27 15:09 kernel*
        -r-xr-xr-x 1 root wheel 2144253 Jun 27 15:09 kernel.gz.tramp*
        -r-xr-xr-x 1 root wheel 17035501 Jun 27 15:09 kernel.symbols*
        -rw-r–r– 1 root wheel 3444 Sep 4 16:33 linker.hints”

        I’ve managed to get the source on the box, it builds okey the module, but when to load it =
        “kldload: can’t load /usr/src/sys/modules/if_gif/if_gif.ko: File exists”

        “Id Refs Address Size Name
        1 1 0xc0100000 56b8f8 kernel”

        kldtstat -v dont show any gif-device…

        Any thoughts?


        • I’ll ad this to:
          “KLD if_gif.ko: depends on kernel – not available or version mismatch”

          Is it not possible to build a module fro a newer source (rev)?

        • Ok, r252209 is quite old, please build a current kernel/base system, all modules will be there. And you can load them easily without compiling them into the kernel.

          root@pizelot:~ # ls -l /boot/kernel/*.ko | wc -l

  38. Always bails when trying to copy the DTB file now. I saw the comment on the fact that it was renamed a while back, but now it seems it has disappeared altogether? Am I missing something?

    • I have been struggling with that for a couple of days now. I am also not getting any DTB files :

      root@bob:/home/jj/freebsd-arm-tools # find /src/ -name "*.dtb"

      The above output is from running an umodified build script from, but the same happens when running this post’s script.

    • I’ve just checked with latest HEAD and dtb is there:

      % ls -la /src/FreeBSD/obj/arm.armv6//src/FreeBSD/head/sys/RPI-B/*dtb
      -rw-r--r--  1 gonzo  wheel  8400 Sep  4 18:08 /src/FreeBSD/obj/arm.armv6//src/FreeBSD/head/sys/RPI-B/rpi.dtb

      Please redirect build logs to file and check if there is line like this there:

      if [ -f /src/FreeBSD/head/sys/boot/fdt/dts/rpi.dts ]; then dtc -O dtb -o rpi.dtb -b 0 -p 1024 /src/FreeBSD/head/sys/boot/fdt/dts/rpi.dts; fi
      • Thanks for looking into it, I have checked my build logs and found some similar lines, however the file that is looked for is named bcm2835-rpi-b.dts instead, so I found that the kernel config files in freebsd-arm-tools projects has the following section:

        # Flattened Device Tree
        options FDT
        # Note: DTB is normally loaded and modified by RPi boot loader, then
        # handed to kernel via U-Boot and ubldr.
        #options FDT_DTB_STATIC
        makeoptions FDT_DTS_FILE=bcm2835-rpi-b.dts

        I have made a build with bcm2835-rpi-b.dts changed to rpi-b.dts and waiting to see if this makes any difference.

  39. The BCM2708 includes a hardware watchdog, which seems to be already implemented and
    was detected by the kernel.

    root@pizelot:~ # dmesg | grep Watchdog
    bcmwd0: mem 0x2010001c-0x20100027 on simplebus0

    root@pizelot:~ # uname -a
    FreeBSD 10.0-ALPHA5 FreeBSD 10.0-ALPHA5 #2 r256248: Thu Oct 10 05:05:01 CEST 2013 arm

    Unfortunately it will not work with the watchdogd, seems that something is missing.

    root@pizelot:~ # /etc/rc.d/watchdogd start
    Starting watchdogd.
    watchdogd: watchdog_patpat failed: Operation not supported
    watchdogd: patting the dog: Operation not supported
    /etc/rc.d/watchdogd: WARNING: failed to start watchdogd

    Any idea? A real hardware watchdog would be very nice when running a remote rpi.

  40. Thanks, Gonzo!! Built it off FreeBSD 11.0 over the weekend.

    % uname -a
    FreeBSD raspberry-pi 11.0-CURRENT FreeBSD 11.0-CURRENT #0 r256429: Sun Oct 13 22:52:43 EDT 2013 arm

    % dmesg
    KDB: debugger backends: ddb
    KDB: current backend: ddb
    Copyright (c) 1992-2013 The FreeBSD Project.
    Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
    The Regents of the University of California. All rights reserved.
    FreeBSD is a registered trademark of The FreeBSD Foundation.
    FreeBSD 11.0-CURRENT #0 r256429: Sun Oct 13 22:52:43 EDT 2013 arm
    FreeBSD clang version 3.3 (tags/RELEASE_33/final 183502) 20130610
    CPU: ARM1176JZ-S rev 7 (ARM11J core)
    Supported features: ARM_ISA THUMB2 JAZELLE ARMv4 Security_Ext
    WB enabled LABT branch prediction enabled
    16KB/32B 4-way instruction cache
    16KB/32B 4-way write-back-locking-C data cache
    real memory = 536870912 (512 MB)
    avail memory = 385515520 (367 MB)
    kbd0 at kbdmux0

  41. I recompiled and added vlan/gre/bridge support to the kernel. If I ping over ‘gre0’ it works fine unless I run ‘tcpdump -n -i gre0’ on the Raspberry PI. I can see the pings coming in (via the TCPdump command), but once TCPdump is run, the replies stop — even when TCPdump is terminated. To restart the gre tunnel, I need to run
    ifconfig gre0 destory; ifconfig gre0 create

    This may be a FreeBSD 11.0 issue — installing on an Intel box to check.

  42. Hi all,

    Coming back to tinkering with Current for Raspberry Pi after an extended period of time. I had 10.0-CURRENT running but want to move to 11.0.

    The build script is failing with 11.0-CURRENT 260888, with the following errors:

    ===> aic7xxx/ahc (depend)
    @ -> /mount/devel/FreeBSD/11.0-CURRENT/src/sys
    machine -> /mount/devel/FreeBSD/11.0-CURRENT/src/sys/arm/include
    Error: aic7xxx_seq.h is missing. Run ‘make ahcfirmware’
    Error: aic7xxx_reg.h is missing. Run ‘make ahcfirmware’
    Error: aic7xxx_reg_print.c is missing. Run ‘make ahcfirmware’
    ln -sf /mount/devel/FreeBSD/11.0-CURRENT/obj/arm.armv6/mount/devel/FreeBSD/11.0-CURRENT/src/sys/RPI-B/opt_scsi.h opt_scsi.h
    ln -sf /mount/devel/FreeBSD/11.0-CURRENT/obj/arm.armv6/mount/devel/FreeBSD/11.0-CURRENT/src/sys/RPI-B/opt_aic7xxx.h opt_aic7xxx.h
    ln -sf /mount/devel/FreeBSD/11.0-CURRENT/obj/arm.armv6/mount/devel/FreeBSD/11.0-CURRENT/src/sys/RPI-B/opt_cam.h opt_cam.h
    awk -f @/tools/makeobjops.awk @/kern/device_if.m -h
    awk -f @/tools/makeobjops.awk @/kern/bus_if.m -h
    awk -f @/tools/makeobjops.awk @/dev/pci/pci_if.m -h
    rm -f .depend
    CC=’cc ‘ mkdep -f .depend -a -nostdinc -DAHC_REG_PRETTY_PRINT=1 -D_KERNEL -DKLD_MODULE -DHAVE_KERNEL_OPTION_HEADERS -I. -I@ -I@/contrib/altq -I/mount/devel/FreeBSD/11.0-CURRENT/obj/arm.armv6/mount/devel/FreeBSD/11.0-CURRENT/src/sys/RPI-B -std=iso9899:1999 aic7xxx_reg_print.c /mount/devel/FreeBSD/11.0-CURRENT/src/sys/modules/aic7xxx/ahc/../../../dev/aic7xxx/aic7xxx.c /mount/devel/FreeBSD/11.0-CURRENT/src/sys/modules/aic7xxx/ahc/../../../dev/aic7xxx/aic7xxx_93cx6.c /mount/devel/FreeBSD/11.0-CURRENT/src/sys/modules/aic7xxx/ahc/../../../dev/aic7xxx/aic7xxx_osm.c /mount/devel/FreeBSD/11.0-CURRENT/src/sys/modules/aic7xxx/ahc/../../../dev/aic7xxx/aic7770.c
    cc: error: no such file or directory: ‘aic7xxx_reg_print.c’
    mkdep: compile failed
    *** [.depend] Error code 1

    Stop in /mount/devel/FreeBSD/11.0-CURRENT/src/sys/modules/aic7xxx/ahc.
    *** [depend] Error code 1

    Stop in /mount/devel/FreeBSD/11.0-CURRENT/src/sys/modules/aic7xxx.
    *** [depend] Error code 1

    Stop in /mount/devel/FreeBSD/11.0-CURRENT/src/sys/modules.
    *** [modules-depend] Error code 1

    Stop in /mount/devel/FreeBSD/11.0-CURRENT/obj/arm.armv6/mount/devel/FreeBSD/11.0-CURRENT/src/sys/RPI-B.
    *** [buildkernel] Error code 1

    Stop in /mount/devel/FreeBSD/11.0-CURRENT/src.
    *** [buildkernel] Error code 1

    Stop in /mount/devel/FreeBSD/11.0-CURRENT/src.
    root@freebsd:/mount/devel #

    Does anyone have an idea of what I am doing wrong? Build server (as reported by uname -a) is:

    FreeBSD 9.1-RELEASE-p3 FreeBSD 9.1-RELEASE-p3 #9: Sun May 12 15:34:42 PDT 2013 amd64

    If this is just a problem with the current revision can someone let me know the latest revision that will work with the above script?

    Many thanks,


    • I had the same issue today … bonked at aic7xxx. I added this to my build script:

      export MODULES_OVERRIDE=wlan

      That will exclude building all the modules except wlan — not that I need wlan, but I may want to try a wireless usb card in the rpi once I get FreeBSD 11 built — more importantly, that skips the aic7xxx SCSI stuff. However, the build now bonks here:

      cc -c -O -pipe -std=c99 -g -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign -fformat-extensions -Wmissing-include-dirs -fdiagnostics-show-option -Wno-error-tautological-compare -Wno-error-empty-body -Wno-error-parentheses-equality -nostdinc -I. -I/data/pi/src/sys -I/data/pi/src/sys/contrib/altq -I/data/pi/src/sys/contrib/libfdt -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -funwind-tables -mllvm -arm-enable-ehabi -ffreestanding -Werror /data/pi/src/sys/fs/msdosfs/msdosfs_fat.c
      /data/pi/src/sys/arm/broadcom/bcm2835/bcm2835_fb.c:231:30: error: implicit declaration of function 'pmap_mapdev' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
      va_sc->fb_addr = (intptr_t)pmap_mapdev(fb_config->base, fb_config->screen_size);
      cc -c -O -pipe -std=c99 -g -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign -fformat-extensions -Wmissing-include-dirs -fdiagnostics-show-option -Wno-error-tautological-compare -Wno-error-empty-body -Wno-error-parentheses-equality -nostdinc -I. -I/data/pi/src/sys -I/data/pi/src/sys/contrib/altq -I/data/pi/src/sys/contrib/libfdt -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -funwind-tables -mllvm -arm-enable-ehabi -ffreestanding -Werror /data/pi/src/sys/fs/msdosfs/msdosfs_lookup.c
      1 error generated.
      *** [bcm2835_fb.o] Error code 1
      1 error
      *** [buildkernel] Error code 2
      1 error
      *** [buildkernel] Error code 2

      • I too tried building 11-current & came across the aic7xxx issue. Checked out 10.0.0 instead, and had a small issue building 10.0.0/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h where it complained about MALLOC_PRODUCTION already being defined on the command line. A small edit to the header file fixed that, and the build completed successfully. Machine boots up nicely – I’m intending to use one of my old 256M Pis as a firewall/router with the addition of another USB ethernet device.

        • I came across the jemalloc issue and filed a PR (186006). The link is here: I am doing some work to see if it is only on the ARM, or if it is in other architectures. I will update the PR when I have concluded my work.

        • So I spun up a working image, but it simply won’t work with a second USB ethernet interface. Very frustrating. Also, things go pear-shaped when you attempt to use an 8G card image – it boots, but then can’t find the root filesystem. I’ve had success all the way up to 4G card images (haven’t tried anything between it & 8G)

          • If I’d paid attention to error messages, I would’ve realised that gigabytes are different to gigibytes. So now I can use all of my 8G card. Following another commenter’s suggestion, I can now run a FreeBSD-11 system. Still not having much luck with a USB ethernet dongle – will have to try some different ones.

  43. I tried building the latest revision with your patch:

    Ethernet was remarkably faster, and seemed to work fine for the surface mounted one on the RPI. I then added a USB hub with a USB network interface with some PF rules (pf compiled in kernel of course) for routing. When network throughput is low, routing works fine without any errors, but as soon as it is increased, you can see the following message coming out continuously from dmesg: “BUSY!!!!!!!!!!!!!!”. LAN ethernet will still work fine at this time, but network communication through the USB network interface stops working.

    Any idea what could be the problem?

  44. After some more research I guess that this has to do with SPLIT transactions not being supported, correct?

  45. This post is invaluable. How can I fin out more?

    Feel free to surf to my web blog … projet participatif humanitaire

  46. I had to use ‘export WITHOUT_MODULES=aic7xxx’ before building because it fails otherwise.

    But now it fails with this message:

    md0 created
    md0s1 added
    active set on md0s1
    /dev/md0s1: 65416 sectors in 8177 FAT16 clusters (4096 bytes/cluster)
    BytesPerSec=512 SecPerClust=8 ResSectors=1 FATs=2 RootDirEnts=512 Sectors=65520 Media=0xf0 FATsecs=32 SecPerTrack=63 Heads=64 HiddenSecs=0
    x boot-ubldr.txt: Can’t set user=0/group=0 for boot-ubldr.txt
    x boot.scr: Can’t set user=0/group=0 for boot.scr
    x bootcode.bin: Can’t set user=0/group=0 for bootcode.bin
    x config.txt: Can’t set user=0/group=0 for config.txt
    x fixup.dat: Can’t set user=0/group=0 for fixup.dat
    x fixup_cd.dat: Can’t set user=0/group=0 for fixup_cd.dat
    x start.elf: Can’t set user=0/group=0 for start.elf
    x start_cd.elf: Can’t set user=0/group=0 for start_cd.elf
    x uEnv.txt: Can’t set user=0/group=0 for uEnv.txt
    x uboot.img: Can’t set user=0/group=0 for uboot.img
    tar: Error exit delayed from previous errors.

    And I have no clue to this

    • I think it requires that those users etc be present on your host system. uid 0 gid 0 correspond to root:root on my box. Was quite thankful to you for pointing out the WITHOUT_MODULES env variable – saved me reading doco… 8^)

  47. I’m now running FreeBSD 10 on ancient x86 hardware – being all I can afford for my little house at the moment, but do use the knowledge garnered on massive servers – earning my keep 😉
    Posts/blogs such as these are simply invaluable and I contribute where I can – this is my first time on the ARM/SoC scene though and I hope to be a regular once I get a system I can play with.
    Thank you and keep up the good work!

  48. head still bonking here:
    >>> stage 3.2: building everything
    cd /data/pi/obj/arm.armv6/data/pi/src/sys/RPI-MONKEY; MAKEOBJDIRPREFIX=/data/pi/obj/arm.armv6 MACHINE_ARCH=armv6 MACHINE=arm CPUTYPE= GROFF_BIN_PATH=/data/pi/obj/arm.armv6/data/pi/src/tmp/legacy/usr/bin GROFF_FONT_PATH=/data/pi/obj/arm.armv6/data/pi/src/tmp/legacy/usr/share/groff_font GROFF_TMAC_PATH=/data/pi/obj/arm.armv6/data/pi/src/tmp/legacy/usr/share/tmac _SHLIBDIRPREFIX=/data/pi/obj/arm.armv6/data/pi/src/tmp _LDSCRIPTROOT= VERSION="FreeBSD 11.0-CURRENT armv6 1100007" INSTALL="sh /data/pi/src/tools/" PATH=/data/pi/obj/arm.armv6/data/pi/src/tmp/legacy/usr/sbin:/data/pi/obj/arm.armv6/data/pi/src/tmp/legacy/usr/bin:/data/pi/obj/arm.armv6/data/pi/src/tmp/legacy/usr/games:/data/pi/obj/arm.armv6/data/pi/src/tmp/legacy/bin:/data/pi/obj/arm.armv6/data/pi/src/tmp/usr/sbin:/data/pi/obj/arm.armv6/data/pi/src/tmp/usr/bin:/data/pi/obj/arm.armv6/data/pi/src/tmp/usr/games:/sbin:/bin:/usr/sbin:/usr/bin CC="cc " CXX="c++ " CPP="cpp " AS="as" AR="ar" LD="ld" NM=nm OBJDUMP= RANLIB=ranlib STRINGS= COMPILER_TYPE=clang make -D NO_CLEAN KERNCONF=RPI-MONKEY WITH_FDT=yes -m /data/pi/src/share/mk TARGET=arm TARGET_ARCH=armv6 KERNEL=kernel all -DNO_MODULES_OBJ
    cc -c -O -pipe -std=c99 -g -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign -fformat-extensions -Wmissing-include-dirs -fdiagnostics-show-option -Wno-error-tautological-compare -Wno-error-empty-body -Wno-error-parentheses-equality -nostdinc -I. -I/data/pi/src/sys -I/data/pi/src/sys/contrib/altq -I/data/pi/src/sys/contrib/libfdt -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -funwind-tables -mllvm -arm-enable-ehabi -ffreestanding -Werror /data/pi/src/sys/arm/broadcom/bcm2835/bcm2835_fb.c
    /data/pi/src/sys/arm/broadcom/bcm2835/bcm2835_fb.c:231:30: error: implicit
    declaration of function 'pmap_mapdev' is invalid in C99
    va_sc->fb_addr = (intptr_t)pmap_mapdev(fb_config->base, ...
    1 error generated.
    *** [bcm2835_fb.o] Error code 1

  49. ok … i hafe make:

    svn co svn://

    i have cut&pase the script up ther tu

    i have delet the /src/FreeBSD/ path out of the script. (that’s not the path in the head so wath’s that junk)

    i start the script and get:
    make: no system rules (

    .. and ther right … there is no usr dir in head so it can’t be a usr/mk or a usr/mk/ there.

    and now?

  50. Hi
    I have been looking at this script for a couple of days without having much succes in getting the script running all the way to the end.
    Every time the script is running, it’s ending with an error telling, that rpi.dtb is not found.
    “cp: /root/kernel/obj/arm.armv6/root/kernel/src.head/sys/RPI-B/rpi.dtb: No such file or directory”
    I can see that Jakob (sep.4,2013) has been writing about this as well.
    I have used the source from “” and of course the script in the top of this blog.
    Is there any changes to the script or make-files in the source, that needs to be done ?
    I can see that in the text from / to Jakob (sep.4,2013) is a path to the rpi.dts noted as “src/freebsd/head/sys/boot/fdt/dts/rpi.dts” but when I look at the source today, the path is changed to “src/freebsd/head/sys/boot/fdt/dts/ARM/rpi.dts”
    When I go through the output from the build, I don’t see anything that’s referring to the rpi.dts-file which resulting in a missing rpi.dtb in the obj directory.
    Anyone are more than welcome to come with input on how to proceed 🙂

  51. @scorpizz

    I attempted to build an image yesterday within a VM (bad idea.. took over 8 hours) and resulted in the same error you are seeing. I too noticed that the dts is now in a new directory, so I manually built the dtb/devtree.dat file and copied onto into the image as per the script:

    cp $DTB $MNTDIR/devtree.dat

    Run the following command to build dtb:

    dtc -O dtb -o rpi.dtb -b 0 -p 1024 /src/FreeBSD/head/sys/boot/fdt/dts/arm/rpi.dts

    This should result in a rpi.dtb file. At this point, you can copy it into your mnt directory as devtree.dat.

    I’ve unmounted the image and have yet to test it but I’ll update and let you know. I’ll be trying it this evening. If not, I’ll modify the build script and try a build again.

Trackbacks and Pingbacks:

  1. FreeBSD/Pi setup HowTo « FreeBSD developer's notebook - February 1, 2013

    […] This instruction is no longer correct. New version is here. […]

  2. FreeBSD ARM Tools ← Daveish - February 26, 2013

    […] expansion on original by Gonzo from Building image for Raspberry Pi: up to date version. Added various switches and knobs to make the update / build process a little easier. Also, […]

  3. FreeBSD на RaspberryPi - March 23, 2013

    […] FreeBSD 10.x для RaspberryPi: AKPC_IDS += "4202,";Popularity: unranked […]

  4. FreedBSD 20岁生日快乐 - June 22, 2013

    […] BSD 和 PC-BSD等,还有适用于Raspberry Pi的版本。FreeBSD也是Mac OS […]

  5. FreeBSD 20岁生日快乐 - June 22, 2013

    […] BSD 和 PC-BSD等,还有适用于Raspberry Pi的版本。FreeBSD也是Mac OS […]

  6. FreeBSD 20岁生日快乐 | Zack's Blog - June 22, 2013

    […] FreeBSD衍生出很多其他项目,包括DragonFly BSD 和 PC-BSD等,还有适用于Raspberry Pi的版本。 […]

  7. FreeBSD 20岁生日快乐帮你资源 - 业界资讯网络分享站 - June 22, 2013

    […] BSD 和 PC-BSD等,还有适用于Raspberry Pi的版本。FreeBSD也是Mac OS […]

  8. arduino与人工智能 == 开源机器人 | Unix #! Coffee (测试版) - June 24, 2013

    […] BSD 和PC-BSD等,还有适用于Raspberry Pi的版本。FreeBSD也是Mac OS […]

  9. FreeBSD 20 岁生日快乐 | 北京炫酷网站设计建设自助智能建站系统 - June 25, 2013

    […] BSD 和PC-BSD等,还有适用于Raspberry Pi的版本。FreeBSD也是Mac OS […]

  10. FreeBSD Build for Raspberry Pi | 세상을 향한 들로그 - September 2, 2013

    […] 참고 : […]

  11. Raspberry Pi – le principali distribuzioni / progetti disponibili – Gda Tech - January 27, 2016

    […] Pi Thin Client – OpenEnergyMonitor – FreeBSD – Gentoo PI – FishPi – RMPrepUSB – piCore-X […]

Leave a Reply

Text formatting is available via select HTML. <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>