console_init
分析
Linux 啟動函數(shù) start_kernel 會調(diào)用 console_init 函數(shù)。
linux4.14/kernel/printk/printk.c
linux4.14/drivers/tty/n_tty.c
我們可以看到,console_init 主要做了兩件事情:
1、n_tty_init 主要調(diào)用 tty_register_ldisc(N_TTY,
&n_tty_ops) 注冊 tty 線路規(guī)程。
2、
call = __con_initcall_start;
while (call < __con_initcall_end) {
(*call)();
call++;
}
這里主要是調(diào)用 __con_initcall_start 到 __con_initcall_end
之間的函數(shù)。
__con_initcall_start 和 __con_initcall_end 定義在:
linux4.14/include/asm-generic/vmlinux.lds.h
中間包含了 .con_initcall.init 段:
linux4.14/include/linux/init.h
我們通過 console_init 聲明的驅(qū)動模塊,就會出現(xiàn)在這個段中,被調(diào)用。普通我們聲明的驅(qū)動模塊都是使用
module_init,如果我們寫的是串口驅(qū)動,可以使用console_init 聲明。
如果要看具體中間有什么函數(shù),可以查看編譯 Linux 內(nèi)核的輸出 System.map 文件,這個文件記載了從頭到尾
Linux 干了什么,具體的地址存儲了什么東西。
System.map 文件默認(rèn)在編譯后的 Linux 內(nèi)核根目錄下, 當(dāng)然我們也可以修改到其他目錄。
這里會有三列:地址,區(qū),函數(shù)名字。
如果后面我們使用 console_init(serial_5685_xxxx)去聲明我們的驅(qū)動,那么這個
serial_5685_xxxx 就會出現(xiàn)在 __con_initcall_start 和 __con_initcall_end 之間,就會被調(diào)用。
-
模塊
+關(guān)注
關(guān)注
7文章
2736瀏覽量
47796 -
Linux
+關(guān)注
關(guān)注
87文章
11351瀏覽量
210512 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4346瀏覽量
63022
發(fā)布評論請先 登錄
相關(guān)推薦
嵌入式linux 串口console注冊
如何解決板子啟動時串口提示can not open init console問題?
「正點原子Linux連載」第三十六章Linux內(nèi)核啟動流程
詳細分析嵌入式Linux系統(tǒng)啟動流程
在rtthread中jlink的rtt作為console口的具體使用流程
Linux運行級init詳解
詳解bootloader的執(zhí)行流程與ARM Linux啟動過程分析
![詳解bootloader的執(zhí)行<b class='flag-5'>流程</b>與ARM <b class='flag-5'>Linux</b><b class='flag-5'>啟動</b>過程<b class='flag-5'>分析</b>](https://file1.elecfans.com//web2/M00/A7/19/wKgZomUMQmGATJLlAABw36rp0a4271.png)
走進Linux之systemd啟動過程
Linux系統(tǒng)下init進程的前世今生
解析基于ARM64的init用戶進程究竟如何啟動?
![解析基于ARM64的<b class='flag-5'>init</b>用戶進程究竟如何<b class='flag-5'>啟動</b>?](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
linux內(nèi)核啟動過程會執(zhí)行用戶空間的init進程
kernel執(zhí)行第一個init應(yīng)用程序的實現(xiàn)原理
![kernel執(zhí)行第一個<b class='flag-5'>init</b>應(yīng)用程序的實現(xiàn)原理](https://file1.elecfans.com/web2/M00/89/33/wKgaomR9hkGAOUDQAAFXpo9IlR0936.jpg)
評論