只分析串口驱动,和console相关的部分暂时省去。
内核串口部分需要用到tty部分,tty包含了tty内核和tty线路规程。这些是在串口代码之前初始化。
1.tty_ldisc线路规程的初始化
只要是函数
driver/tty/tty_io.c
console_init()
- void __init console_init(void)
- {
- initcall_t *call;
-
- /* Setup the default TTY line discipline. */
- tty_ldisc_begin();
-
- /*
- * set up the console device so that later boot sequences can
- * inform about problems etc..
- */
- call = __con_initcall_start;
- while (call < __con_initcall_end) {
- (*call)();
- call++;
- }
- }
此处和tty相关的就是函数tty_ldisc_begin(),内核通过此函数来初始化tty线路规程的相关操作。
- void tty_ldisc_begin(void)
- {
- /* Setup the default TTY line discipline. */
- (void) tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY);
- }
tty_ldisc_begin函数原来是对tty_register_ldisc的封装,从名字就可以看出来这个是对tty线路规程的初始化操作(内核线路规程的简称是ldisc)
此处先看函数调用的两个参数,其中第一个参数N_TTY是一个宏,第二个参数是内核tty线路规程的操作方法集
- #define N_TTY 0
- #define N_SLIP 1
- #define N_MOUSE 2
阅读(2783) | 评论(0) | 转发(3) |