console_init()分析
启动阶段初始化控制台流程分析,
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);
}
console_init()分析的更多相关文章
- kernel启动console_init之前console不可用时发生crash的调试方法
http://code.google.com/p/innosoc/wiki/KernelBootCrashDebug 注: 如在i386_start_kernel中加入:early_printk(&q ...
- LINUX下的tty,console与串口分析
1.LINUX下TTY.CONSOLE.串口之间是怎样的层次关系?具体的函数接口是怎样的?串口是如何被调用的? 2.printk函数是把信息发送到控制台上吧?如何让PRINTK把信息通过串口送出?或者 ...
- lk启动流程详细分析
转载请注明来源:cuixiaolei的技术博客 这篇文章是lk启动流程分析(以高通为例),将会详细介绍下面的内容: 1).正常开机引导流程 2).recovery引导流程 3).fastboot引导流 ...
- Linux内核启动分析
张超<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 我的代码可见https://www.shiyanlo ...
- Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7)
http://blog.chinaunix.net/uid-20543672-id-3157283.html Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3 ...
- 第4阶段——制作根文件系统之分析init进程(2)
本节目标: (1) 了解busybox(init进程和命令都放在busybox中) (2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情 (3) 分析busybox中init进 ...
- 第3阶段——内核启动分析之start_kernel初始化函数(5)
内核启动分析之start_kernel初始化函数(init/main.c) stext函数启动内核后,就开始进入start_kernel初始化各个函数, 下面只是浅尝辄止的描述一下函数的功能,很多函数 ...
- Android 7.0 启动篇 — init原理(二)(转 Android 9.0 分析)
======================================================== ================================== ...
- 《Linux内核原理与分析》第四周作业
课本:第3章 MenuOS的构造 内容总结 计算机的"三大法宝" 存储程序计算机 函数调用堆栈 中断 操作系统的"两把宝剑" 中断上下文切换:保存现场和恢复现场 ...
随机推荐
- 优化MyEclipse编译速度慢的问题
转载大神的 https://www.cnblogs.com/luxd/p/5999217.html
- NET Core应用中如何记录和查看日志
NET Core应用中如何记录和查看日志 日志记录不仅对于我们开发的应用,还是对于ASP.NET Core框架功能都是一项非常重要的功能特性.我们知道ASP.NET Core使用的是一个极具扩展性的日 ...
- JS——三种嵌入页面的方式
一 行间事件 二 页面script标签嵌入 三 外部引入 <!DOCTYPE html> <html lang="en"> <head> < ...
- Ubuntu里let's encrypt通配符证书的自动续期更新
环境与需求: Ubuntu云服务器上,已经做好了ssl证书的免费申请,但是证书的期限是3个月,3个月到期后必须重新申请或者更新.由于k8s集群里的服务一直在使用证书,每三个月人工更新太麻烦,所以想要配 ...
- linux yum 安装
################## http://rpm.pbone.net/ 下载下来的包放到本地yum源中,然后在这个目录下面重新生成依赖关系就可以使用yum包来完成安装了 tt 1. 生成依赖 ...
- 简单记录下SpringCloud的微服务架构和一些概念
一.微服务的注册与发现——Eureka 和许多分布式设计一样,分布式的应用一般都会有一个服务中心,用于记录各个机器的信息.微服务架构也一样,我们把一个大的应用解耦成这么多个那么多个服务,那么在想要调用 ...
- 通过sqlserver sa密码修改windows操作系统密码
如果你不记得windows管理员的密码了,但知道sqlserver sa用户的密码,可以通过以下方式修改: 进入SQL之后执行以下语句: -- 允许配置高级选项 EXEC sp_configure ...
- 13.JAVA-包package、import使用
1.包的定义 之前我们学习java时,生成的class文件都是位于当前目录中,假如出现了同名文件,则会出现文件覆盖问题,因此就需要设置不同的目录(定义包),来解决同名文件冲突问题. 并且在大型项目中, ...
- Java的API及Object类、String类、字符串缓冲区
Java 的API 1.1定义 API: Application(应用) Programming(程序) Interface(接口) Java API就是JDK中提供给开发者使用的类,这些类将底层的代 ...
- They say Rome wasn't built in a day, and yet what a difference a day makes.
They say Rome wasn't built in a day, and yet what a difference a day makes.有人说罗马不是一天建成的,但一天却能改变很多事.