驱动相关指令
自定义驱动的加载
depmod
depmod:分析可载入模块的依赖性
which
which: 在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果
trap
内建命令,用于执行接收到信号后将要采取的动作,常见用于在脚本被中断时完成清理工作
trap "" SIGINT #忽略SIGINT信号
SIGINT:只对当前前台进程,和他的所在的进程组的每个进程都发送SIGINT信号,之后这些进程会执行信号处理程序再终止.
modprobe
modprobe:用于智能的向内核中加载模块,或者从内核中移除模块,若在载入过程中发生错误,modprobe会卸载整组的模块。内核模块加载成功或失败信息,可使用dmesg指令来查看
ptp
ptp :一个通过网络同步时钟的协议;
操作系统的PTP: PTP 被分开在 kernel 和 user space,比如CentOS,内核支持 PTP 时钟,由网络驱动提供(硬件 PTP 依赖物理网卡提供硬件时钟),可以手动检查网卡是否支持 PTP
比如liquidio驱动
irabalance
irqbalance:用于优化中断分配,为避免影响CPU的使用均衡,建议服务器环境中关闭
killall irqbalance
udev
示例:
# udev规则,重命名网口
DIR="/etc/udev/rules.d"
FILEPATH="/etc/udev/rules.d/70-persistent-net.rules"
MESSAGE="ACTION==\"add\", SUBSYSTEM==\"net\", ATTRS{vendor}==\"0x177d\", ATTRS{device}==\"0x9702\", NAME=\"oct%n\""
驱动
driver: 通过driver_register()注册到总线上(bus_type)上,代表了系统(服务器)具备了操作(驱动)某种设备(网卡)的能力;
当某个driver被注册到同样的总线的时候(总线枚举是发现),总线驱动会对driver和device会通过一定的策略进行binding,如果匹配成功,总线驱动会调用driver的probe()函数,把设备信息(如端口,中断号)传递给驱动,驱动就可以对真实的物理部件进行初始化,并把该设备的控制接口注册到linux其他子系统上(如字符设备),这样操作系统的其他部分就可以通过这些通用接口来访问设备。
不同操作系统的驱动不能兼容,驱动存在的意义——适应系统需要
.ko文件
kernel object(内核模块),文件的意义就是把内核的一些功能移动到内核外,需要时的时候插入内核,不需要时卸载
module_init
Makefile
学习:liquidio驱动的makefile文件
-
./configure 后跟SDK路径
配置环境:
SDK路径:
./configure /usr/local/Cavium_Networks
.PHONY
在Makefile中,.PHONY后面的target表示的也是一个伪造的target, 而不是真实存在的文件target
固件
程序使用和操作系统完全不同的指令集。但firmware通常由驱动去加载。
本文来自博客园,作者:senorita-18,转载请注明原文链接:https://www.cnblogs.com/senorita-18/p/17523384.html