A correct method to update the embedded systems.

Hi,

I have a question about a right way to build the world and kernel for armX platforms.

I have an AMD64 host, a "big brother" one. I have several ARM-based hosts (Raspberry Pi and Orange Pi) that I use to a number of small tasks. Images for ARM hosts were downloaded, written to SD cards, configured, and are periodically updated. I do this on my "big brother", with its `/usr/src/` file system, where I have previously create kernel files for all of them.

I just run commands, something like these (by couple of scripts from a folder in my home, of course):
Bash:
THIS=`pwd`
mk_jobs="$(sysctl -n hw.ncpu)"
_BUILD_ENV="TARGET=arm64 MALLOC_PRODUCTION=YES -j${mk_jobs} SRCCONF=${THIS}/etc/src.conf -s"
ln -sf /usr/src
cd src
make ${_BUILD_ENV} UBLDR_LOADADDR=0x2000000 buildworld
make ${_BUILD_ENV} KERNCONF=RPI4_RHINO buildkernel

Then I mount SD-to-update with the OS image and run next part:
Bash:
DST=/mnt/rpi4
_BUILD_ENV="TARGET=arm64 TARGET_ARCH=aarch64 MALLOC_PRODUCTION=YES SRCCONF=${THIS}/etc/src.conf DESTDIR=${DST} -j${mk_jobs}"
make ${_BUILD_ENV} KERNCONF=RPI4_RHINO installkernel
make ${_BUILD_ENV} installworld
mergemaster -A aarch64 -D ${DST}
...unmount the SD, return it into the Pi host and boot from it.

It almost always works perfectly, and has for nearly ten years!
I never used crochet, I never made targets 'toolchains' nor 'xdev-*'.

There is the question: is this way I do it wrong ? :-) not completely correct ?
 
I don't generally support PI related questions but in the the generic embedded sense, if it works for you then go with it. In the traditional embedded world you would create an image on the host system and use an uploader mechanism to put the image on the target via JTAG or a serial boot loader on the embedded device. The image would then reside on flash memory on the target.
 
Back
Top