This may simplistic, but spidev is a generic user space interface for all Linux systems.
The spi-bcm2835 module contains the knowledge of what the BCM2835's SPI hardware looks like and how it is controlled. So on a Raspberry Pi the spidev driver will call functions in spi-bcm2835 to implement the hardware access.
Likewise for a Linux system that uses the ...
A solution to preserve the data transfer rate is to use a data converter such as a 74HC595.
Connect SCLK to SRCK, SS (CS0..) to RCK and MOSI to SER. you can use the SS signal to trigger the second Raspberry
On the 74HC595, the G pin is connected to GND and the SRCLR pin to VDD.
Which version of Pi4J are you using?
Examples with SPI can be found here:
Setting dtparam & dtoverlay in a program is futile.
These are instructions to Device Tree to configure the operating system at boot time.
Edit your config.txt.
From what I've heard, Linux SPI drivers are quite sensitive to CPU frequency changes, and on some systems they are plain broken if you use them together with dynamic frequency scaling. Try setting the CPU governor to performance and see if that helps.
The Pi is a 3V3 device, most Arduinos are 5V.
It is not safe to feed a 5V signal into a Pi GPIO.
The Pi only works as a SPI bus master, it controls the clock.
This means that the SPI signals are:
Clock (SCLK) from Pi to Arduino.
Master Out Serial In (MOSI) from Pi to Arduino
Master In Serial Out (MISO) from Arduino to Pi
Chip Select (CS) from Pi to Arduino