Hi Dave,
As a possible option, see here for a combined GPIO, I2C and SPI library:
This library does not use ioctl, it uses direct register calls internally, so it is fast.
In a nutshell it exposes a function called spi_transact. You call it passing in the byte to transmit and the pointer to a byte for the received value, and it performs the SPI interaction.
It can be used in a loop to perform multiple byte tx or rx transfers.
It's very basic, it is up to the user to store the bytes into an array or handle any conversions.
As for support for the library.. I can't support the code much, I have other work too, but if it is a quick question I can try to answer it. It's not mega-complicated, but some C knowledge, maybe even a 'scope or logic analyzer may be needed to use and troubleshoot
(not saying there will be issues to require this, but just want to pre-empt it).
Another thing is that working with radio devices can (sometimes) be non-trivial. The reason is, some radio events may occur asynchronously. Code may need to be multi-threaded to handle this. It's sometimes not as easy as 'fire-and-forget' so the code needs
to implement a state machine to bring up a radio module, transmit, wait for a response, maybe retransmit upon some timer expiry, and so on. I don't know if the LoRa chip or module does that automatically or if the user is expected to implement such things
in software.