千兆以太网接口之RGMII和SGMII
千兆以太网接口之RGMII和SGMII以前,对于千兆以太网,还停留在RGMII接口上,最近才接触到SGMII,对SGMII不是很了解,所以就想对比看看。
RGMII:(Reduced Gigabit Media Independent Interface)
SGMII:(Serial Gigabit Media Independent Interface)
RGMII和SGMII在传输方式、引脚、时钟频率、电气特性等方面都有所不同,下面是一些简单的对比。
传输方式:
RGMII采用并行传输方式,使用8个数据信号线(TXD [0:3]、RXD [0:3])进行数据传输。
SGMII采用串行传输方式,使用差分对信号进行数据传输。
速率:
RGMII支持最高千兆位速率(1 Gbps),并且可以向下兼容100 Mbps和10 Mbps速率。
SGMII同样支持最高千兆位速率(1 Gbps),也可以向下兼容100 Mbps和10 Mbps速率。
引脚:
RGMII需要12个引脚(RGMII并行接口)来实现双向通信。
SGMII使用2对数据差分信号线(RX,TX)和2对时钟差分信号线(RX ...
Linux之DKMS
Linux之DKMSDKMS简介DKMS(Dynamic Kernel Module Support)是由 Dell 公司开发的一套内核模块管理框架,用于在 Linux 操作系统中动态构建和维护内核模块,已经被大多数 Linux 发行版采用。
dkms - Dynamic Kernel Module Support
dkms is a framework which allows kernel modules to be dynamically built for each kernel on your system in a simplified and organized fashion.
官网:https://github.com/dell/dkms
在 DKMS 中,每个内核模块都被视为一个源代码包,并通过一个称为 dkms.conf 的配置文件进行管理。该配置文件指定了源代码的位置、编译和安装模块所需的命令,以及其他必要的信息。当内核更新时,DKMS 会自动重建和安装内核模块,以确保它们与新内核版本兼容。
DKMS配置文件当执行前面的add添加操作时,添加的源码 ...
Linux之手动创建WIFI热点
Linux之手动创建WIFI热点背景之前介绍了Linux下使用无线网卡作为STA手动连接WIFI:Linux手动连接配置wifi
今天介绍下Linux下怎么手动建立AP热点。主要分为2大步骤:
hostapd建立AP热点
DHCP服务分配IP
前提:首先要无线网卡是否支持AP模式使用如下命令,查看网卡属性:
iw list
如果Supported interface modes选项包含 AP 的关键字,则表示支持 AP 模式。如:
Supported interface modes:
* IBSS
* managed
* AP
* P2P-client
* P2P-GO
* P2P-device
hostapdhostapd 和 wpa_supplicant是兄弟,都是由 w1.fi项目共同维护。
hostapd: IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/WPA3/EAP/RADIUS Authenticator
官网:https://w1.fi/hostapd/
hostapd is a user s ...
Linux之WOL网络唤醒
Linux之WOL网络唤醒WOL简介
WOL(Wake-on-LAN)技术是一种计算机局域网唤醒技术,其主要功能是使处于关机或休眠状态的计算机能够通过局域网(通常是以太网)被远程唤醒并恢复到运行状态。具体来说,当一台计算机进入休眠或关机状态时,可以通过局域网中的另一台设备发送特定的网络广播包(magic魔术包)来触发该计算机的唤醒过程。
魔术包(Magic Packet)组成魔术包是一个UDP广播数据包,包含特定的格式和内容。它主要由以下几个部分构成:
固定前缀: 6个字节的0xFF。
目标主机MAC地址: 该地址需要重复多次,通常为16次。
密码(可选): 4-6字节的密码。
FF FF FF FF FF FF FF
MAC 地址 × 16
4-6字节的密码(可选)
Linux下使用WOL能使用WOL的主要前提条件:
硬件支持: 目标主机的网卡和主板必须支持WOL功能!
网络环境: 网络环境应允许通过局域网或互联网进行数据传输,有时还需要适当的路由和防火墙规则来确保数据包能够正确到达目标主机!最简单的环境是操作机器与目标机器在同一网段。
注意:有线连接通常比无线 ...
Linux Wireless之80211(nl80211, cfg80211, mac80211)
Linux Wireless之80211(nl80211, cfg80211, mac80211)前言在Linux无线子系统中,cfg80211、mac80211和nl80211是三个关键的组件,它们共同工作以实现对802.11设备的配置和管理。cfg80211负责内核空间的通用API,mac80211负责具体的MAC层实现,而nl80211则作为用户空间与内核空间之间的桥梁,用于配置管理和通信。
nl80211
nl80211是介于用户空间与内核空间之间的 API ,可以算是 cfg80211 的前端,也会生成 “事件” (events) 信息。该模块依赖 netlink 协议来在两个空间进行信息交互,通过socket接收上层命令,执行对应函数进行配置管理网络接口。Netlink 是一个 Linux 中的 socket 类型,用于在内核与用户空间之间传递事件。
nl80211 is the new 802.11 netlink interface public header. Together with cfg80211 it is intended to replace Wir ...
Linux手动连接配置wifi
Linux手动连接配置wifi背景以前在桌面端或是嵌入式手动连接过wifi,但没有深入也没有详细研究,今天系统地记录下。
wpa_supplicant连接WIFIwpa_supplicant介绍及背景官网:https://w1.fi/wpa_supplicant/.
以下来自man手册,介绍了它的作用、产生背景及由来,保持原汁原味。
wpa_supplicant - Wi-Fi Protected Access client and IEEE 802.1X supplicant
wpa_supplicant is designed to be a “daemon” program that runs in the background and acts as the backend component controlling the wireless connection. wpa_supplicant supports separate frontend programs and an example text-based frontend, wpa_cli, is in ...
Linux中网络命名空间基本操作
Linux中网络命名空间基本操作前言网络命名空间(Network Namespace,简写: netns)是Linux内核提供的一种实现网络资源隔离的方法,允许不同的网络命名空间拥有独立的网络协议栈及网络配置,包括IP地址、路由表、网络设备、iptables规则等。docker便是基于netns实现的网络隔离。
大多数现代Linux发行版默认支持这一特性,主要是内核netns相关配置(如CONFIG_NET_NS)需要打开。
基本操作创建网络命名空间及设备创建网络命名空间demo:
#创建
sudo ip netns add demo
#查看
sudo ip netns list
demo
添加两个端对端的虚拟网络设备(veth peer):veth1、veth2
sudo ip link add veth1 type veth peer name veth2
veth2留在本机,veth1添加到命名空间demo将虚拟网络一端(veth1)添加到命名空间
sudo ip link set veth1 netns demo
配置本机veth2虚拟设备给本机veth2配置IP,并启用
#配 ...
Linux后台运行及不挂断相关命令
Linux后台运行及不挂断相关命令背景我们经常会遇到这种需求:ssh到Linux服务器上,跑一个耗时比较久的任务,比如编译任务等,有时候由于网络不好,网络故障,或者不小心将跑任务的终端关闭了(也有可能是跑终端的机器异常了),导致好不容易跑了很久的任务中断退出,前面跑的白费了,又不得不重新跑!此时的你是不是很郁闷。。。该咋解决呢?就是今天介绍的几个主角:nohup、screen、&。
command &大家可能对这个最为熟悉,&表示将前面的 command 任务放入后台,单独起一个进程来运行,使用Ctrl + C无法中止该任务,此时你可以继续在该终端上做其他事情,但如果关闭该终端,该任务进程会跟着退出。
nohup commandnohup 是 no hung up的缩写,顾名思义就是不挂断,忽略挂起信号运行后面的 command 。所以它并没有后台运行的功能,只是会将任务永久执行,无论是否关闭终端,断开ssh等。nohup 命令,在默认情况下(非重定向时),标准输出会输出到当前目录下 nohup.out 文件中,如果当前目录的 nohup.out 文件不可写,输 ...
Linux内核代码格式审查
Linux内核代码格式审查前言Linux内核代码有一套自己的代码格式规范,相关的规范说明在内核代码树目录:Documentation/CodingStyle或Documentation/process/coding-style.rst。具体细节大家可以自己去看,这里就不贴了。
以前提交内核补丁,一直用scripts/checkpatch.pl来过一遍代码格式,没怎么去研究。最近刚好检查格式报了个错,以前没怎么遇到,于是就去看了下。
报错信息:
ERROR: do not set execute permissions for source files
从提示上看很明显是源码文件权限问题。
Checkpatch 介绍内核官方与它相关的文档:https://www.kernel.org/doc/html/latest/dev-tools/checkpatch.html下面是它的介绍(保持原汁原味):
Checkpatch (scripts/checkpatch.pl) is a perl script which checks for trivial style violations i ...
Linux内核模块加载及更新问题
Linux内核模块加载及更新问题背景最近碰到了一个Linux内核模块更新问题,比较有意思,特此记录。
问题: 一款我们内核已经适配过的蓝牙模块在一台机器上用不了,驱动加载不起来,看内核日志报一堆的符号问题:
29.784454] rtk_btusb: Unknown symbol hci_free_dev(err -22)
29.784483] rtk_btusb: disagrees about version of symbol hci_alloc_dev_priv
29.784484] rtk_btusb: Unknown symbol hci_alloc_dev_priv(err-22)
29.784571] rtk_btusb: disagrees about version of symbol hci_unregister_dev
29.784573] rtk_btusb: unknown symbol hci_unregister_dev (err -22)
29.784583] rtk_btusb: disagrees about version of symbol h ...
Linux之设备管理器及热插拔处理
Linux之设备管理器及热插拔处理前言Linux内核设备管理器主要来管理/dev 中的设备节点,并在添加或删除设备时处理所有用户空间操作,比如U盘SD卡等热插拔的处理–自动挂载与卸载。
Linux内核设备管理器主要有mdev,udev和eudev等,今天就简单来看看它们。
mdev是udev的简化版本,是busybox的一部分,最适合用在简单的嵌入式系统,使用 busybox 的地方。
udev是systemd的设备管理器,相对mdev来说要复杂些,一般用在PC上的linux或比较高端点的嵌入式系统,使用 systemd 的地方。
eudev是 udev 的fork版本,所以很多规则这些都是和udev类似,主要是为了独立于systemd等initx系统和Linux发行版。
udev 和 mdev 是两个使用 uevent 机制处理热插拔问题的用户空间程序,两者的实现机理不同。
udev 基于 netlink 机制
mdev 基于 uevent_helper 机制每当设备状态发生变化时,内核都会发出一个 uevent 事件,设备管理器会接收到该事件,根据 uevent 中包含的信息 ...
RISC-V开篇及特权模式等一些概念
RISC-V开篇及特权模式等一些概念
Simplicity is the ultimate sophistication(大道至简)。
概述现在 RISC-V 很火,一直想系统地学习了解下,弄个系列,以前零碎地记了一点。今天算个开篇,主要看看 RISC-V 相关的一些概念,主要的官方文档及书籍等。
RISC-V架构主要由美国加州大学伯克利分校发明,相比于x86和ARM架构,RISC-V开源采用BSD协议,它允许用户自由地使用、修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。计算机体系结构的传统方法是增量ISA,新处理器不仅必须实现新的ISA扩展,还必须实现过去的所有扩展。目的是为了保持向后的二进制兼容性,这样几十年前程序的二进制版本仍然可以在最新的处理器上正确运行。导致了传统ISA的体量随时间大幅增长。而RISC-V是模块化的。它的核心是一个名为RV32I的基础ISA,支持运行一个完整的软件栈。RV32I是固定的,永远不会改变。这为编译器编写者,操作系统开发人员和汇编语言程序员提供了稳定的目标。模块化来源于可选的标准扩展,根据应用程序的需要,硬件可以包含或不包含这些扩 ...