FreeBSD 中文手册
FreeBSD 中文社区
  • FreeBSD 中文手册
  • 编辑日志
  • 译者说明
  • FreeBSD 中文手册
  • 概述
  • 前言
    • 致读者
    • 第四版
    • 第三版
    • 第二版(2004)
    • 第一版(2001)
    • 本书的组织结构
    • 本书中使用的一些约定
    • 致谢
  • 第一部分:快速开始
  • 第1章 简介
    • 1.1.概述
    • 1.2.欢迎来到 FreeBSD!
    • 1.3.关于 FreeBSD 项目
  • 第2章 安装 FreeBSD
    • 2.1.概述
    • 2.2.最低硬件要求
    • 2.3.安装前的准备工作
    • 2.4.开始安装
    • 2.5.使用 bsdinstall
    • 2.6.分配磁盘空间
    • 2.7.获取安装文件
    • 2.8.账户、时区、服务和安全
    • 2.9.故障排除
    • 2.10.使用 Live CD
  • 第3章 FreeBSD 基础
    • 3.1.概述
    • 3.2.虚拟控制台和终端
    • 3.3.用户和基本账户管理
    • 3.4.权限
    • 3.5.目录结构
    • 3.6.磁盘结构
    • 3.7.文件系统的挂载与卸载
    • 3.8.进程和守护进程
    • 3.9.Shell
    • 3.10.文本编辑器
    • 3.11.设备和设备节点
    • 3.12.手册页
  • 第4章 安装应用程序:软件包和 Ports
    • 4.1.概述
    • 4.2.软件安装的概述
    • 4.3.寻找所需的应用程序
    • 4.4.使用 pkg 管理二进制包
    • 4.5.使用 Ports
    • 4.6.使用 Poudriere 构建软件包
    • 4.7.安装后的注意事项
    • 4.8.如何处理损坏的 port
  • 第5章 X Window 系统
    • 5.1.概述
    • 5.2.安装 Xorg
    • 5.3.显卡驱动
    • 5.4.Xorg 配置
    • 5.5.在 X11 中使用字体
  • 第6章 FreeBSD 中的 Wayland
    • 6.1.简介
    • 6.2.Wayland 概述
    • 6.3.Wayfire 混成器
    • 6.4.Hikari 混成器
    • 6.5.Sway 混成器
    • 6.6.使用 Xwayland
    • 6.7.使用 VNC 进行远程连接
    • 6.8.Wayland 登录管理器
    • 6.9.实用工具
  • 第7章 网络
    • 7.1.概述
    • 7.2.设置网络
    • 7.3.有线网络
    • 7.4.无线网络
    • 7.5.主机名
    • 7.6.DNS
    • 7.7.故障排除
  • 第二部分:常见任务
  • 第8章 桌面环境
    • 8.1.概述
    • 8.2.桌面环境
    • 8.3.浏览器
    • 8.4.开发工具
    • 8.5.桌面办公应用
    • 8.6.文档阅读器
    • 8.7.财务
  • 第9章 多媒体
    • 9.1.概述
    • 9.2.设置声卡
    • 9.3.音频播放器
    • 9.4.视频播放器
    • 9.5.视频会议
    • 9.6.图像扫描仪
  • 第10章 配置 FreeBSD 内核
    • 10.1.概述
    • 10.2.为什么要构建定制内核
    • 10.3.浏览系统硬件
    • 10.4.配置文件
    • 10.5.构建并安装定制内核
    • 10.6.如果发生了错误
  • 第11章 打印
    • 11.1.快速入门
    • 11.2.连接打印机
    • 11.3.常见的页面描述语言(PDL)
    • 11.4.直接打印
    • 11.5.LPD(行式打印机程序)
    • 11.6.其他打印系统
  • 第12章 Linux 二进制兼容层
    • 12.1.概述
    • 12.2.配置 Linux 二进制兼容层
    • 12.3.Linux 用户空间
    • 12.4.高级主题
  • 第13章 WINE
    • 13.1.概述
    • 13.2.WINE 概述和概念
    • 13.3.在 FreeBSD 上安装 WINE
    • 13.4.在 FreeBSD 上运行第一个 WINE 程序
    • 13.5.配置 WINE 安装程序
    • 13.6.WINE 图形化用户管理界面
    • 13.7.多用户 FreeBSD 与 WINE
    • 13.8.FreeBSD 上的 WINE 常见问题
  • 第三部分:系统管理
  • 第14章 配置与优化
    • 14.1.概述
    • 14.2.配置文件
    • 14.3.管理 FreeBSD 中的服务
    • 14.4.Cron 和 Periodic
    • 14.5.配置系统日志
    • 14.6.电源和资源管理
    • 14.7.添加交换空间
  • 第15章 FreeBSD 的引导过程
    • 15.1.概述
    • 15.2.FreeBSD 的引导过程
    • 15.3.Device Hints
    • 15.4.关机流程
  • 第16章 安全
    • 16.1.概述
    • 16.2.简介
    • 16.3.账户安全
    • 16.4.入侵检测系统(IDS)
    • 16.5.安全等级
    • 16.6.文件标志位
    • 16.7.OpenSSH
    • 16.8.OpenSSL
    • 16.9.Kerberos
    • 16.10.TCP 封装器(TCP Wrapper)
    • 16.11.访问控制列表(ACL)
    • 16.12.Capsicum
    • 16.13.进程记账
    • 16.14.资源限制
    • 16.15.监控第三方安全问题
    • 16.16.FreeBSD 安全公告
  • 第17章 jail 与容器
    • 17.1.概述
    • 17.2.jail 的类型
    • 17.3.主机配置
    • 17.4.传统 jail(厚 jail)
    • 17.5.瘦 jail
    • 17.6.管理 jail
    • 17.7.更新 jail
    • 17.8.jail 资源限制
    • 17.9.jail 管理器与容器
  • 第18章 强制访问控制
    • 18.1.概述
    • 18.2.关键术语
    • 18.3.了解 MAC 标签
    • 18.4.规划安全配置
    • 18.5.可用的 MAC 策略
    • 18.6.用户锁定
    • 18.7.MAC Jail 中的 Nagios
    • 18.8.MAC 框架的故障排除
  • 第19章 安全事件审计
    • 19.1.概述
    • 19.2.关键术语
    • 19.3.审计配置
    • 19.4.使用审计跟踪
  • 第20章 存储
    • 20.1.概述
    • 20.2.添加磁盘
    • 20.3.调整和增加磁盘大小
    • 20.4.USB 存储设备
    • 20.5.创建和使用 CD
    • 20.6.创建和使用 DVD
    • 20.7.创建和使用软盘
    • 20.8.备份的基础知识
    • 20.9.内存盘
    • 20.10.文件系统快照
    • 20.11.磁盘配额
    • 20.12.加密磁盘分区
    • 20.13.加密交换分区
    • 20.14.高可用性存储(HAST)
  • 第21章 GEOM: 模块化磁盘转换框架
    • 21.1.概述
    • 21.2.RAID0——条带
    • 21.3.RAID1——镜像
    • 21.4.RAID3——带有专用奇偶校验的字节级条带
    • 21.5.软件 RAID 设备
    • 21.6.GEOM Gate 网络设备
    • 21.7.为磁盘设备添加卷标
    • 21.8.通过 GEOM 实现 UFS 日志
  • 第22章 Z 文件系统(ZFS)
    • 22.1.是什么使 ZFS 与众不同
    • 22.2.快速入门指南
    • 22.3.zpool 管理
    • 22.4.zfs 管理
    • 22.5.委托管理
    • 22.6.高级主题
    • 22.7.更多资源
    • 22.8.ZFS 特性和术语
  • 第23章 其他文件系统
    • 23.1.概述
    • 23.2.Linux® 文件系统
    • 23.3.Windows® 文件系统
    • 23.4.MacOS® 文件系统
  • 第24章 虚拟化
    • 24.1.概述
    • 24.2.使用 macOS® 上的 Parallels Desktop 安装 FreeBSD
    • 24.3.使用 macOS® 上的 VMware Fusion 安装 FreeBSD
    • 24.4.使用 VirtualBox™ 安装 FreeBSD
    • 24.5.在 FreeBSD 上安装 VirtualBox™
    • 24.6.使用 FreeBSD 上的 QEMU 虚拟化
    • 24.7.使用 FreeBSD 上的 bhyve 虚拟机
    • 24.8.基于 FreeBSD 的 Xen™ 虚拟机
  • 第25章 本地化——i18n/L10n 的使用和设置
    • 25.1.概述
    • 25.2.使用本地化
    • 25.3.寻找 i18n 应用程序
    • 25.4.特定语言的区域配置
  • 第26章 FreeBSD 更新与升级
    • 26.1.概述
    • 26.2.更新 FreeBSD
    • 26.3.更新 Bootcode
    • 26.4.更新文档
    • 26.5.追踪开发分支
    • 26.6.从源代码更新 FreeBSD
    • 26.7.多台机器的追踪
    • 26.8.在非 FreeBSD 主机上进行构建
  • 第27章 DTrace
    • 27.1.概述
    • 27.2.实现上的差异
    • 27.3.开启 DTrace 支持
    • 27.4.启用内核外部模块 DTrace
    • 27.5.使用 DTrace
  • 第28章 USB 设备模式/USB OTG
    • 28.1.概述
    • 28.2.USB 虚拟串行端口
    • 28.3.USB 设备模式网络接口
    • 28.4.USB 虚拟存储设备
  • 第四部分:网络通讯
  • 第29章 串行通信
    • 29.1.概述
    • 29.2.串行术语和硬件
    • 29.3.终端
    • 29.4.拨入服务
    • 29.5.拨出服务
    • 29.6.设置串行控制台
  • 第30章 PPP
    • 30.1.概述
    • 30.2.配置 PPP
    • 30.3.PPP 连接的故障排除
    • 30.4.使用以太网 PPP(PPPoE)
    • 30.5.使用 ATM 上的 PPP (PPPoA)
  • 第31章 电子邮件
    • 31.1.概述
    • 31.2.邮件组件
    • 31.3.DragonFly 邮件代理(DMA)
    • 31.4.Sendmail
    • 31.5.修改邮件传输代理
    • 31.6.邮件用户代理
    • 31.7.高级主题
  • 第32章 网络服务器
    • 32.1.概述
    • 32.2.inetd 超级服务器
    • 32.3.网络文件系统(NFS)
    • 32.4.网络信息系统(NIS)
    • 32.5.轻型目录访问协议(LDAP)
    • 32.6.动态主机设置协议(DHCP)
    • 32.7.域名系统(DNS)
    • 32.8.零配置网络(mDNS/DNS-SD)
    • 32.9.Apache HTTP 服务器
    • 32.10.文件传输协议(FTP)
    • 32.11.用于 Microsoft® Windows® 客户端的文件和打印服务(Samba)
    • 32.12.用 NTP 进行时钟同步
    • 32.13.iSCSI target 和 initiator 的配置
  • 第33章 防火墙
    • 33.1.概述
    • 33.2.防火墙的概念
    • 33.3.PF
    • 33.4.IPFW
    • 33.5.IPFILTER(IPF)
    • 33.6.Blacklistd
  • 第34章 高级网络
    • 34.1.概述
    • 34.2.网关和路由
    • 34.3.虚拟主机
    • 34.4.无线高级身份验证
    • 34.5.无线自组织(Ad-hoc)模式
    • 34.6.USB 网络共享
    • 34.7.蓝牙
    • 34.8.桥接
    • 34.9.链路聚合与故障转移
    • 34.10.使用 PXE 进行无盘操作
    • 34.11.共用地址冗余协议(CARP)
    • 34.12.VLAN
  • 第五部分:附录
  • 附录 A.获取 FreeBSD
    • A.1.镜像站
    • A.2.使用 Git
    • A.3.使用 Subversion
    • A.4.光盘
  • 附录 B.书目
    • B.1.FreeBSD 相关书籍
    • B.2.安全性参考文献
    • B.3.UNIX 历史
    • B.4.期刊与杂志
  • 附录 C.网络资源
    • C.1.网站
    • C.2.邮件列表
    • C.3.Usenet 新闻组
  • 附录 D.OpenPGP 密钥
    • D.1.官方成员
  • 术语表
  • 后记
由 GitBook 提供支持

FreeBSD 中文社区

在本页
  • 34.7.1. 加载蓝牙支持
  • 34.7.2. 查找其他蓝牙设备
  • 34.7.3. 设备配对
  • 34.7.4. 使用 PPP 配置文件进行网络访问
  • 34.7.5. 蓝牙协议
  • 34.7.5.1. 逻辑链路控制和适配协议 (L2CAP)
  • 34.7.5.2. 无线电频率通信 (RFCOMM)
  • 34.7.5.3. 服务发现协议 (SDP)
  • 34.7.5.4. OBEX 对象推送 (OPUSH)
  • 34.7.5.5. 串行端口配置文件 (SPP)
  • 34.7.6. 故障排除

这有帮助吗?

在GitHub上编辑
导出为 PDF
  1. 第34章 高级网络

34.7.蓝牙

上一页34.6.USB 网络共享下一页34.8.桥接

最后更新于6天前

这有帮助吗?

蓝牙是一种无线技术,用于在 2.4 GHz 非授权频段内创建个人网络,通常覆盖 10 米的范围。网络通常由便携设备(如手机、手持设备和笔记本电脑)按需形成。与 Wi-Fi 无线技术不同,蓝牙提供更高级别的服务协议,例如 FTP 类文件服务器、文件推送、语音传输、串行线路仿真等。

本节介绍了如何在 FreeBSD 系统上使用 USB 蓝牙适配器,并介绍了各种蓝牙协议和实用程序。

34.7.1. 加载蓝牙支持

FreeBSD 中的蓝牙栈是使用 框架实现的。广泛支持各种蓝牙 USB 适配器,使用 驱动程序。基于 Broadcom BCM2033 的蓝牙设备由 和 驱动程序支持。3Com 蓝牙 PC 卡 3CRWB60-A 由 驱动程序支持。基于串行和 UART 的蓝牙设备由 、 和 驱动程序支持。

在连接设备之前,确定它使用的是上述哪个驱动程序,然后加载该驱动程序。例如,如果设备使用 驱动程序:

# kldload ng_ubt

如果蓝牙设备将在系统启动时连接,可以通过将驱动程序添加到 /boot/loader.conf 来配置系统在启动时加载模块:

ng_ubt_load="YES"

加载了驱动程序以后,插入 USB 蓝牙适配器。如果驱动程序加载成功,控制台和 /var/log/messages 中应该会显示类似如下的输出:

ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2
ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2
ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3,
      wMaxPacketSize=49, nframes=6, buffer size=294

要启动和停止蓝牙栈,请使用其启动脚本。在拔出设备之前,最好停止栈。启动蓝牙栈时,可能需要启动 。启动蓝牙栈时,输出应该类似如下:

# service bluetooth start ubt0
BD_ADDR: 00:02:72:00:d4:1a
Features: 0xff 0xff 0xf 00 00 00 00 00
<3-Slot> <5-Slot> <Encryption> <Slot offset>
<Timing accuracy> <Switch> <Hold mode> <Sniff mode>
<Park mode> <RSSI> <Channel quality> <SCO link>
<HV2 packets> <HV3 packets> <u-law log> <A-law log> <CVSD>
<Paging scheme> <Power control> <Transparent SCO data>
Max. ACL packet size: 192 bytes
Number of ACL packets: 8
Max. SCO packet size: 64 bytes
Number of SCO packets: 8

34.7.2. 查找其他蓝牙设备

% hccontrol -n ubt0hci inquiry
Inquiry result, num_responses=1
Inquiry result #0
       BD_ADDR: 00:80:37:29:19:a4
       Page Scan Rep. Mode: 0x1
       Page Scan Period Mode: 00
       Page Scan Mode: 00
       Class: 52:02:04
       Clock offset: 0x78ef
Inquiry complete. Status: No error [00]

BD_ADDR 是蓝牙设备的唯一地址,类似于网络卡的 MAC 地址。需要此地址来与设备进行进一步通信,并且可以为 BD_ADDR 分配一个人类可读的名称。有关已知蓝牙主机的信息包含在 /etc/bluetooth/hosts 文件中。以下示例演示了如何获取分配给远程设备的人类可读名称:

% hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4
BD_ADDR: 00:80:37:29:19:a4
Name: Pav's T39

如果在远程蓝牙设备上执行查询,它将找到计算机并显示为“your.host.name (ubt0)”。本地设备的名称可以随时更改。

蓝牙系统提供了一个点对点连接,或一个点对多点连接,可供多个蓝牙设备共享。以下示例演示了如何与远程设备创建连接:

% hccontrol -n ubt0hci create_connection BT_ADDR

create_connection 接受 BT_ADDR 以及 /etc/bluetooth/hosts 中的主机别名。

以下示例演示了如何获取本地设备的活动基带连接列表:

% hccontrol -n ubt0hci read_connection_list
Remote BD_ADDR    Handle Type Mode Role Encrypt Pending Queue State
00:80:37:29:19:a4     41  ACL    0 MAST    NONE       0     0 OPEN

连接句柄 在终止基带连接时非常有用,尽管通常不需要手动执行此操作。栈会自动终止不活跃的基带连接。

# hccontrol -n ubt0hci disconnect 41
Connection handle: 41
Reason: Connection terminated by local host [0x16]

键入 hccontrol help 获取完整的 HCI 命令列表。大多数 HCI 命令不需要超级用户权限。

34.7.3. 设备配对

默认情况下,蓝牙通信不进行身份验证,任何设备都可以与任何其他设备通信。蓝牙设备(如手机)可能选择要求身份验证才能提供特定的服务。蓝牙身份验证通常通过 PIN 码 完成,PIN 码是一个长度最多为 16 个字符的 ASCII 字符串。用户需要在两个设备上输入相同的 PIN 码。输入 PIN 码后,两个设备将生成一个 链接密钥。之后,链接密钥可以存储在设备中或持久化存储中。下次使用时,两个设备将使用先前生成的链接密钥。此过程称为 配对。请注意,如果任一设备丢失了链接密钥,必须重新进行配对。

device {
        bdaddr  00:80:37:29:19:a4;
        name    "Pav's T39";
        key     nokey;
        pin     "1234";
      }
hcsecd_enable="YES"
hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist
hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4
hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists
hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4

34.7.4. 使用 PPP 配置文件进行网络访问

拨号联网(DUN)配置文件可用于将手机配置为无线调制解调器,以连接到拨号上网服务器。它还可以用于将计算机配置为接收来自手机的数据调用。

使用 PPP 配置文件的网络访问可为单个蓝牙设备或多个蓝牙设备提供 LAN 访问。它还可以提供通过串行电缆仿真进行的 PC 到 PC 连接。

# rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup
# rfcomm_pppd -s -C 7 -l rfcomm-server

34.7.5. 蓝牙协议

本节提供了各种蓝牙协议、它们的功能以及相关实用程序的概述。

34.7.5.1. 逻辑链路控制和适配协议 (L2CAP)

逻辑链路控制和适配协议 (L2CAP) 为上层协议提供面向连接和无连接的数据服务。L2CAP 允许较高层协议和应用程序传输和接收最大为 64KB 的 L2CAP 数据包。

L2CAP 的核心概念是通道。通道是基带连接上的逻辑连接,每个通道绑定到一个单独的协议,采用一对多的方式。多个通道可以绑定到同一协议,但一个通道不能绑定到多个协议。每个通过通道接收到的 L2CAP 数据包会被定向到适当的上层协议。多个通道可以共享同一基带连接。

# l2ping -a 00:80:37:29:19:a4
0 bytes from 0:80:37:29:19:a4 seq_no=0 time=48.633 ms result=0
0 bytes from 0:80:37:29:19:a4 seq_no=1 time=37.551 ms result=0
0 bytes from 0:80:37:29:19:a4 seq_no=2 time=28.324 ms result=0
0 bytes from 0:80:37:29:19:a4 seq_no=3 time=46.150 ms result=0
% l2control -a 00:02:72:00:d4:1a read_channel_list
L2CAP channels:
Remote BD_ADDR     SCID/ DCID   PSM  IMTU/ OMTU State
00:07:e0:00:0b:ca    66/   64     3   132/  672 OPEN
% l2control -a 00:02:72:00:d4:1a read_connection_list
L2CAP connections:
Remote BD_ADDR    Handle Flags Pending State
00:07:e0:00:0b:ca     41 O           0 OPEN
% btsockstat
Active L2CAP sockets
PCB      Recv-Q Send-Q Local address/PSM       Foreign address   CID   State
c2afe900      0      0 00:02:72:00:d4:1a/3     00:07:e0:00:0b:ca 66    OPEN
Active RFCOMM sessions
L2PCB    PCB      Flag MTU   Out-Q DLCs State
c2afe900 c2b53380 1    127   0     Yes  OPEN
Active RFCOMM sockets
PCB      Recv-Q Send-Q Local address     Foreign address   Chan DLCI State
c2e8bc80      0    250 00:02:72:00:d4:1a 00:07:e0:00:0b:ca 3    6    OPEN

34.7.5.2. 无线电频率通信 (RFCOMM)

RFCOMM 协议提供了通过 L2CAP 协议仿真串行端口的功能。RFCOMM 是一种简单的传输协议,额外提供了仿真 9 个 RS-232 (EIATIA-232-E) 串行端口电路的功能。它支持两个 Bluetooth 设备之间最多 60 个同时连接 (RFCOMM 通道)。

对于 RFCOMM 来说,一个完整的通信路径涉及在通信端点上运行的两个应用程序,它们之间有一个通信段。RFCOMM 旨在处理利用设备串行端口的应用程序。通信段是从一个设备到另一个设备的直接连接 Bluetooth 链接。

RFCOMM 仅关注设备之间的连接(在直接连接情况下)或设备和调制解调器之间的连接(在网络情况下)。RFCOMM 还可以支持其他配置,例如,一些模块通过 Bluetooth 无线技术与另一端进行通信,而另一端则提供有线接口。

在 FreeBSD 中,RFCOMM 是在 Bluetooth 套接字层实现的。

34.7.5.3. 服务发现协议 (SDP)

服务发现协议 (SDP) 为客户端应用程序提供了一种发现由服务器应用程序提供的服务及其属性的手段。服务的属性包括所提供的服务的类型或类别,以及利用该服务所需的机制或协议信息。

SDP 涉及 SDP 服务器和 SDP 客户端之间的通信。服务器维护着一个服务记录列表,描述了与服务器关联的服务的特性。每个服务记录包含有关单个服务的信息。客户端可以通过发出 SDP 请求,从 SDP 服务器维护的服务记录中检索信息。如果客户端或与客户端关联的应用程序决定使用某个服务,则必须打开与服务提供者的单独连接才能利用该服务。SDP 提供了发现服务及其属性的机制,但不提供利用这些服务的机制。

通常,SDP 客户端会根据某些期望的服务特性来搜索服务。然而,有时也希望在没有关于服务的先验信息的情况下,发现 SDP 服务器的服务记录中描述的服务类型。这种查找所有提供的服务的过程被称为浏览。

% sdpcontrol -a 00:01:03:fc:6e:ec browse
Record Handle: 00000000
Service Class ID List:
        Service Discovery Server (0x1000)
Protocol Descriptor List:
        L2CAP (0x0100)
                Protocol specific parameter #1: u/int/uuid16 1
                Protocol specific parameter #2: u/int/uuid16 1

Record Handle: 0x00000001
Service Class ID List:
        Browse Group Descriptor (0x1001)

Record Handle: 0x00000002
Service Class ID List:
        LAN Access Using PPP (0x1102)
Protocol Descriptor List:
        L2CAP (0x0100)
        RFCOMM (0x0003)
                Protocol specific parameter #1: u/int8/bool 1
Bluetooth Profile Descriptor List:
        LAN Access Using PPP (0x1102) ver. 1.0

请注意,每个服务都有一个属性列表,例如 RFCOMM 通道。根据服务的不同,用户可能需要注意其中一些属性。某些 Bluetooth 实现可能不支持服务浏览,并可能返回空列表。在这种情况下,可以尝试搜索特定的服务。以下示例展示了如何搜索 OBEX 对象推送 (OPUSH) 服务:

% sdpcontrol -a 00:01:03:fc:6e:ec search OPUSH
sdpd_enable="YES"
# service sdpd start

可以通过发出 SDP 浏览查询来获取本地 SDP 服务器注册的服务列表:

# sdpcontrol -l browse

34.7.5.4. OBEX 对象推送 (OPUSH)

对象交换 (OBEX) 是一种广泛使用的协议,用于移动设备之间的简单文件传输。其主要用途是在红外通信中,用于笔记本电脑或 PDA 之间的通用文件传输,以及用于在手机和其他具有个人信息管理器 (PIM) 应用程序的设备之间发送名片或日历条目。

OBEX 客户端用于从 OBEX 服务器推送和/或拉取对象。示例对象包括名片或约会。OBEX 客户端可以通过 SDP 从远程设备获取 RFCOMM 通道号。这可以通过指定服务名称而不是 RFCOMM 通道号来完成。支持的服务名称包括:IrMC、FTRN 和 OPUSH。也可以将 RFCOMM 通道作为数字指定。以下是一个 OBEX 会话的示例,其中从手机中拉取设备信息对象,并将一个新的对象(名片)推送到手机的目录中。

% obexapp -a 00:80:37:29:19:a4 -C IrMC
obex> get telecom/devinfo.txt devinfo-t39.txt
Success, response: OK, Success (0x20)
obex> put new.vcf
Success, response: OK, Success (0x20)
obex> di
Success, response: OK, Success (0x20)
# obexapp -s -C 10

34.7.5.5. 串行端口配置文件 (SPP)

串行端口配置文件 (SPP) 允许 Bluetooth 设备执行串行电缆仿真。此配置文件允许传统应用程序通过虚拟串行端口抽象,使用 Bluetooth 替代电缆。

# rfcomm_sppd -a 00:07:E0:00:0B:CA -t
rfcomm_sppd[94692]: Starting on /dev/pts/6...
/dev/pts/6

连接后,可以使用伪终端作为串行端口:

# cu -l /dev/pts/6

伪终端将输出到标准输出,并且可以通过包装脚本读取:

PTS=`rfcomm_sppd -a 00:07:E0:00:0B:CA -t`
cu -l $PTS

34.7.6. 故障排除

默认情况下,当 FreeBSD 接受新连接时,它会尝试执行角色切换并成为主设备。一些不支持角色切换的旧 Bluetooth 设备将无法连接。由于角色切换是在建立新连接时执行的,因此无法询问远程设备是否支持角色切换。然而,可以使用 HCI 选项在本地端禁用角色切换:

# hccontrol -n ubt0hci write_node_role_switch 0

主机控制器接口(HCI)提供了一种统一的方法来访问蓝牙基带功能。在 FreeBSD 中,为每个蓝牙设备创建一个 netgraph HCI 节点。有关更多详细信息,请参阅 。

最常见的任务之一是查找 RF 范围内的蓝牙设备。此操作称为 查询。查询和其他 HCI 相关操作是通过 完成的。下面的示例演示了如何查找哪些蓝牙设备在范围内。设备列表应在几秒钟内显示。请注意,远程设备只有在设置为 可发现 模式时才会响应查询。

远程设备可以在 /etc/bluetooth/hosts 文件中分配别名。有关 /etc/bluetooth/hosts 文件的更多信息,请参阅 。

守护进程负责处理蓝牙身份验证请求。默认的配置文件是 /etc/bluetooth/hcsecd.conf。以下是为手机设置 PIN 码 1234 的示例配置:

PIN 码的唯一限制是长度。有些设备(如蓝牙耳机)可能有固定的内置 PIN 码。-d 选项强制 在前台运行,这样可以方便地查看发生了什么。将远程设备设置为接收配对请求,并启动与远程设备的蓝牙连接。远程设备应指示配对已被接受并请求输入 PIN 码。输入 hcsecd.conf 中列出的相同 PIN 码。现在,计算机和远程设备已经配对。或者,也可以在远程设备上发起配对。

可以将以下行添加到 /etc/rc.conf,以便在系统启动时自动启动 :

以下是 守护进程的示例输出:

在 FreeBSD 中,这些配置文件通过 和 包装程序实现,该包装程序将蓝牙连接转换为 PPP 可以使用的格式。使用配置文件之前,必须在 /etc/ppp/ppp.conf 中创建一个新的 PPP 标签。有关示例,请参考 。

以下示例使用 通过 DUNRFCOMM 通道与远程设备(BD_ADDR 为 00:80:37:29:19:a4)建立连接:

实际的通道号将通过 SDP 协议从远程设备获取。也可以手动指定 RFCOMM 通道,在这种情况下 将不会执行 SDP 查询。使用 查找远程设备上的 RFCOMM 通道。

为了通过 PPPLAN 服务提供网络访问,必须运行 ,并在 /etc/ppp/ppp.conf 中为 LAN 客户端创建新条目。有关示例,请参考 。最后,在有效的 RFCOMM 通道号上启动 RFCOMMPPP 服务器。RFCOMMPPP 服务器将自动向本地 SDP 守护进程注册蓝牙 LAN 服务。以下是如何启动 RFCOMMPPP 服务器的示例:

在 FreeBSD 中,每个 Bluetooth 设备会创建一个 netgraph L2CAP 节点。这个节点通常连接到下游的 Bluetooth HCI 节点和上游的 Bluetooth 套接字节点。L2CAP 节点的默认名称为 "devicel2cap"。更多细节请参考 。

一个有用的命令是 ,它可以用来 ping 其他设备。某些 Bluetooth 实现可能不会返回发送给它们的所有数据,因此以下示例中显示 0 字节 是正常的。

工具用于执行 L2CAP 节点上的各种操作。以下示例展示了如何获取本地设备的逻辑连接(通道)列表和基带连接列表:

另一个诊断工具是 ,它类似于 ,但用于 Bluetooth 网络相关的数据结构。以下示例展示了与 相同的逻辑连接。

Bluetooth SDP 服务器,,和命令行客户端,,已包含在 FreeBSD 的标准安装中。以下示例展示了如何执行 SDP 浏览查询。

在 FreeBSD 上向 Bluetooth 客户端提供服务是通过 服务器完成的。可以在 /etc/rc.conf 中添加以下行:

然后,可以通过以下命令启动 守护进程:

希望向远程客户端提供 Bluetooth 服务的本地服务器应用程序将服务注册到本地 SDP 守护进程。一个这样的应用程序示例是 。待启动,它将与本地 SDP 守护进程注册 Bluetooth LAN 服务。

OBEX 服务器和客户端由 obexapp 实现,可以通过 软件包和 Ports 进行安装。

为了提供 OPUSH 服务,必须运行 ,并且必须创建一个根文件夹,所有传入的对象将存储在该文件夹中。根文件夹的默认路径是 /var/spool/obex。最后,在有效的 RFCOMM 通道号上启动 OBEX 服务器。OBEX 服务器将自动将 OPUSH 服务注册到本地 SDP 守护进程。以下是启动 OBEX 服务器的示例。

在 FreeBSD 中, 实现了 SPP,并且使用伪终端 (pseudo tty) 作为虚拟串行端口抽象。以下示例展示了如何连接到远程设备的串行端口服务。由于 可以通过 SDP 从远程设备获取 RFCOMM 通道,因此不需要指定 RFCOMM 通道。若要覆盖此设置,可在命令行中指定 RFCOMM 通道。

要显示 Bluetooth 数据包,可以使用第三方软件包 hcidump,该软件包可以通过包或 Port 安装。此工具类似于 ,可以用于显示 Bluetooth 数据包的内容到终端,并将 Bluetooth 数据包转储到文件中。

netgraph(4)
ng_ubt(4)
ubtbcmfw(4)
ng_ubt(4)
ng_bt3c(4)
sio(4)
ng_h4(4)
hcseriald(8)
ng_ubt(4)
hcsecd(8)
ng_hci(4)
hccontrol(8)
bluetooth.hosts(5)
hcsecd(8)
hcsecd(8)
hcsecd(8)
hcsecd(8)
ppp(8)
rfcomm_pppd(8)
rfcomm_pppd(8)
rfcomm_pppd(8)
rfcomm_pppd(8)
sdpcontrol(8)
sdpd(8)
rfcomm_pppd(8)
ng_l2cap(4)
l2ping(8)
l2control(8)
btsockstat(1)
netstat(1)
l2control(8)
sdpd(8)
sdpcontrol(8)
sdpd(8)
sdpd(8)
rfcomm_pppd(8)
comms/obexapp
sdpd(8)
rfcomm_sppd(1)
rfcomm_sppd(1)
comms/hcidump
tcpdump(1)