Parrot AR Drone 2.0 上嵌入式 2.6.32.9 内核上的 4G 调制解调器

Parrot AR Drone 2.0 上嵌入式 2.6.32.9 内核上的 4G 调制解调器

我正在尝试编译对华为 E3276 USB LTE 调制解调器的支持,以便在基于内核 2.6.32 的 Parrot AR Drone 2.0 上安装嵌入式 Linux/BusyBox;但是,加载内核模块后我遇到了一些问题。

我首先加载必要的内核模块:

  • USB网,
  • 疾病预防控制中心-ACM,
  • cdc_子集,
  • CDC_以太币,
  • 信息产业部,
  • USB串口

该调制解调器的行为类似于以太网 NIC,提供路由接口(端口上为 192.168.1.100 eth),因此所有实际的 4G 设置都是通过 Web 接口在调制解调器本身上完成的(如果您想知道为什么我不包括qmi_wwan驱动程序)。

然后我插入 4G 调制解调器,直到在dmesg和中看到以下条目lsusb

lsusb:

Bus 001 Device 002: ID 12d1:1f01 Huawei Technologies Co., Ltd.

dmesg:

scsi8 : SCSI emulation for USB Mass Storage devices
usb 1-1: uevent
usb-storage: device found at 12
usb-storage: waiting for device to settle before scanning
/home/stephane/.ardrone/linux/ardrone2_ARDrone2_Version_20130102/Linux/kernel/omap/drivers/usb/core/inode.c: creating file '012'
hub 1-0:1.0: state 7 ports 1 chg 0000 evt 0002
hub 1-0:1.0: port 1 enable change, status 00000503
scsi 8:0:0:0: CD-ROM            HUAWEI   Mass Storage     2.31 PQ: 0 ANSI: 2

此时,我使用modeswitch命令将设备置于调制解调器模式:

usb_modeswitch-1.1.9-arm-static -v 12d1 -p 1f01 -W -M 55534243123456780000000000000011060000000000000000000000000000

这会成功并更改产品代码并重新连接它:

lsusb:

Bus 001 Device 003: ID 12d1:1001 Huawei Technologies Co., Ltd. E620 USB Modem

dmesg:

usb-storage 1-1:1.0: disconnect by usbfs
usb 1-1: usbfs: process 4792 (usb_modeswitch-) did not claim interface 0 before use
hub 1-0:1.0: state 7 ports 1 chg 0000 evt 0002
hub 1-0:1.0: port 1, status 0100, change 0001, 12 Mb/s
usb 1-1: USB disconnect, address 12
usb 1-1: unregistering device
usb 1-1: usb_disable_device nuking all URBs
usb 1-1: unregistering interface 1-1:1.0
usb 1-1:1.0: uevent
usb 1-1: uevent
hub 1-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x100
hub 1-0:1.0: hub_suspend
usb usb1: bus auto-suspend
usb usb1: usb resume
hub 1-0:1.0: hub_resume
hub 1-0:1.0: port 1: status 0101 change 0001
hub 1-0:1.0: state 7 ports 1 chg 0002 evt 0000
hub 1-0:1.0: port 1, status 0101, change 0000, 12 Mb/s
usb 1-1: new high speed USB device using musb_hdrc and address 13
usb 1-1: skipped 4 descriptors after interface
usb 1-1: skipped 4 descriptors after interface
usb 1-1: skipped 4 descriptors after interface
usb 1-1: default language 0x0409
usb 1-1: udev 13, busnum 1, minor = 12
usb 1-1: New USB device found, idVendor=12d1, idProduct=1001
usb 1-1: New USB device strings: Mfr=2, Product=1, SerialNumber=0
usb 1-1: Product: HUAWEI Mobile
usb 1-1: Manufacturer: HUAWEI Technology
usb 1-1: uevent
usb 1-1: usb_probe_device
usb 1-1: no configuration chosen from 1 choice
/home/stephane/.ardrone/linux/ardrone2_ARDrone2_Version_20130102/Linux/kernel/omap/drivers/usb/core/inode.c: creating file '013'
hub 1-0:1.0: state 7 ports 1 chg 0000 evt 0002
hub 1-0:1.0: port 1 enable change, status 00000503
Spurious irq 95: 0xffffffdf, please flush posted write for irq 56

不幸的是,在该usb_probe_device步骤之后,它显示它已找到配置,但在没有解释的情况下并未选择它。

任何人都可以帮我找出它不继续执行找到的配置的原因吗?我应该采取哪些诊断步骤?我应该尝试哪些测试?

答案1

我正在尝试做和你一样的事情:让 3G/4G 调制解调器在 ARDrone2 上运行。但我的进度不如你,我才刚刚开始使用工具链,而且我最初几次尝试运行 hello world 时都失败了。

我真的没有答案,只有一个想法。我对你的日志消息进行了快速谷歌搜索,发现了这一点: https://bugzilla.kernel.org/show_bug.cgi?id=8167

但是,我相信 ARDrone2 使用的是内核 2.6.32.9,并且在查看 bugzilla 中提到的代码文件后,在我看来,提到的修复程序已经存在。

这让我想到:ARDrone2 有一个uclinux构建,通常针对嵌入式系统,因此构建经过优化,具有极简功能。也许在编译无人机中的内核模块时没有设置某些标志(文件generic.c有注释,似乎也在语句的相关行周围暗示了这一点#if !defined)。

如果这是真的,那就需要重新编译并启用正确的标志。不过,我无法测试你的问题。我的调制解调器仍在路上。

相关内容