Linux(5)WIFI/BT调试笔记

简介: Linux(5)WIFI/BT调试笔记

0x01 调试WIFI/BT

1. 确认几个关键点

rk_linux\kernel\drivers\net\wireless\rockchip_wlan\rkwifi\rk_wifi_config.c

#define VENDOR_ETC_FIRMWARE "/vendor/etc/firmware/"
#define SYSTEM_ETC_FIRMWARE "/system/etc/firmware/"
 
if (chip == WIFI_AP6256) {
    sprintf(fw, "%s%s", ANDROID_FW_PATH, "fw_bcm43456C5_ag.bin");
    sprintf(nvram, "%s%s", ANDROID_FW_PATH, "nvram_ap6256.txt");
}

rk_linux/kernel/arch/arm64/boot/dts/rockchip$ vi rkxxxx-wr-lp4-linux.dts

rk_linux/kernel$ vi arch/arm64/configs/rockchip_linux_defconfig

CONFIG_AP6XXX=m

CONFIG_AP6XXX涉及的文件。

rk_linux/kernel$ grep -rn "CONFIG_AP6XXX"
drivers/net/wireless/rockchip_wlan/Makefile:2:obj-$(CONFIG_AP6XXX)      += rkwifi/
drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile:119:obj-$(CONFIG_AP6XXX) += bcmdhd.o
drivers/net/wireless/rockchip_wlan/rkwifi/Makefile:5:obj-$(CONFIG_AP6XXX) += bcmdhd/
drivers/net/wireless/rockchip_wlan/wifi_sys/rkwifi_sys_iface.c:188:#ifdef CONFIG_AP6XXX

2. 拷贝驱动文件

到external/rkwifibt/firmware/broadcom/AP6256/wifi目录 , 拷贝出fw_bcm43456c5_ag.binWIFI驱动文件 , nvram_ap6256.tx蓝牙驱动文件, 到主板上/vendor/etc/firmware/ 目录 , 没有则新建。

rk_linux/external/rkwifibt/firmware/broadcom/AP6256/wifi$ ls
fw_bcm43456c5_ag.bin  nvram_ap6256.tx

3. 加载bcmdhd驱动

lsmod //查看当前所有加载的ko
insmod  bcmdhd.ko  //在板子里 敲命令手动加载bcm驱动
rrmod   bcmdhd.ko //移除bcm驱动

正常情况下手动加载成功后lsmod会出现bcmdhd, 表示加载成功。

4. 命令行连接WiFi

nmcli device wifi list #查看wifi列表
nmcli dev wifi connect  WIFINAME  password WIFIPWD #连接wifi

敲完nmcli device wfi list正常情况下会出现wifi列表 , 如果没有出现可能是前面步骤2没有拷贝 , 或者本身模块问题。

5. bcmdhd自动加载的问题

bcmdhd默认m编译出ko文件 , 但是不会拷贝到文件系统里 , 需要通过脚本打包到rootfs里。

其次 如果要自动加载 , 需要通过命令行脚本 在开机启动的时候执行 insmod bcmdhd.ko 。

已尝试过把bcmdhd改成y , wifi 驱动加载不出来。

0x02 调试BT

1.安装蓝牙协议栈

(确保)安装 bluez,该软件包提供蓝牙的协议栈。

linux可以了 , 用的最新wifi/bt固件 , gpio改了 , 然后要执行

apt install bluez

2.调试蓝牙命令

# 蓝牙下电
echo 0 > /sys/class/rfkill/rfkill0/state
sleep 1
# 蓝牙上电
echo 1 > /sys/class/rfkill/rfkill0/state
sleep 1
# 指定串口
brcm_patchram_plus1 --enable_hci --no2bytes --tosleep 200000 --baudrate 9600 --patchram /system/etc/firmware/BCM4345C5.hcd /dev/ttyS0 &
sleep 5
chmod 777 /dev/ttyS0
chmod 777 /dev/ttyS4
sleep 3
# 打开hci0 
hciconfig hci0 up
 
执行: cd /opt
执行: rz > 导入brcm_patchram_plus1文件(这玩意是我编译出来的)
执行: chmod 777 /usr/bin/brcm_patchram_plus1
执行: ./brcm_patchram_plus1 --enable_hci --no2bytes --tosleep 200000 --baudrate 9600 \
        --patchram /system/etc/firmware/BCM4345C5.hcd /dev/ttyS0 &
(
必须出现以下打印
###AMPAK FW Auto detection patch version = [v1.1 20161117]###
FW folder path = /system/etc/firmware
proc_resetchip id = BCM4345C5
要把system/目录下所有777
需要执行这2行才能看到打印结果 ,
 echo 0 > /sys/class/rfkill/rfkill0/state
 echo 1 > /sys/class/rfkill/rfkill0/state
)
执行: hciconfig hci0 up(要出现hci0设备,没有则是有问题)
执行: bluetoothctl 进入蓝牙模式后
  输入power on
  输入scan on
  输入discoverable on
  输入pair on
  输入完以上---可以在手机上看到ubuntu.server的蓝牙 点击这个名字 匹配 , 会提示输入yes/no 输入yes即可连接
  输入devices 可以查看附近设备
 
---其他命令
sudo systemctl start bluetooth
sudo systemctl enable bluetooth
 
 
 
bluetoothctl
进入[bluetooth]# 模式
[bluetooth]# help
Available commands:
  list                       List available controllers
  show [ctrl]                Controller information
  select <ctrl>              Select default controller
  devices                    List available devices
  paired-devices             List paired devices
  power <on/off>             Set controller power
  pairable <on/off>          Set controller pairable mode
  discoverable <on/off>      Set controller discoverable mode
  agent <on/off/capability>  Enable/disable agent with given capability
  default-agent              Set agent as the default one
  set-scan-filter-uuids [uuid1 uuid2 ...] Set scan filter uuids
  set-scan-filter-rssi [rssi] Set scan filter rssi, and clears pathloss
  set-scan-filter-pathloss [pathloss] Set scan filter pathloss, and clears rssi
  set-scan-filter-transport [transport] Set scan filter transport
  set-scan-filter-clear      Clears discovery filter.
  scan <on/off>              Scan for devices
  info [dev]                 Device information
  pair [dev]                 Pair with device
  trust [dev]                Trust device
  untrust [dev]              Untrust device
  block [dev]                Block device
  unblock [dev]              Unblock device
  remove <dev>               Remove device
  connect <dev>              Connect device
  disconnect [dev]           Disconnect device
  list-attributes [dev]      List attributes
  select-attribute <attribute> Select attribute
  attribute-info [attribute] Select attribute
  read                       Read attribute value
  write <data=[xx xx ...]>   Write attribute value
  notify <on/off>            Notify attribute value
  register-profile <UUID ...> Register profile to connect
  unregister-profile         Unregister profile
  version                    Display version
  quit                       Quit program
 
 
 
root@ubuntu:/mnt/usb# systemctl status bluetooth.service
● bluetooth.service - Bluetooth service
     Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor pre>
     Active: active (running) since Sun 2023-01-29 07:32:08 UTC; 1h 18min ago
       Docs: man:bluetoothd(8)
   Main PID: 436 (bluetoothd)
     Status: "Running"
     CGroup: /system.slice/bluetooth.service
             └─436 /usr/lib/bluetooth/bluetoothd


相关文章
|
20天前
|
监控 数据可视化 Ubuntu
|
30天前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
93 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
3天前
|
缓存 NoSQL Linux
Linux调试
本文介绍了Linux调试、性能分析和追踪的培训资料,涵盖调试、性能分析和追踪的基础知识及常用工具。
27 6
Linux调试
|
25天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
73 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
3月前
|
Unix Linux 开发工具
linux笔记 diff及patch的制作与使用
这篇文章是关于Linux系统中使用`diff`命令生成补丁文件以及使用`patch`命令应用这些补丁的详细教程和实战案例。
81 2
linux笔记 diff及patch的制作与使用
|
3月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
61 10
|
3月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
3月前
|
Ubuntu Linux
内核实验(四):Qemu调试Linux内核,实现NFS挂载
本文介绍了在Qemu虚拟机中配置NFS挂载的过程,包括服务端的NFS服务器安装、配置和启动,客户端的DHCP脚本添加和开机脚本修改,以及在Qemu中挂载NFS、测试连通性和解决挂载失败的方法。
179 0
内核实验(四):Qemu调试Linux内核,实现NFS挂载
|
3月前
|
数据采集 Linux
Linux源码阅读笔记20-PCI设备驱动详解
Linux源码阅读笔记20-PCI设备驱动详解
|
3月前
|
网络协议 安全 Linux
在Linux中,如何使用Netcat进行网络调试和端口扫描?
在Linux中,如何使用Netcat进行网络调试和端口扫描?