Can I implement ecrecover in Solidity directly to avoid using the precompiled ecrecover contract ? What might be the implications?

Hi, I see that the ecrecover function from the precompiled solidity contract ecrecover only returns the signer's address given the prefixed hash of the message along with the r, s and v prameters of the message-signature. I want to retreive the public key and not the address of the signer in a Solidity smart contract for some cross-chain validation purpose.

Is there any other version of ecrecover in solidity that caters to this need?
What are the implications in case I want to write an ecrecover contract myself ? [like gas, infeasibility,e tc]

Thanks in advance.