在系统初始化过程中始能终端串口输出

因为要移植kgdb, 需要串口在系统初始化的过程中就能使用,而以前的代码串口终端打印要到串口驱动初始化完成后才能生效.所以决定把在init/main.c里start_kernel的console_init给用起来,这样kgdb也可以用,调试串口驱动前的代码也可以用.

下面是一些要点:
1. console_init会执行放在*(.con_initcall.init)段里的代码,而console_initcall(xxx_serial_console_init)会在
编译的时候把xxx_serial_console_init放在*(.con_initcall.init),所以初始化串口的代码要放在xxx_serial_console_init 函数里。
2. 由于console_init会在vm初始化前执行,所以在整个串口初始化的过程中不能调用任何vm 相关的函数,比如vmalloc,ioremap等,另外也不能调用任何和clock相关的函数,比如clk_get, clk_enable等。
3. 另外在初始化过程中要用到串口platform device的信息,但这个时侯platform bus还没有初始化,所以我们只能通过指针共享的方式传递platform device 的信息。
4. 这段代码的调试可能有点困难,最好实现把LED驱动或自己写个串口输出函数。

下面就以atmel里的代码为例说明哪些是要实现的(Linux 2.6.28)

1.linux/drivers/serial/atmel_serial.c 的__init atmel_console_init(void)函数,里面的atmel_default_console_device是
由platform device传递过来的, 哪个是default console 是在板子做map io的时候传递进来的。这个时候map io已经完成,但init_machine, init_irq还没有做。struct atmel_uart_port atmel_ports结构经行初始化,初始化的内容是从platform_device atmel_default_console_device里得到的。
2.代码执行的流程为:register_console --> atmel_console_setup --> atmel_set_termios

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值