Linux
--*--king--*--
这个作者很懒,什么都没留下…
展开
-
linux 异步IO,signal
为了使设备支持异步通知机制,驱动程序中涉及3项工作:1)支持F_SETOWN命令,能在这个控制命令处理中设置filp->f_owner为对应进程ID。不过此项工作已由内核完成,设备驱动无需处理2)支持F_SETFL命令处理,每当FASYNC标志改变时,驱动程序中的fasync()函数将得以执行。因此,驱动中应该事先fasync函数。3)在设备资源可获得时,调用kill_fasync()函数激发相应的信号。设备驱动中异步通知编程比较简单,主要用到一项数据结构和两个函数。数据结构是fasy原创 2020-06-03 09:57:50 · 190 阅读 · 0 评论 -
linux内核驱动 poll+waitqueue
在操作IO设备时,读取设备状态或者数据时,如果采用轮询方式,会占用大量的CPU资源,这种方式肯定是不可取,所以需要在内核驱动支持异步通知方式,等到设备准备好,再通知应用程序,其他时间应用程序应当处于休眠状态,让出CPU。本篇介绍poll的使用方法。1)首先定义一个wait_queue_head_t,并对其进行初始化struct xxx_dev{ wait_queue_head_t irq_wq; struct mutex mutex; int flag;}struct原创 2020-06-03 18:40:25 · 563 阅读 · 0 评论 -
iptables数据转发/镜像
网口数据转发iptables -t nat -A PREROUTING -p udp --dport 12345 -i enp8s0 -j DNAT --to 192.168.0.4:12345pc2与pc1通过enp8s0网口连接,pc2将接收到的pc1的数据转发到pc3的指定端口。端口可以不指定。查看iptables 规则iptables -nL --line-number网口数据镜像2.把某个源IP的包镜像发到指定的IPiptables -t mangle -..原创 2020-10-20 15:44:25 · 2430 阅读 · 0 评论 -
socket can 获取状态标志
在调试can总线时,可以通过ip -d link show可以查看can接口信息在使用socketcan进行编程时,需要知道can当前状态信息,可以通过获取系统错误码来识别一些can错误信息extern int errno;switch(errno){ case 100: printf( "network is down"); br...原创 2019-07-20 11:08:40 · 1948 阅读 · 0 评论