linux 支持USB WIFI 调试 log

本文介绍如何为AM335X ARM芯片配置WiFi,包括修改内核配置以支持无线网络、复制必要的固件及工具文件到根文件系统,并通过wpa_supplicant进行网络连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发环境:

HOST---- UBUNTU

ARM 芯片 ---- AM335X

author:DriverMonkey


Step1: 修改内核配置

[*] Networking support  --->

  [*]   Wireless  --->

      <*>   cfg80211 - wireless configuration API

      [*]   Wireless extensions sysfs files

      <*>   Generic IEEE 802.11 Networking Stack(mac80211)

Device Drivers  --->

  [*]Network device support  --->

     [*]   Wireless LAN  --->

       <*> IEEE 802.11 for Host AP (Prism2/2.5/3 andWEP/TKIP/CCMP)

       [*] Support downloading firmware images withHost AP driver

       [*] Support for non-volatile firmwaredownload

       [*] Ralink driver support  --->

              [*] Ralink rt27xx/rt28xx/rt30xx (USB) support

Step2: Copy wifi 工具相关文件

1.复制 rt2870.bin(这个文件可以通过芯片官网现在) 到机器根文件系统 /lib/firmware 目录

2.复制 wifi配置工具到根文件系统 如下所示:

PS:以下文件都可以从TI 官方 root fs 找到

/usr/sbin/wpa_passphrase
/usr/sbin/wpa_cli
/usr/sbin/wpa_supplicant

3.复制wifi 配置工具依赖库到根文件对应目录, 如下所示:

 PS:以下文件都可以从TI 官方root fs 找到

 [libnl.so.2]
 [libnl-genl.so.2]
 [libssl.so.1.0.0]
 [libcrypto.so.1.0.0]
 [libdl.so.2]
 [libdbus-1.so.3]
 [libc.so.6]

Step3.配置wifi使其联网

1. pa_passphrase Siglent11_RD Password111 > wpa.conf 

将生成 wpa.config 文件 其中  Siglent11_RD 是用户名, Password111 是密码

2.wpa_supplicant -i wlan0 -c ./wpa.conf  连接上网 

3.udhcpc -i wlan0  自动分配IP 连接网络



<think>我们面对的是一个安卓9车机系统,需要实现三个功能: 1. 开启WiFi调试(即ADB over TCP/IP) 2. 关闭USB调试 3. 挂载U盘 由于是车机系统,通常已经root或者有较高权限(工厂模式),我们可以通过init.d脚本或者修改系统文件来实现。 根据引用[1]中的信息,我们可以进入工厂模式开启开发者选项,并设置ADB调试。但是这里我们需要在开机脚本中自动完成。 步骤分解: 1. 开启WiFi调试:通过设置系统属性 `service.adb.tcp.port` 来开启,通常设置为5555。 命令:`setprop service.adb.tcp.port 5555` 然后需要重启adbd服务:`stop adbd; start adbd` 或者 `setprop ctl.restart adbd` 2. 关闭USB调试USB调试对应的属性是 `persist.sys.usb.config`,当设置为仅充电模式(none)或者MTP模式时,不包含adb,即可关闭USB调试。 但是注意,我们只需要关闭USB调试,而USB连接的其他功能(如文件传输)可能还需要。不过,车机通常不需要USB调试,所以我们可以设置为仅MTP(文件传输)而不包含adb。 通常,开启adb时,属性值会包含adb,如`mtp,adb`。所以关闭adb,我们只需要设置为`mtp`(或者根据车机实际情况,可能是其他值,但要去掉adb)。 命令:`setprop persist.sys.usb.config mtp` 3. 挂载U盘:通常U盘插入后会自动挂载,但为了确保,我们可以检查并挂载。但是,车机系统可能已经自动挂载了。如果我们需要指定挂载点,可能需要额外操作。 假设U盘设备节点为 `/dev/block/sda1`(具体设备节点可能不同,需要根据实际情况),我们可以挂载到 `/mnt/usb`。 命令:`mkdir -p /mnt/usb; mount -t vfat /dev/block/sda1 /mnt/usb` 但是,挂载U盘需要注意: - U盘设备节点可能不是固定的,我们可以通过检查`/sys/block/`下的设备节点,或者通过`blkid`等命令获取。 - 另外,U盘可能不是vfat格式,可能是ntfs、exfat等,需要系统支持。 考虑到车机系统可能已经自动挂载,我们可以选择不处理,或者只处理未挂载的情况。 因此,我们编写一个init.d脚本,放在`/system/etc/init.d/`目录下(如果没有,按之前的方法创建)。 脚本内容: ```sh #!/system/bin/sh # 等待系统基本服务启动 sleep 15 # 1. 开启WiFi调试 setprop service.adb.tcp.port 5555 # 2. 关闭USB调试(去掉adb) setprop persist.sys.usb.config mtp # 3. 挂载U盘(如果系统没有自动挂载) # 查找U盘设备(假设为sda1,实际可能需要动态查找) USB_DEVICE="/dev/block/sda1" MOUNT_POINT="/mnt/usb" # 检查设备是否存在 if [ -b $USB_DEVICE ]; then # 创建挂载点 mkdir -p $MOUNT_POINT # 尝试挂载,文件系统类型自动检测 mount -t auto $USB_DEVICE $MOUNT_POINT fi # 重启adbd使新的adb设置生效(包括端口和USB调试的关闭) setprop ctl.restart adbd ``` 注意:这个脚本需要放在init.d目录,并确保有执行权限。另外,由于车机系统可能没有busybox,我们使用系统自带的mount命令(可能不支持auto,如果支持的话可以这样写,否则需要指定文件系统类型)。 如果系统没有自动创建init.d目录,我们可以通过修改`/system/etc/install-recovery.sh`来引导执行init.d脚本,方法如之前所述。 另外,根据引用[1]中提到的,我们需要在开发者选项中打开调试,但这里我们通过设置属性开启,所以不需要手动操作。但是,如果系统有安全限制,可能需要先设置`ro.adb.secure=0`(不安全,但车机通常不需要这么严格),或者确保已经授权过。 但是,关闭USB调试可能会影响后续通过USB线调试,所以请谨慎。不过,我们开启了WiFi调试,所以可以通过网络连接ADB。 验证步骤: 1. 重启车机,等待启动完成。 2. 使用同一局域网的电脑,执行`adb connect <车机IP>:5555`,看是否连接成功。 3. 检查USB调试是否关闭:在设置中查看,或者通过`adb shell getprop persist.sys.usb.config`,应该不包含adb。 4. 检查U盘是否挂载到`/mnt/usb`,使用`adb shell ls /mnt/usb`。 注意事项: - 脚本中的等待时间`sleep 15`可能需要根据车机启动速度调整。 - 挂载U盘部分,如果系统已经自动挂载,则不会再次挂载(因为设备节点可能被占用)。我们可以先检查挂载点是否已经挂载,如果已经挂载则跳过。 - 如果U盘设备节点不是sda1,可能是sdb1、sdc1等,我们可以遍历`/sys/block/`下的sd*设备,检查是否有可移动设备。 改进挂载部分: ```sh # 挂载U盘(遍历所有块设备,检查是否为可移动设备) for block in /sys/block/*; do if [ -f $block/removable ]; then removable=$(cat $block/removable) if [ "$removable" -eq "1" ]; then device_name=$(basename $block) # 检查第一个分区 partition="/dev/block/${device_name}1" if [ -b $partition ]; then MOUNT_POINT="/mnt/$device_name" mkdir -p $MOUNT_POINT # 检查是否已经挂载 if ! mount | grep -q $partition; then mount -t auto $partition $MOUNT_POINT fi fi fi fi done ``` 综合以上,完整的脚本如下: ```sh #!/system/bin/sh # 等待系统基本服务启动 sleep 15 # 开启WiFi调试 setprop service.adb.tcp.port 5555 # 关闭USB调试(去掉adb,只保留MTP) setprop persist.sys.usb.config mtp # 重启adbd使设置生效 setprop ctl.restart adbd # 挂载所有可移动设备(U盘) for block in /sys/block/*; do if [ -f $block/removable ]; then removable=$(cat $block/removable) if [ "$removable" -eq "1" ]; then device_name=$(basename $block) # 检查第一个分区(通常U盘只有一个分区) partition="/dev/block/${device_name}1" if [ -b $partition ]; then MOUNT_POINT="/mnt/$device_name" mkdir -p $MOUNT_POINT # 检查是否已经挂载 if ! mount | grep -q $partition; then mount -t auto $partition $MOUNT_POINT fi fi fi fi done ``` 部署步骤: 1. 将脚本保存为`99custom`(注意没有.sh后缀也可以,但通常init.d脚本没有后缀,或者有.sh,根据系统支持) 2. 推送到车机:`adb push 99custom /system/etc/init.d/` 3. 设置权限:`adb shell chmod 755 /system/etc/init.d/99custom` 4. 如果系统没有init.d支持,需要修改`/system/etc/install-recovery.sh`,在末尾添加: `run-parts /system/etc/init.d` 并确保`install-recovery.sh`有执行权限。 注意:修改系统文件需要root权限,且需要挂载系统分区为可写。 如果车机系统有SELinux限制,可能需要添加SELinux规则,或者设置SELinux为permissive模式(不推荐)。 另外,如果车机系统没有`run-parts`命令,可以使用循环执行脚本: `for i in /system/etc/init.d/*; do $i; done` 因此,修改`install-recovery.sh`的内容可以是: ```sh #!/system/bin/sh # 执行init.d目录下的所有脚本 for script in /system/etc/init.d/*; do if [ -x $script ]; then $script fi done ``` 然后设置权限:`chmod 755 /system/etc/install-recovery.sh` 最后,重启车机。 引用说明: - 开启开发者选项和ADB网络调试的方法参考了引用[1]。 - 挂载U盘部分没有直接引用,但根据Linux通用知识编写。 注意:以上操作需要谨慎,错误的脚本可能导致系统无法正常启动,建议先测试脚本的每一部分。 相关问题: 1. 如何查看安卓设备的可移动存储设备节点? 2. 安卓9车机系统如何永久关闭SELinux? 3. 如果车机系统没有init.d支持,除了install-recovery.sh还有什么方法? 4. 如何通过ADB命令测试挂载U盘? 5. 安卓车机系统如何设置静态IP?</think>### 安卓9车机系统开机脚本配置指南 #### 完整操作流程 ```bash 1. 创建init.d目录并设置权限: adb shell "su -c 'mkdir -p /system/etc/init.d && chmod 755 /system/etc/init.d'" 2. 创建启动脚本(99custom.sh): adb shell "su -c 'cat > /system/etc/init.d/99custom.sh << EOF #!/system/bin/sh # 等待系统服务初始化(安卓9需要) sleep 15 # 开启WiFi调试 setprop service.adb.tcp.port 5555 setprop persist.adb.tcp.port 5555 # 关闭USB调试 setprop sys.usb.config mtp setprop persist.sys.usb.config mtp # 挂载U盘(自动检测设备) for block in /sys/block/*; do if [ \$(cat \$block/removable) -eq 1 ]; then dev=/dev/block/\$(basename \$block) mkdir -p /mnt/usbdrive mount -t vfat \$dev /mnt/usbdrive break fi done # 重启ADB服务使配置生效 stop adbd start adbd EOF'" 3. 设置脚本权限: adb shell "su -c 'chmod 755 /system/etc/init.d/99custom.sh'" 4. 创建引导文件: adb shell "su -c 'echo -e \"#!/system/bin/sh\\nrun-parts /system/etc/init.d\" > /system/etc/install-recovery.sh'" adb shell "su -c 'chmod 755 /system/etc/install-recovery.sh'" 5. 重启设备使配置生效: adb reboot ``` #### 关键配置说明 | **功能** | **命令** | **作用原理** | |----------|----------|--------------| | **开启WiFi调试** | `setprop service.adb.tcp.port 5555` | 设置ADB监听TCP端口[^1] | | **关闭USB调试** | `setprop persist.sys.usb.config mtp` | 将USB模式设为纯文件传输 | | **挂载U盘** | `mount -t vfat /dev/block/sda1 /mnt/usbdrive` | 挂载VFAT格式存储设备 | | **服务重启** | `stop adbd && start adbd` | 重新加载ADB配置 | #### 验证方法 ```bash # 检查WiFi调试状态 adb shell getprop service.adb.tcp.port # 应返回5555 # 检查USB调试状态 adb shell getprop persist.sys.usb.config # 应返回mtp # 检查U盘挂载 adb shell ls /mnt/usbdrive # 查看脚本日志 adb shell cat /data/local/tmp/init.d.log ``` #### 注意事项 1. **设备兼容性**: ```bash # 添加文件系统检查 if grep -q vfat /proc/filesystems; then mount -t vfat $dev /mnt/usbdrive else # 备用方案 mount $dev /mnt/usbdrive fi ``` 2. **SELinux权限处理**: ```bash # 添加SELinux规则 adb shell "su -c 'magiskpolicy --live \"allow init system_file file *\"'" ``` 3. **U盘自动检测优化**: ```bash # 改进的设备检测逻辑 find_usb() { for dev in /dev/block/sd*; do [ -b $dev ] && echo $dev && return done } mount -t auto $(find_usb) /mnt/usbdrive ``` 4. **错误处理机制**: ```bash # 在脚本开头添加 exec 2>/data/local/tmp/init_errors.log set -e ``` #### 技术原理 安卓9车机启动流程: $$ \text{Bootloader} \rightarrow \text{init.rc} \rightarrow \begin{cases} \text{核心服务启动} \\ \color{red}{\text{install-recovery.sh}} \\ \text{系统UI启动} \end{cases} $$ 脚本通过`install-recovery.sh`在系统服务启动后、用户界面加载前执行[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值