在defconfig中开启如下两个宏:
CONFIG_USB_USBNET=y
CONFIG_USB_NET_RNDIS_HOST=y
开启之后编译验证
方式一 、使用ifconfig -a查看是否存在一个usb0的设备
方式二、查看/sys/class/net/下是否存在usb0的设备
如果不存在usb0,就要检查usb设备描述符是否匹配,确认设备是否是rdnis设备
首先,USB RNDIS 设备描述符结构如下:
-
bLength:描述符的长度,一般为 0x12。
-
bDescriptorType:描述符类型,一般为 0x01。
-
bcdUSB:支持的 USB 协议版本号,例如 0x0200 表示 USB 2.0。
-
bDeviceClass:设备类代码,RNDIS 设备通常被识别为 CDC(Communication Device Class)设备,因此该值为 0x02。
-
bDeviceSubClass:设备子类代码,RNDIS 设备通常为 0x02
-
bDeviceProtocol:设备协议代码,RNDIS 设备通常为 0xff,
-
bMaxPacketSize0:默认数据包尺寸,一般为 0x40。
-
idVendor:供应商 ID,由 USB 实现论坛授权分配。
-
idProduct:产品 ID,由制造商自行决定。
-
bcdDevice:设备版本号,由制造商自行决定。
-
iManufacturer:制造商名称的字符串描述符索引。
-
iProduct:产品名称的字符串描述符索引。
-
iSerialNumber:设备序列号的字符串描述符索引。
-
bNumConfigurations:设备支持的配置数目,一般为 0x01。
查看代码中是否存在和设备相同的设备描述符 bDeviceClass、bDeviceSubClass、bDeviceProtocol
kernel4.14\drivers\net\usb\rndis_host.c
如上面存在usb0,但是ifconfig看不到,没有ip,则需要修改下面的地方
修改frameworks\base\core\res\res\values\config.xml文件
<string translatable="false" name="config_ethernet_iface_regex">eth\\d</string>
改成
<string translatable="false" name="config_ethernet_iface_regex">eth\\d|usb\\d</string>
在对应平台的init.rc中添加,不知道修改那个文件,可以搜索对应平台的dhcpcd_eth0是在哪里添加,直接复制粘贴即可。
service dhcpcd_usb0 /system/bin/dhcpcd -ABKLG
class late_start
disabled
oneshot
service iprenew_usb0 /system/bin/dhcpcd -n
class late_start
disabled
oneshot
修改完成后验证如下: