- Modify Kernel Code
a. pci_generic.c
b. kernel config
c. lspci$ grep -i "mhi" ./config-6.9.12 CONFIG_QRTR_MHI=m # CONFIG_PCI_EPF_MHI is not set CONFIG_MHI_BUS=m CONFIG_MHI_BUS_DEBUG=y CONFIG_MHI_BUS_PCI_GENERIC=m CONFIG_MHI_BUS_EP=m CONFIG_MHI_NET=m CONFIG_MHI_WWAN_CTRL=m CONFIG_MHI_WWAN_MBIM=m
d. dmesg$ lspci -nn 03:00.0 Unassigned class [ff00]: Qualcomm Device [17cb:011a] $ lspci -k 03:00.0 Unassigned class [ff00]: Qualcomm Device 011a Subsystem: Device 1c5d:2020 Kernel driver in use: mhi-pci-generic Kernel modules: mhi_pci_generic
e. device node$ sudo dmesg | grep -i mhi [ 5.721867] mhi_pci_generic: module verification failed: signature and/or required key missing - tainting kernel [ 5.724379] mhi-pci-generic 0000:03:00.0: MHI PCI device found: telit-fn920c04 [ 5.724387] mhi-pci-generic 0000:03:00.0: BAR 0 [mem 0xd0801000-0xd0801fff 64bit]: assigned [ 5.729509] mhi mhi0: Requested to power ON [ 5.729535] mhi mhi0: Power on setup success
f. interface$ ls -alh /dev/wwan0* crw------- 1 root root 242, 2 七 2 09:37 /dev/wwan0at0 crw------- 1 root root 242, 3 七 2 09:37 /dev/wwan0at1 crw------- 1 root root 242, 0 七 2 09:37 /dev/wwan0qcdm0 crw------- 1 root root 242, 1 七 2 09:37 /dev/wwan0qmi0
$ ls /sys/class/net/ eno1 lo mhi_hwip0 $ udevadm info /sys/class/net/mhi_hwip0 P: /devices/pci0000:00/0000:00:1c.0/0000:03:00.0/mhi0/mhi0_IP_HW0/net/mhi_hwip0 L: 0 E: DEVPATH=/devices/pci0000:00/0000:00:1c.0/0000:03:00.0/mhi0/mhi0_IP_HW0/net/mhi_hwip0 E: INTERFACE=mhi_hwip0 E: IFINDEX=3 E: SUBSYSTEM=net E: USEC_INITIALIZED=5963171 E: ID_MM_CANDIDATE=1 E: ID_BUS=pci E: ID_VENDOR_ID=0x17cb E: ID_MODEL_ID=0x011a E: ID_PCI_CLASS_FROM_DATABASE=Unassigned class E: ID_VENDOR_FROM_DATABASE=Qualcomm E: ID_PATH=pci-0000:03:00.0 E: ID_PATH_TAG=pci-0000_03_00_0 E: ID_NET_DRIVER=mhi_net E: ID_NET_LINK_FILE=/usr/lib/systemd/network/99-default.link E: ID_NET_NAME=mhi_hwip0 E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/mhi_hwip0 E: TAGS=:systemd: E: CURRENT_TAGS=:systemd:
at#swpkgv
49.00.000-B022-P0V.130000
M0V.060000-B022
P0V.130000
A0V.000000-B022
qmicli+udhcpc, 但系統無法取得IP, 用ip route解決
#write profile in /etc/qmi-network.conf
APN=INTERNET #CHT
APN_USER=
APN_PASS=
PROXY=yes
$ qmicli -V
qmicli 1.32.0
$ sudo qmicli -d /dev/wwan0qmi0 --dms-set-operating-mode='online'
[/dev/wwan0qmi0] Operating mode set successfully
$ sudo ip link set wwan0 up
$ sudo qmicli -d /dev/wwan0qmi0 --wda-get-data-format
[/dev/wwan0qmi0] Successfully got data format
QoS flow header: no
Link layer protocol: 'raw-ip'
Uplink data aggregation protocol: 'disabled'
Downlink data aggregation protocol: 'disabled'
NDP signature: '0'
Downlink data aggregation max datagrams: '0'
Downlink data aggregation max size: '0'
$ sudo qmi-network /dev/wwan0qmi0 start
Loading profile at /etc/qmi-network.conf...
APN: INTERNET
APN user: unset
APN password: unset
qmi-proxy: yes
IP_TYPE: unset
PROFILE: unset
Checking data format with 'qmicli -d /dev/wwan0qmi0 --wda-get-data-format --device-open-proxy'...
Device link layer protocol retrieved: raw-ip
Getting expected data format with 'qmicli -d /dev/wwan0qmi0 --get-expected-data-format'...
error: cannot get expected data format: Setting expected data format management is unsupported by the driver
Expected link layer protocol not retrieved: kernel unsupported
Updating device link layer protocol with 'qmicli -d /dev/wwan0qmi0 --wda-set-data-format=802-3 --device-open-proxy'...
New device link layer protocol retrieved: raw-ip
Starting network with 'qmicli -d /dev/wwan0qmi0 --wds-start-network=apn='INTERNET' --client-no-release-cid --device-open-proxy'...
Saving state at /tmp/qmi-network-state-wwan0qmi0... (CID: 15)
Saving state at /tmp/qmi-network-state-wwan0qmi0... (PDH: 3771166512)
Network started successfully
$ sudo qmicli -d /dev/wwan0qmi0 --wds-get-current-settings
[/dev/wwan0qmi0] Current settings retrieved:
IP Family: IPv4
IPv4 address: 10.169.211.193
IPv4 subnet mask: 255.255.255.252
IPv4 gateway address: 10.169.211.194
IPv4 primary DNS: 168.95.1.1
IPv4 secondary DNS: 168.95.192.1
MTU: 1500
Domains: none
$ sudo ip addr add 10.169.211.193/30 dev mhi_hwip0
$ ip route
10.169.211.192/30 dev mhi_hwip0 proto kernel scope link src 10.169.211.193
$ sudo ip route add default via 10.169.211.193
$ ifconfig mhi_hwip0
mhi_hwip0: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 16384
inet 10.169.211.193 netmask 255.255.255.252 destination 10.169.211.193
inet6 fe80::200:ff:fe00:0 prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6 bytes 288 (288.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
$ ping -I mhi_hwip0 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 10.169.211.193 mhi_hwip0: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=114 time=432 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=114 time=35.6 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=114 time=32.7 ms
...
...
$ ping google.com
ping: google.com: Temporary failure in name resolution
$ echo "nameserver 168.95.1.1" | sudo tee /etc/resolv.conf
nameserver 168.95.1.1
$ ping google.com
PING google.com (142.250.198.78) 56(84) bytes of data.
64 bytes from lctsaa-ab-in-f14.1e100.net (142.250.198.78): icmp_seq=1 ttl=114 time=15.5 ms
64 bytes from lctsaa-ab-in-f14.1e100.net (142.250.198.78): icmp_seq=2 ttl=114 time=40.8 ms
64 bytes from lctsaa-ab-in-f14.1e100.net (142.250.198.78): icmp_seq=3 ttl=114 time=39.9 ms
...
...
ModemManager (FN920C04 PCIE是用 wwan0qmi0)
$ mmcli --version
mmcli 1.18.6
Copyright (2011 - 2021) Aleksander Morgado
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ mmcli -L
/org/freedesktop/ModemManager1/Modem/0 [Telit Cinterion] FN920C04-WW
$ mmcli -m 0
----------------------------------
General | path: /org/freedesktop/ModemManager1/Modem/0
| device id: 6be85a5a4dfee78138924ac7c4fa075a8ebca546
----------------------------------
Hardware | manufacturer: Telit Cinterion
| model: FN920C04-WW
| firmware revision: M0V.060000-B022
| carrier config: default
| h/w revision: 1.20
| supported: lte, 5gnr
| current: lte, 5gnr
| equipment id: 355411761011444
----------------------------------
System | device: /sys/devices/pci0000:00/0000:00:1c.0/0000:03:00.0
| drivers: mhi_net, mhi-pci-generic
| plugin: generic
| primary port: wwan0qmi0
| ports: mhi_hwip0 (net), wwan0at0 (at), wwan0at1 (at),
| wwan0qmi0 (qmi)
----------------------------------
...
...
...
----------------------------------
3GPP EPS | ue mode of operation: csps-2
| initial bearer path: /org/freedesktop/ModemManager1/Bearer/0
| initial bearer ip type: ipv4
----------------------------------
SIM | primary sim path: /org/freedesktop/ModemManager1/SIM/0
| sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
| slot 2: none
troubleshooting
1. disable ModemManager and poweroff.
$ sudo qmicli -d /dev/wwan0qmi0 --dms-set-operating-mode='online'
[sudo] password for ubuntu:
[02 七 2025, 10:03:49] -Warning ** Error reading from istream: Resource temporarily unavailable
error: couldn't create client for the 'dms' service: CID allocation failed in the CTL client: endpoint hangup
2. 目前的FN920C04 FW(B22), 好像還不能使用ModemManager...升級1.24後再來試試
$ sudo mmcli -m 0 --create-bearer='apn=internet,ip-type=ipv4'
[sudo] password for ubuntu:
Successfully created new bearer in modem:
/org/freedesktop/ModemManager1/Bearer/1
$ sudo mmcli -m 0 --simple-connect='apn=internet,ip-type=ipv4v6'
error: couldn't connect the modem: 'GDBus.Error:org.freedesktop.ModemManager1.Error.MobileEquipment.NetworkTimeout: Network timeout'
沒有留言:
張貼留言