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 文件默認在編譯后的 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文章
2655瀏覽量
47293 -
Linux
+關(guān)注
關(guān)注
87文章
11209瀏覽量
208721 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4284瀏覽量
62325
發(fā)布評論請先 登錄
相關(guān)推薦
評論