console_init
分析
Linux 啟動函數 start_kernel 會調用 console_init 函數。
linux4.14/kernel/printk/printk.c
linux4.14/drivers/tty/n_tty.c
我們可以看到,console_init 主要做了兩件事情:
1、n_tty_init 主要調用 tty_register_ldisc(N_TTY,
&n_tty_ops) 注冊 tty 線路規程。
2、
call = __con_initcall_start;
while (call < __con_initcall_end) {
(*call)();
call++;
}
這里主要是調用 __con_initcall_start 到 __con_initcall_end
之間的函數。
__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 聲明的驅動模塊,就會出現在這個段中,被調用。普通我們聲明的驅動模塊都是使用
module_init,如果我們寫的是串口驅動,可以使用console_init 聲明。
如果要看具體中間有什么函數,可以查看編譯 Linux 內核的輸出 System.map 文件,這個文件記載了從頭到尾
Linux 干了什么,具體的地址存儲了什么東西。
System.map 文件默認在編譯后的 Linux 內核根目錄下, 當然我們也可以修改到其他目錄。
這里會有三列:地址,區,函數名字。
如果后面我們使用 console_init(serial_5685_xxxx)去聲明我們的驅動,那么這個
serial_5685_xxxx 就會出現在 __con_initcall_start 和 __con_initcall_end 之間,就會被調用。
-
模塊
+關注
關注
7文章
2695瀏覽量
47431 -
Linux
+關注
關注
87文章
11292瀏覽量
209326 -
函數
+關注
關注
3文章
4327瀏覽量
62569
發布評論請先 登錄
相關推薦
評論