摘要:
网络发包模型 1.选择路由 2.交给邻居子系统(路由中紧挨着发送方的网关)。如果没有邻居信息,那么由Linux中的邻居子系统来建立邻居信息。 发送数据过程 //系统调用层和协议无关层 1.发送入口sock_aio_write 2.调用do_sock_write 3.调用__sock_sendmsg 阅读全文
摘要:
回环网卡(loop) 回环网卡的Tx通道和Rx通道是直连的,所以数据直接发送到接收端口。 编写回环网卡驱动 回环网卡驱动在/driver/net/loopback.c #include <linux/kernel.h> #include <linux/jiffies.h> #include <lin 阅读全文
摘要:
Linux网络子系统 1.系统调用接口:提供系统调用 2.协议无关接口:统一网络协议给系统调用接口使用 3.网络协议栈 :实现网络协议 4.设备无关接口:统一设备驱动程序给网络协议使用 5.设备驱动程序:实现网卡驱动 Linux驱动在内核中都有一个结构来描述,首先找到设备描述结构,然后找到设备如何注 阅读全文
摘要:
如何开发Linux驱动程序 一般情况下都会有现成的驱动程序,不需要从零开始开发驱动程序。所以Linux驱动开发主要分为两个步骤:1.读得懂驱动程序;2.写的了核心功能。 发送中断处理程序 发送中断处理函数在/drivers/serial/samsung.c的s3c24xx_serial_tx_cha 阅读全文
摘要:
tty数据接收流程 //tty子系统 1.tty_fops中的tty_read响应系统调用 2.tty_read调用tty_ldisc_N_TTY中的n_tty_read n_tty_read 1.设置app的状态 2.如果没有数据可读,让阻塞生效 3.如果有数据可读,从read_buf中读走数据 阅读全文
摘要:
tty数据发送流程 //tty子系统 1.file_operation中找到tty_write 2.tty_write找到线路规程中的n_tty_write 3.n_tty_write找到uart_ops中的uart_write //串口驱动 4.uart_write找到s3c24xx_serial 阅读全文
摘要:
用户程序调用open系统调用后,怎么传递到驱动程序 //tty子系统 1.tty_fops里面的tty_open是串口驱动对系统调用的响应入口 2.tty_open调用uart_ops里面的uart_open 3.uart_open找到了uart_start //串口驱动 4.uart_start找 阅读全文
摘要:
串口驱动结构 1.初始化设备 2.打开设备 3.读取数据 4.写入数据 串口驱动在内核的/drivers/serial/下的samsung.c和s3c2440.c 串口驱动中重要的数据结构 file_operations tty_fops.write = tty_write tty_ldisc_op 阅读全文
摘要:
tty概念解析 在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备。 1.串口终端(/dev/ttyS*) 串口终端是使用计算机串口连接的终端设备。Linux把每个串口端口都看作是一个字符设备。这些串口设备所对应的设备名称是/dev/ttySAC0,/d 阅读全文
摘要:
平台总线概述 平台总线(Platform bus)是Linux2.6内核加入的一种虚拟总线,其优势在于采用了总线的模型对设备与驱动进行了管理,这样提高了程序的可移植性。这条总线由系统创建,不需要用户再去创建平台总线。 通过平台总线机制开发设备驱动的流程如下: 1.定义platform_device 阅读全文