参考:http://blog.csdn.net/ralph_sqd/article/details/6387106
通过查看LOG,添加打印,确认正常的函数调用关系
[ 0.000000] Backtrace:
[ 0.000000] [<c00341cc>] (dump_backtrace+0x0/0x10c) from [<c03297b0>] (dump_stack+0x18/0x1c)
[ 0.000000] r7:00000000 r6:00000000 r5:c0481ed0 r4:c045e210
[ 0.000000] [<c0329798>] (dump_stack+0x0/0x1c) from [<c0049abc>] (register_console+0x314/0x374)
[ 0.000000] [<c00497a8>] (register_console+0x0/0x374) from [<c017d688>] (s3c24xx_serial_initconsole+0x6c/0x90)
[ 0.000000] [<c017d61c>] (s3c24xx_serial_initconsole+0x0/0x90) from [<c0015cb8>] (s3c_serial_console_init+0x18/0x20)
[ 0.000000] r7:c0448428 r6:c0020c9c r5:c001f174 r4:c001f174
[ 0.000000] [<c0015ca0>] (s3c_serial_console_init+0x0/0x20) from [<c0014e58>] (console_init+0x28/0x3c)
[ 0.000000] [<c0014e30>] (console_init+0x0/0x3c) from [<c00088d4>] (start_kernel+0x19c/0x264)
[ 0.000000] r5:c0020ca0 r4:c0481220
[ 0.000000] [<c0008738>] (start_kernel+0x0/0x264) from [<30008034>] (0x30008034)
[ 0.000000] r5:c0481530 r4:c0007175
[ 0.000000] console [ttySAC0] enabled
分析:
init/main.c------->start_kernel
------>console_init();
vim ./arch/arm/kernel/vmlinux.lds.S
通过查找:con_initcall.init
再去System.map 查找:__con_initcall_start 和 __con_initcall_end
中间的函数,即为加载console初始化函数:console_initcall(s3c_serial_console_init);