**Transition to Git is in progress** As of r364891 the release script only supports Git and subsequently rendering the following instructions not working as intended however some functionality is still not implemented therefore this page wont be updated until they are. A tutorial on how to build images for arm devices using %%FreeBSD%%'s release building infrastructure. ==== Download source ==== svnlite checkout https://svn.freebsd.org/base/head /usr/src **Note:** it's **preferred** that you keep ''%%/usr/src%%'' and the version you're trying to build **in sync**. To checkout a specific revision use ''%%-rXXX%%'' where XXX is the revision \\ **Requirement:** The host **needs** to run a version **equal** or greater to what you're building. ==== Remove debugging, profiling and tests (optional) ==== Create a directory which will contain ''%%make.conf%%'' and ''%%src.conf%%'' mkdir /etc/release-confs Populate ''%%/etc/release-confs/make.conf%%'' WITHOUT_DEBUG=YES MK_PROFILE=no See [[https://man.freebsd.org/make.conf/5|man 5 make.conf]] and [[https://svnweb.freebsd.org/ports/head/UPDATING?view=markup|/usr/src/UPDATING]] for more information Populate ''%%/etc/release-confs/src.conf%%'' WITHOUT_DEBUG_FILES=1 WITHOUT_KERNEL_SYMBOLS=yes WITHOUT_TESTS=yes WITHOUT_PROFILE=yes WITHOUT_LLVM_ASSERTIONS=yes WITH_MALLOC_PRODUCTION=yes By removing symbols and debugging information you're limiting the ability to debug crashes **severely**. See [[https://man.freebsd.org/src.conf/|man 5 src.conf]] for more information These files needs to be referenced in the configuration file for your target using the variables ''%%MAKE_CONF%%'' and ''%%SRC_CONF%%'' as mentioned in [[https://www.freebsd.org/cgi/man.cgi?release(7)|man 7 release]]. ==== Add board specific configuration (if needed) ==== This example is for [[https://linux-sunxi.org/Orange_Pi_PC|Orange Pi PC]] as this board has support but doesn't have a configuration. In many cases you can use another board's configuration as template as long as it uses the same %%SoC%%. Copy ''%%BANANAPI.conf%%'' to a new location cd /usr/src/release cp -Rp arm/BANANAPI.conf arm/ORANGEPI-PC.conf Change ''%%EMBEDDEDPORTS%%'' path to corresponding u-boot port EMBEDDEDPORTS="sysutils/u-boot-bananapi" --> EMBEDDEDPORTS="sysutils/u-boot-orangepi-pc" Change kernel to ''%%GENERIC-NODEBUG%%'' **if** you want to **disable** kernel debugging KERNEL="GENERIC" --> KERNEL="GENERIC-NODEBUG" ''%%BOARDNAME%%'' variable sets filename of generated image file. export BOARDNAME="BANANAPI" --> export BOARDNAME="ORANGEPI-PC" Add ''%%SRCBRANCH="base/head@rXXX"%%'' where XXX is the revision number (optional) SRCBRANCH="base/head@r349025" Change ''%%UBOOT_DIR%%'' to corresponding u-boot install path (u-boot-orangepi-pc) UBOOT_DIR="/usr/local/share/u-boot/u-boot-bananapi" --> UBOOT_DIR="/usr/local/share/u-boot/u-boot-orangepi-pc" ==== Begin compilation ==== sh release.sh -c arm/ORANGEPI-PC.conf The release script will automatically set amount of jobs (see [[https://www.freebsd.org/cgi/man.cgi?release(7)|man 7 release]] for more information). The compiled image will be placed in ''%%/scratch/R%%'' . ==== Sanitize image ==== If you want to distribute your image after doing modifications and/or installing packages on a "live" system you first need to clear out system specific files. Mount your / partition, remove the following directories and files before making a copy and don't forget to touch /firstboot . * /etc/hostid * All key files in /etc/ssh * /var/db/entropy (clean directory) * /boot/entropy * touch /firstboot ==== See also ==== [[arm/Build_image_notes|notes about the prebuilt images]] ---- {{tag>HowTo}}