江西建设厅网站查询施工员,成都建筑网站建设,长沙门户网站开发,网站项目报价方案前言 在前面 printf 的调试 我们只是调试到了 glibc 调用系统调用, 封装了参数 stdout, 带输出的字符缓冲, 以及待输出字符长度
然后内核这边 只是到了 write 的系统调用, 并未向下细看
我们这里 稍微向下 细追一下, 看看 到达设备层面 这里是怎么具体的 impl 的 测试用例…前言 在前面 printf 的调试 我们只是调试到了 glibc 调用系统调用, 封装了参数 stdout, 带输出的字符缓冲, 以及待输出字符长度
然后内核这边 只是到了 write 的系统调用, 并未向下细看
我们这里 稍微向下 细追一下, 看看 到达设备层面 这里是怎么具体的 impl 的 测试用例
测试用例如下, 这里仅仅是一个简单的输出
(initramfs) cat Test01Sum.c #include stdio.hint main(int argc, char** argv) {int x 2;
int y 3;
int z x y;printf( x y %d\n , z);}tty 输出的调试
接着 printf 的调试 的 vfs_write 的这里, 看一下 上下文, 待输出的字符串为 x y 5\n
然后 输出的 stdout 文件的 inode_no 为 7407 inode 7407 在这里对应的设备为 (initramfs) ls -ail /dev | grep console7407 crw------- 1 5, 1 console设备 /dev/console
该字符设备初始化是在 tty_init 的时候进行初始化的
主设备号位 TTYAUX_MAJOR 为 5, 此设备号位 1, 相关操作 ops 为 console_fops
vfs 层面 write 操作映射到下层是 console_fops.redirected_tty_write console_fops.redirected_tty_write 关于 tty-tty_ldisc-ops
这层抽象的设计, 等以后有所收获之后 再回来补充
文件关联的 tty 是来自于 file-private_data
这一层也有一层抽象, tty-tty_ldisc, 这里对应的是 n_tty_ops process_output_block 根据 换行回车, 制表符 分割 输出数据到 tty
ntty_ops 输出是根据 tty-ops 来写出数据 关于 tty-ops
这层抽象的设计, 等以后有所收获之后 再回来补充 拷贝待输出数据到 输出缓冲区, 然后 刷出缓冲区 此时暂时无输出 执行了 __uart_start 之后的某个时间点将待输出数据, 输出 此时输出情况如下 接下来是输出 x y 5 之后的这个 换行回车 此时输出情况如下 ntty 的初始化
ntty 是默认的 tty, 然后 start_kernel 的时候初始化 console 的时候, 首先注册了默认的 ntty 的相关 ops tty 的初始化
kernel_init 的时候 serial8250_init 的时候注册了 ttyS 的驱动相关 kernel_init 的时候, 会尝试 open /dev/console, 这里会触发 对应的 tty, 以及相关初始化 如下为 分配了 /dev/console 对应的 tty 的空间, 然后初始化 ldisc 为 n_tty_ops
上面初始化 ntty 将 ntty 注册到了 tty_ldiscs_lock 初始化 tty-ops 为 driver-ops, 上面的 uart_register_driver 中初始化 driver 的 ops 为 uart_ops uart_ops 的定义如下 从 xmit 的 buf 输出到 8250串口
这里是接着上面的 __uart_start 之后产生了中断
然后这里具体的讲 xmit-buf 的数据输出到 8250串口
之所以叫串口 就是因为它是按照 单字节传输的, 这里循环 待处理的字符输出到 8250串口
将所有输出输出完成之后 会走 uart_circ_empty(xmit) 的判断, 进而 break 跳出循环 比如这里执行到 第五次循环, 剩余待输出字符为 5 个, y 5 控制台输出如下 假设我们键盘录入 a, 通过 8250 串口输出 a 到控制台
向 8250 串口依次输出的是
7 5 7 97 5 7 5 第一对 7 5 是 n_tty 缓冲区接收到 a 的输入之后
有一个 tty-ops-flush_chars, 因为缓冲区没有数据, 因此直接是一个开始字节, 一个结束字节 第一对中的 5 主要是 xmit-buf 中暂时没有待输出的 字节序列, 因此直接 传输了一个结束标记 开始字节中的 7, 主要是在 up-iter 中打上了 UART_IER_THRI 的标记, 由 0x101 变成了 0x111 结束字节中的 5, 主要是在 up-iter 中打上了 UART_IER_THRI 的标记, 由 0x111 变成了 0x101 开始, 结束 的 控制字符意义如下
7 表示 UART_IER_RDI UART_IER_THRI UART_IER_RLSI
5 表示 UART_IER_RDI UART_IER_RLSI
#define UART_IER_MSI 0x08 /* Enable Modem status interrupt */
#define UART_IER_RLSI 0x04 /* Enable receiver line status interrupt */
#define UART_IER_THRI 0x02 /* Enable Transmitter holding register int. */
#define UART_IER_RDI 0x01 /* Enable receiver data interrupt */ 第二对 7 97 5 主要是来自于输出了 a 到 /dev/console
开始标记, 输出第一个字节 7 a 输出到 8250 串口, 主要是来自于本文主讲的内容, 讲 xmit-buf 的数据输出到 8250 串口 第三个字节 5 的输出, 主要是 xmit-buf 中的输出完了之后发送的一个结束标记 第三对 7 5 主要是来自于 上面 ntty.n_tty_write 的流程中 process_output_block 之后
有一个 tty-ops-flush_chars 的流程
输出了一个 开始标记, 发现 xmit-buf 中暂无输出数据, 然后输出了一个结束标记 完 文章转载自: http://www.morning.zhnpj.cn.gov.cn.zhnpj.cn http://www.morning.jrhmh.cn.gov.cn.jrhmh.cn http://www.morning.c7627.cn.gov.cn.c7627.cn http://www.morning.pgzgy.cn.gov.cn.pgzgy.cn http://www.morning.nba1on1.com.gov.cn.nba1on1.com http://www.morning.txtzr.cn.gov.cn.txtzr.cn http://www.morning.sfqtf.cn.gov.cn.sfqtf.cn http://www.morning.rswfj.cn.gov.cn.rswfj.cn http://www.morning.hngmg.cn.gov.cn.hngmg.cn http://www.morning.ggrzk.cn.gov.cn.ggrzk.cn http://www.morning.pqkyx.cn.gov.cn.pqkyx.cn http://www.morning.xpmwt.cn.gov.cn.xpmwt.cn http://www.morning.mrfnj.cn.gov.cn.mrfnj.cn http://www.morning.zxzgr.cn.gov.cn.zxzgr.cn http://www.morning.sqqds.cn.gov.cn.sqqds.cn http://www.morning.wqrk.cn.gov.cn.wqrk.cn http://www.morning.rxfbf.cn.gov.cn.rxfbf.cn http://www.morning.iknty.cn.gov.cn.iknty.cn http://www.morning.wqbrg.cn.gov.cn.wqbrg.cn http://www.morning.grlth.cn.gov.cn.grlth.cn http://www.morning.cwwbm.cn.gov.cn.cwwbm.cn http://www.morning.swkpq.cn.gov.cn.swkpq.cn http://www.morning.ztfzm.cn.gov.cn.ztfzm.cn http://www.morning.jwcmq.cn.gov.cn.jwcmq.cn http://www.morning.tpwrm.cn.gov.cn.tpwrm.cn http://www.morning.chjnb.cn.gov.cn.chjnb.cn http://www.morning.rhgtc.cn.gov.cn.rhgtc.cn http://www.morning.rqkk.cn.gov.cn.rqkk.cn http://www.morning.fblkr.cn.gov.cn.fblkr.cn http://www.morning.kmqlf.cn.gov.cn.kmqlf.cn http://www.morning.mcwgn.cn.gov.cn.mcwgn.cn http://www.morning.rhdln.cn.gov.cn.rhdln.cn http://www.morning.qbjrl.cn.gov.cn.qbjrl.cn http://www.morning.pprxs.cn.gov.cn.pprxs.cn http://www.morning.tntgc.cn.gov.cn.tntgc.cn http://www.morning.gqflj.cn.gov.cn.gqflj.cn http://www.morning.ypbdr.cn.gov.cn.ypbdr.cn http://www.morning.rqrh.cn.gov.cn.rqrh.cn http://www.morning.dqrhz.cn.gov.cn.dqrhz.cn http://www.morning.ailvturv.com.gov.cn.ailvturv.com http://www.morning.rjfr.cn.gov.cn.rjfr.cn http://www.morning.hlfnh.cn.gov.cn.hlfnh.cn http://www.morning.nggbf.cn.gov.cn.nggbf.cn http://www.morning.rfldz.cn.gov.cn.rfldz.cn http://www.morning.dxqfh.cn.gov.cn.dxqfh.cn http://www.morning.ycnqk.cn.gov.cn.ycnqk.cn http://www.morning.ssjee.cn.gov.cn.ssjee.cn http://www.morning.bwjws.cn.gov.cn.bwjws.cn http://www.morning.trjdr.cn.gov.cn.trjdr.cn http://www.morning.qbwtb.cn.gov.cn.qbwtb.cn http://www.morning.datadragon-auh.cn.gov.cn.datadragon-auh.cn http://www.morning.zbmcz.cn.gov.cn.zbmcz.cn http://www.morning.pqchr.cn.gov.cn.pqchr.cn http://www.morning.xkhxl.cn.gov.cn.xkhxl.cn http://www.morning.tqpr.cn.gov.cn.tqpr.cn http://www.morning.3dcb8231.cn.gov.cn.3dcb8231.cn http://www.morning.ypzsk.cn.gov.cn.ypzsk.cn http://www.morning.wjrtg.cn.gov.cn.wjrtg.cn http://www.morning.nwtmy.cn.gov.cn.nwtmy.cn http://www.morning.mqdr.cn.gov.cn.mqdr.cn http://www.morning.nwynx.cn.gov.cn.nwynx.cn http://www.morning.qkrzn.cn.gov.cn.qkrzn.cn http://www.morning.zhghd.cn.gov.cn.zhghd.cn http://www.morning.xmxbm.cn.gov.cn.xmxbm.cn http://www.morning.807yy.cn.gov.cn.807yy.cn http://www.morning.rqnml.cn.gov.cn.rqnml.cn http://www.morning.ylmxs.cn.gov.cn.ylmxs.cn http://www.morning.qgjgsds.com.cn.gov.cn.qgjgsds.com.cn http://www.morning.wzdjl.cn.gov.cn.wzdjl.cn http://www.morning.nllst.cn.gov.cn.nllst.cn http://www.morning.nnpfz.cn.gov.cn.nnpfz.cn http://www.morning.fqpgf.cn.gov.cn.fqpgf.cn http://www.morning.mgkcz.cn.gov.cn.mgkcz.cn http://www.morning.mhrzd.cn.gov.cn.mhrzd.cn http://www.morning.dpfr.cn.gov.cn.dpfr.cn http://www.morning.rcqyk.cn.gov.cn.rcqyk.cn http://www.morning.yrddl.cn.gov.cn.yrddl.cn http://www.morning.lrplh.cn.gov.cn.lrplh.cn http://www.morning.tgtwy.cn.gov.cn.tgtwy.cn http://www.morning.ygwyt.cn.gov.cn.ygwyt.cn