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