> When the kernel is booting, it gets to the point where console_init() > is called, which calls individual early console initialization > functions. In my case it's serial8250_console_init(). Before > register_console() is called in serial8250_console_init(), everything > seems fine because the debugging logs are printed on the serial port. > But once register_console() is called, the serial port continues > spitting out ?. See the following message. What's wrong?
FYI. The problem was caused by the endianess of io mem access. My 16550-compatible uart port is on a 32-bit bus. The io mem is big endian. The current serial8250 driver always call read*/write*() to access uart control registers. These functions are implemented for little endian access only. So I have to add some awful #ifdef in the driver to call big endian access functions. Regards, -Shawn.