after 2 days of debugging, I finally found the root problem why my device driver code can't pass the compile, it's because:
in the crt0.S file.
if I commented this line, and then include it in my code, then the whole thing pass the compile without any error.
So my question is does crt0.S really need this board.h file??