I didn't want to post in this thread, because I'm told "my way" is way too too much work. But, because it works well, I thought it might help someone, if I include this warning here.
Basically, I'm telling you to learn how to become a linux integrator for your hardware and software stack.
I've done a few custom Linux installations (both from scratch, and based on RHEL/CentOS/Debian). In my experience, for an embedded appliance, it is best to just rip out the entire init system, and start from scratch. I'm also one of those who really dislikes how systemd intervenes, so I tend to use something else than systemd. You can also start with
Devuan if you want a non-systemd Linux installation. (See
here for Devuan on armel, armhf, and ppc64el.)
I typically start with a distribution known to work on the target architecture, and install an utterly minimal system in a virtual machine, so I can construct the init system from ground up, recording which packages et cetera are needed. Usually, my target is to be able to (remount the root partition read-write), and to update the system using the base distribution package management (apt or rpm), then remount the root partition read-only.
For the actual final build, I use a real target system with a known good install and construct the new system to a different mount (MicroSD card, typically).
Unless you have a spinny-disk HDD, an SSD, or equivalent Flash storage, you'll want to make the root mount (core OS stuff) read-only. When running from MicroSD cards, it makes for a much more robust system. In any case, you'll want to use conservative mount flags (noatime, nodiratime, or relatime especially) to minimize writes in general.
This is not nearly as difficult as one might imagine, if you have a computer that can run a virtual machine. It is absolutely fine to run x86 or x86-64 for the init replacement work, even if the target system runs on ARM. Basically, if you start a traditional init or indeed any init variant, you only need to make sure all media is mounted, and you can have init start a login/bash session. It sounds so simple, and it is: the current systemd stuff is mostly bloat and desire for centralized control written by rather poor programmers, and that's what I don't like about it, really; it is not ideological. One doesn't normally understand or believe this, until they actually play with this stuff.
(One of my pet peeves is having services like ModemManager running all the time. Why? If I want a
modem connection, the connection manager could easily ask the service to start then an there, and when the last connection closes, it could stop itself. But nooo, that's not how we do it: we want ModemManager to run all the time, and whenever you have a serial-port like device plugged in to your USB port, ModemManager will probe it like the little rapist it is, making all sorts of USB microcontroller development on Linux harder than it should be. Ahem. Rant over.)
A better option is to create a straightforward init system with a startup script, that starts exactly the services you need. For embedded appliances, that ain't too many of them; a lot of the processes running on a typical Linux machine nowadays are silly little user management crap not needed on an embedded device. You'll also want at least one getty running, so that you can log in to the system via the system console; each init system has a way to ensure it/they run on the ttys you want.
While the components must be compiled/installed separately for each hardware architecture, the exact same software configuration (aside from things like ensuring which hardware drivers need to be probed/loaded, which EGL backend Embedded Qt is using, and such) will work. This is why starting with a distro you like that works on the hardware, but running on x86/x86-64 in a virtual machine, to get a grip how to get the system running in the way you want, is perfectly okay.
Do run SSH, but run it on a nonstandard port, and use a nonstandard username for access (not root, admin, sysadmin, etc.). This is to stop script kiddies from breaking in in case the SSH/TLS library version you use turns out to have an exploitable security hole. Using SSH keys is a good idea, just keep your private key private (with a backup in hard storage).
If you'll have long boot times, you can add a bootsplash. That way you get a professional looking logo/animation during bootup. I prefer to keep the boot times so short a static image suffices. On current systems, if you compile your own kernels, with the display drivers built in, you can throw the bootsplash very, very early in the boot sequence; within a fraction of a second of init starting. (And on most embedded systems, that means within a second or two of powering up the system.)
You can run
Embedded Qt on top of "raw" EGL (RPi, Mali, i.MX6), if your application is the only one and is fullscreen. You don't run Xorg or window manager or session manager, as Qt connects directly to the hardware device; you do need to configure and compile Qt for that hardware, though. I recommend running the applications using a dedicated user and group, with udev rules granting audio and display hardware access to that group.
If you want multiple applications, you can run Xorg and a window manager you like. (These are started as root, but the applications as dedicated users.)
If you go this route, you'll want to use SBCs that upstream their hardware support, so you can use "vanilla" kernels (from kernel.org, or from the distribution you used as a basis) and are not beholden to the hardware vendor providing binary driver updates for your hardware for the kernel version you want. (For this reason alone, I like some of the Amlogic based Linux SBCs, like La Potato, La Frite, Odroid-C1+, and Odroid-C4. Only have two of those four, though.)
Also, if building a complete Linux distro from scratch, from sources, is something you get interested in, or you find you have to recompile a particular package for your own needs, see
linuxfromscratch.org. They have lots of information on how to build a system from scratch, and how to compile/massage some packages to work better.