===== Building an image for Raspberry Pi 2 =====
**Update: Raspberry Pi 2 is supported by the [[https://github.com/freebsd/crochet|Crochet build tool]].**
* Build and install the u-boot port in sysutils/u-boot-rpi2 (or install the package)
* Create the image file (and setup the partitions):
# truncate -s 2g rpi2.img
# mdconfig -f rpi2.img -x 63 -y 255
md0
# gpart create -s MBR md0
md0 created
# gpart add -t '\!12' -a 63 -s 50m md0
md0s1 added
# gpart set -a active -i 1 md0
active set on md0s1
# newfs_msdos -F 16 /dev/md0s1
/dev/md0s1: 102240 sectors in 12780 FAT16 clusters (4096 bytes/cluster)
BytesPerSec=512 SecPerClust=8 ResSectors=1 FATs=2 RootDirEnts=512 Media=0xf0 FATsecs=50 SecPerTrack=63 Heads=255 HiddenSecs=0 HugeSectors=102375
# gpart add -t freebsd -a 4m md0
md0s2 added
# gpart create -s BSD md0s2
md0s2 created
# gpart add -t freebsd-ufs md0s2
md0s2a added
# newfs -U md0s2a
/dev/md0s2a: 1992.0MB (4079616 sectors) block size 32768, fragment size 4096
using 4 cylinder groups of 498.03MB, 15937 blks, 63872 inodes.
with soft updates
super-block backups (for fsck_ffs -b #) at:
192, 1020160, 2040128, 3060096
* Build and install %%FreeBSD%% into ufs partition:
# mount /dev/md0s2a /mnt
# make TARGET_ARCH=armv6 UBLDR_LOADADDR=0x2000000 buildworld
# make TARGET_ARCH=armv6 KERNCONF=RPI2 buildkernel
# make TARGET_ARCH=armv6 DESTDIR=/mnt installkernel
# make TARGET_ARCH=armv6 DESTDIR=/mnt installworld distribution
* Save a copy of ubldr and rpi2.dtb that will be used by Raspberry pi firmware:
# cp /mnt/boot/ubldr .
# cp /mnt/boot/dtb/rpi2.dtb .
* Install the fstab, (a basic) rc.conf and /etc/ttys:
# mkdir /mnt/boot/msdos
# cat << EOF > /mnt/etc/fstab
/dev/mmcsd0s1 /boot/msdos msdosfs rw,noatime 0 0
/dev/mmcsd0s2a / ufs rw,noatime 1 1
md /tmp mfs rw,noatime,-s30m 0 0
md /var/log mfs rw,noatime,-s15m 0 0
md /var/tmp mfs rw,noatime,-s5m 0 0
EOF
# cat << EOF > /mnt/etc/rc.conf
hostname="rpi2"
ifconfig_ue0="DHCP"
sshd_enable="YES"
sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
EOF
# cat << EOF > /mnt/etc/ttys
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
ttyu0 "/usr/libexec/getty 3wire" vt100 on secure
EOF
* Copy your ssh key:
# mkdir /mnt/root/.ssh
# chmod 700 /mnt/root/.ssh
# cat ~myuser/.ssh/id_rsa.pub >> /mnt/root/.ssh/authorized_keys
# echo "PermitRootLogin yes" >> /mnt/etc/ssh/sshd_config
# umount /mnt
* Copy the u-boot to FAT partition:
# mount_msdosfs /dev/md0s1 /mnt
# cp /usr/local/share/u-boot/u-boot-rpi2/* /mnt
# cp ubldr rpi2.dtb /mnt
# umount /mnt
* Detach the memory disk and write the image to SD card:
# mdconfig -d -u 0
# dd if=rpi2.img of=/dev/ bs=1m
Enjoy!
=== References ===
* [[/arm|FreeBSD ARM]]
* [[arm/Raspberry Pi|FreeBSD on Raspberry Pi]]
* [[arm/crossbuild|Developing and Cross-building for ARM Systems]]
----
{{tag>HowTo}}