Linux内核——IEEE 802

相关的地址族、套接字地址等,在 include/net/af_ieee802154.h 头文件或用户空间包的特殊头文件中定义(参见https://linux-wpan.org/wpan-tools.html 或 git tree at https://github.com/linux-wpan/wpan-tools)。

6LoWPAN的Linux实现

IEEE 802.15.4 标准中规定, MTU 为 127 字节,一旦开启安全性,在链路吞吐量为 250 kbps 或更低的无线链路上产生大约 80 个Byte的实际 MAC 有效负载。6LoWPAN适配格式[RFC4944]考虑到无线传感器网络等应用中预期的有限带宽、内存或能源资源,指定在此类受限链路上传输 IPv6 数据报文。[RFC4944] 定义了一个 Mesh Addressing 报头以支持sub-IP转发,一个 Fragmentation (碎片、拼接)报头以支持 IPv6 最小 MTU 要求 [RFC2460],以及用于 IPv6 数据报(LOWPAN_HC1 和 LOWPAN_HC2)的无状态报头压缩,以减少相对较大的 IPv6 和 UDP 报头下降到几个字节(在最好的情况下)。
2011 年 9 月,最新标准发布 - [RFC6282]。它弃用了 HC1 和 HC2 压缩,重新定义了IPHC编码格式,用于在Linux实现。
与6lowpan相关的所有代码可以在以下文件中找到:net/6lowpan/*net/ieee802154/6lowpan/*

要设置 6LoWPAN 接口,需要:

  1. 添加 IEEE802.15.4 接口并设置通道和 PAN ID;
  2. 通过如下命令添加 6lowpan 接口: # ip link add link wpan0 name lowpan0 type lowpan
  3. 调出“lowpan0”接口。

驱动

与 WiFi 一样,有几种类型的设备实现了 IEEE 802.15.4,实现方式有:

  1. “HardMAC”。MAC 层在设备中实现,设备导出管理(例如 MLME)和数据 API。
  2. “SoftMAC”或仅有无线硬件部分。这些类型的设备可能只是无线电收发器,可能具有某种加速功能,例如自动 CRC 计算和比较、自动 ACK 处理、地址匹配等。

这些类型的设备需要使用不同的方法来接入(hooked into) Linux 内核。

HardMAC

请参阅头文件 include/net/ieee802154_netdev.h。您必须实现Linux的net_devicetype = ARPHRD_IEEE802154 。数据通过常见的 sk_buffs 与套接字系列代码(socket family code)交换。
在 skb 接收时,skb->cb 必须包含struct ieee802154_mac_cb中描述的附加信息。在数据包传输期间,skb->cb用于向设备的 header_ops->create 函数提供附加数据。请注意,从数据后续可能被覆盖(当套接字代码将 skb 提交给 qdisc时),因此如果您以后需要该 cb 中的某些内容,则应自行将该信息存储在skb->data中。
要挂钩 MLME 接口,您必须使用指向struct ieee802154_mlme_ops (MLME驱动ops)实例的指针填充 net_device 的 ml_priv 字段。(net_device->ml_priv = &mac802154_mlme_ops
字段 assoc_reqassoc_respdisassoc_reqstart_reqscan_req 是可选的。所有其他字段都是必需的。

SoftMAC

MAC 是 IEEE 802.15.4 Linux协议栈的中间层。此时它为驱动注册和管理提供从接口(slave interfaces)。

注意:目前唯一支持的监控设备类型——它是IEEE 802.15.4 协议栈接口用于network sniffers(例如:WireShark)。
该层将很快被扩展。请参阅头文件 include/net/mac802154.hdrivers/net/ieee802154/中的几个驱动程序。

Fake drivers

此外,还有一个可用的驱动程序可以模拟一个真实设备具有SoftMAC(fakelb - IEEE 802.15.4 loopback driver,环回驱动程序)接口。此选项提供了在不使用真实硬件的情况下测试和调试协议栈的可能性。

设备驱动API

include/net/mac802154.h定义了以下函数:

//分配IEEE802.15.4兼容设备
struct ieee802154\_dev \*ieee802154\_alloc\_device(size\_t priv_size, 
                                               struct ieee802154\_ops \*ops);

//释放分配的设备
void ieee802154\_free\_device(struct ieee802154\_dev \*dev);

//在系统中注册设备(PHY)
int ieee802154\_register\_device(struct ieee802154\_dev \*dev);

// 在系统中释放注册的PHY
void ieee802154\_unregister\_device(struct ieee802154\_dev \*dev);

// 告诉802.15.4模块在skb中有一个新收到的帧,包含了
// 来自硬件设备的RF链路质量指示(Link Quality Indicator, LQI)
void ieee802154\_rx\_irqsafe(struct ieee802154\_hw \*hw, struct sk\_buff \*skb, u8 lqi);

// 告诉802.15.4模块,skb中的帧正在或将要通过硬件设备完成传输
void ieee802154\_xmit\_complete(struct ieee802154\_hw \*hw, 
                              struct sk\_buff \*skb, bool ifs_handling);

//设备驱动程序必须至少在IEEE 802.15.4操作结构下实现以下回调:
struct ieee802154\_ops {
    ...
    int (\*start)(struct ieee802154\_hw \*hw);//调用硬件设备初始化的处理程序
    void (\*stop)(struct ieee802154\_hw \*hw);//停止调用相关处理
    ...
    // 802.15.4模块要通过硬件设备传输skb中的每一帧调用的处理程序
    int (\*xmit_async)(struct ieee802154\_hw \*hw, struct sk\_buff \*skb);
    // 802.15.4模块从硬件上调用能量检测的处理程序
    int (\*ed)(struct ieee802154\_hw \*hw, u8 \*level);
    // 设置无线电硬件设备特定的频道页、信道
    int (\*set_channel)(struct ieee802154\_hw \*hw, u8 page, u8 channel);
    ...
};

参考链接:

IEEE 802.15.4 Developer’s Guide,IEEE 802.15.4 开发者指南,https://www.kernel.org/doc/html/latest/networking/ieee802154.html

补充信息

备注:关于部分结构体的细节,尝试使用InsCode AI来进行补充,未直接查阅相关内核源码。

struct ieee802154_dev

struct ieee802154_dev是一个用于表示IEEE 802.15.4设备的结构体,其中包含了该设备的各种属性、状态等信息。具体来说,该结构体包含了以下成员:

name: 设备名称,用于标识该设备
current_channel: 当前使用的信道号
pan_id: 网络ID
short_addr: 短地址
long_addr: 长地址
rx_queue: 接收队列,用于存储接收到的数据帧
tx_queue: 发送队列,用于存储待发送的数据帧
ops: 设备相关操作的函数指针结构体,包括打开设备、关闭设备、发送数据等操作

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

img

img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

ges/73bb5de17851459088c6af944156ee24.jpg" alt=“img” style=“zoom: 67%;” />

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

更多资料点击此处获qu!!

  • 22
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值