MAVLink vs MAVROS

Does the .elf running on the RPi2 communicates with the Navio+ using MAVLink or MAVROS?

We basically want to modify one of the flight modes code so do we need to use MAVLink or MAVROS to send commands to the Navio+ from the RPi2?

Navio+ contains sensors that are connected to I2C and SPI buses on Raspberry Pi. APM software running on RPi reads these sensors over I2C\SPI using commands supported by these sensors.

You can use MAVLink or MAVROS to communicate with APM software (not the Navio+ board).

Thank you for the clarification. One more question. Is there any reason on when I should use one vs the other?

MAVLink is a protocol to control APM, MAVROS is a bridge between APM-MAVLink and ROS.
So it depends if you want to use ROS.