启动阶段初始化控制台流程分析,

start_kernel
console_init();
-->tty_ldisc_begin();
/* Setup the default TTY line discipline. */
-->(void) tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY);
/*static struct tty_ldisc_ops *tty_ldiscs[NR_LDISCS]的第N_TTY项指向&tty_ldisc_N_TTY*/
-->ldiscs[N_TTY]= &tty_ldisc_N_TTY;
-->调用_con_initcall_start~_con_initcall_end代码段间的所有initcall_t函数

这里主要分析如何执行initcall_t函数,

看看_con_initcall_start~_con_initcall_end间定义了哪些函数,

__con_initcall_start = .;
*(.con_initcall.init)
__con_initcall_end = .;

.con_initcall.init属性的函数在该代码段中,

#define console_initcall(fn) \
static initcall_t __initcall_##fn \
__used __section(.con_initcall.init) = fn

console_initcall宏定义的函数在该代码段中,看看这些宏定义在哪里使用了

/*in drivers/serial/samaung.h*/
console_initcall(s3c_serial_console_init)

在分析s3c_serial_console_init函数在哪里定义

/*in drivers/serial/samsung.h*/
#define s3c24xx_console_init(__drv, __inf) \
static int __init s3c_serial_console_init(void) \
{ \
return s3c24xx_serial_initconsole(__drv, __inf); \
}

上述宏在下面的代码中使用。

/*in drivers/serial/s3c6400.c*/
s3c24xx_console_init(&s3c6400_serial_drv, &s3c6400_uart_inf);

以上找到一个initcall_t函数定义如下:

static int __init s3c_serial_console_init(void)
{
return s3c24xx_serial_initconsole(&s3c6400_serial_drv, &s3c6400_uart_inf);
}

最新文章

  1. cmd命令查看局域网内计算机信息
  2. LeetCode31 Next Permutation
  3. rcp(插件开发) 如何查找自己定义的扩展点
  4. 4.熟悉Java基本类库系列——Java 正则表达式类库
  5. 【CSS3】背景
  6. Python内置函数(14)——bytes
  7. [LeetCode] Top K Frequent Words 前K个高频词
  8. Oracle删除重复行
  9. Unity支持的跨平台
  10. Python高级笔记(四) -- 多继承_方法解析顺序表MRO
  11. HTTP 常见的状态码
  12. Java实现随机生成车牌号
  13. UVA 10405 Longest Common Subsequence
  14. CentOS服务器简单判断CC攻击的命令
  15. NO.4:自学python之路------内置方法、装饰器、迭代器
  16. bzoj 2741 可持久化trie
  17. 不相交集ADT--数组实现
  18. 浙南联合训练赛 H - The number of positions
  19. ios 发布相关材料记录
  20. cordova热更新插件调试

热门文章

  1. NET API 分析器
  2. c++笔记3
  3. 给Visual Studio更换皮肤和背景图
  4. eclipse中安装lombok插件
  5. go语言简单的soap调用方法
  6. 在jquery事件中修改Angular的model
  7. <转>Java 高并发综合
  8. 通过CMD命令行创建和使用Android 模拟器 AVD
  9. userBean之设置属性
  10. 为什么我的C4C Service Request没办法Release到ERP?