Apart from the boot (with first pages hard code allocated), after the kernel initializes should be totally memory independent. Verify if this works.
If works, move the kernel to a higher address? Or not since it is so small?
Check if it is possible load the kernel is a random memory position (the virtual memory)