So you get constant red cross on GPS if you boot just with flight battery.
If you boot with USB power and no battery the GPS works correctly, and if you then plug in the battery and unplug USB, it continues to work fine.
Is the GPS plugged straight into the FC (mainport or flexiport or flexiIO) with nothing else (OSD?) connected to it there, no power wires going elsewhere?
Do you have something strange configured for telemetry? Do you use OSD?
Maybe just post your uav file (File -> Export UAV Settings) and describe all your wiring, and I can see if there is an issue.
Wiring should be just:
battery to ESC
ESC servo wire to FC
ESC motor wires to motor.
FC to RC receiver (what protocol, SBus, PPM, PWM, etc.) where is it connected?
FC to some servos.
FC to GPS (which port on FC?) (what kind of GPS)
FC to mag on GPS (do you have an I2C aux mag connected?)