Raspberry Pi Kernel 6 and Arducam

I updated the software on my development machine this morning without thinking too much about it. After doing so, I checked my program that uses the camera to see if it was running properly. I’ve got an Arducam64mp camera that I’m using on that machine, and often when the kernel gets updated I need to reinstall the kernel drivers from Arducam. They have a script, so normally it runs easily enough.

wim@WimPi4-Dev:~ $ sudo ./install_pivariety_pkgs.sh -p 64mp_pi_hawk_eye_kernel_driver
=================================================
Hardware Revision: d03114
Kernel Version: 6.1.19-v8+
OS Codename: bullseye
ARCH: aarch64
=================================================

kernel:6.1.19-v8+
--2023-03-21 10:36:25--  https://github.com/ArduCAM/Arducam-Pivariety-V4L2-Driver/releases/download/install_script/64mp_pi_hawk_eye_kernel_driver_links.txt
Resolving github.com (github.com)... 192.30.255.112
Connecting to github.com (github.com)|192.30.255.112|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/353945933/a0487b40-ef2c-4923-b366-3e8d0b6f0c88?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230321%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230321T173626Z&X-Amz-Expires=300&X-Amz-Signature=f28c85b9e602c3789a04e891e7a91d43a0dd89759e7297b888093b54fee6670d&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=353945933&response-content-disposition=attachment%3B%20filename%3D64mp_pi_hawk_eye_kernel_driver_links.txt&response-content-type=application%2Foctet-stream [following]
--2023-03-21 10:36:26--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/353945933/a0487b40-ef2c-4923-b366-3e8d0b6f0c88?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230321%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230321T173626Z&X-Amz-Expires=300&X-Amz-Signature=f28c85b9e602c3789a04e891e7a91d43a0dd89759e7297b888093b54fee6670d&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=353945933&response-content-disposition=attachment%3B%20filename%3D64mp_pi_hawk_eye_kernel_driver_links.txt&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11382 (11K) [application/octet-stream]
Saving to: ‘64mp_pi_hawk_eye_kernel_driver_links.txt’

64mp_pi_hawk_eye_kernel_driver_links.txt   100%[======================================================================================>]  11.12K  --.-KB/s    in 0.001s

2023-03-21 10:36:26 (15.6 MB/s) - ‘64mp_pi_hawk_eye_kernel_driver_links.txt’ saved [11382/11382]


Cannot find the corresponding package, please send the following information to support@arducam.com
Hardware Revision: d03114
Kernel Version: 6.1.19-v8+
Package: 64mp_pi_hawk_eye_kernel_driver -- bullseye-arm64-v5
You are using an unsupported kernel version, please install the official SD Card image(do not execute rpi-update):
https://www.raspberrypi.com/software/operating-systems/

wim@WimPi4-Dev:~ $ uname -a
Linux WimPi4-Dev 6.1.19-v8+ #1637 SMP PREEMPT Tue Mar 14 11:11:47 GMT 2023 aarch64 GNU/Linux

Today, it didn’t fix the problem. The script reports an unknown kernel version. I noticed that it’s reporting kernel version 6, which seemed unusual to me. That’s when I switched to my other Pi that I have most of my long term stuff running.

wim@WimPi4:~ $ uname -a
Linux WimPi4 5.15.84-v8+ #1613 SMP PREEMPT Thu Jan 5 12:03:08 GMT 2023 aarch64 GNU/Linux

A major bump in kernel version from 5 to 6 was unexpected. Now I’m left with the decision of either waiting to get the 64mp camera working with the new kernel or switching back to one of the PiCamera Model 3 units I have collected recently. Because this is on my development machine, the camera is less important to me than on some of my other units.

I attempted removing the special hooks for arducam to see if the 64mp driver had made it into the standard kernel source tree but no luck with that either.

Enable Raspberry Pi Camera Module 3 Wide after Arducam 64mp

My development pi has had an Arducam 64mp camera connected for my camera software development. I liked the quality of the camera but have at various times been frustrated with the software requirements to use the camera. It’s required both a custom kernel driver and a custom fork of the libcamera software packages. That’s meant that to use the 64mp camera I needed to reinstall the arducam suite after nearly every apt upgrade cycle, and definitely ones where the system kernel got updated.

I spent several days trying to get the remnants of the arducam64mp removed from my development system. I’d even built a fresh sd card image of Raspian Bullseye to make sure that the hardware was all connected and working properly.

In the end the fix was rather simple, if obscure.

First, remove or comment out the dtoverlay line from the /boot/config.txt file and make sure camera auto detect is enabled.

# dtoverlay=arducam-64mp
camera_auto_detect=1

Then run apt install with the –reinstall option for the libcamera packages and the raspberry kernel package.

sudo apt install --reinstall -y libcamera-apps libcamera-dev libcamera0 raspberrypi-kernel
sudo systemctl reboot

Then reboot. That should be then allow you to run libcamera-hello and verify that the new camera is working.

I’d found a reference How To Enable RP Cam V2 After Arducam 64MP that didn’t seem to work for getting the V3 wide camera working, perhaps because the focus hardware in the V3 camera made the 64mp think it was active.

I asked the question of how to remove the drivers on the Arducam Forum and then answered my own question.

On to playing with my new Camera Module 3! (I bought the Arducam cases from Amazon because I really liked the fit. The new wide camera protrudes from the front with enough clearance for the focus to function.)

More Cellular Modem Games

Testing possibilities with my cellular modem, I decided to try setting the PDP context to IPV6 instead of the IPV4V6 dual stack mode I had been running.

To do this, I sent these commands to the modem

AT+CGDCONT=1,"IPV6","h2g2"
AT+CGDCONT=6,"IPV6","h2g2"

I also had to configure dhcpc to not configure the usb0 interface with an IPv4 address. Because of the way the hardware works when I didn’t make the changes to dhcpd.conf an address IPv4 was still allocated to usb0 and a route was set up, but if I tried to ping an ipv4 address on the internet I got a Destination Net Unreachable error. I configured /etc/dhcpcd.conf so the last lines tell dhcpc to only configure the usb0 interface for ipv6.

interface usb0
ipv6only

Looking at the syslog details for usb0 after a reboot of the modem and the entire system

Nov 12 11:56:20 WimPiZeroW-Wim kernel: [   35.599281] rndis_host 1-1.1:1.0 usb0: register 'rndis_host' at usb-20980000.usb-1.1, RNDIS device, 0a:93:cc:8e:31:51
Nov 12 11:56:27 WimPiZeroW-Wim dhcpcd[252]: usb0: waiting for carrier
Nov 12 11:56:27 WimPiZeroW-Wim dhcpcd[252]: usb0: carrier acquired
Nov 12 11:56:27 WimPiZeroW-Wim dhcpcd[252]: usb0: IAID cc:8e:31:51
Nov 12 11:56:27 WimPiZeroW-Wim dhcpcd[252]: usb0: adding address fe80::64a:adc8:ebbe:d0ed
Nov 12 11:56:27 WimPiZeroW-Wim avahi-daemon[240]: Joining mDNS multicast group on interface usb0.IPv6 with address fe80::64a:adc8:ebbe:d0ed.
Nov 12 11:56:27 WimPiZeroW-Wim avahi-daemon[240]: New relevant interface usb0.IPv6 for mDNS.
Nov 12 11:56:27 WimPiZeroW-Wim avahi-daemon[240]: Registering new address record for fe80::64a:adc8:ebbe:d0ed on usb0.*.
Nov 12 11:56:27 WimPiZeroW-Wim dhcpcd[252]: usb0: soliciting an IPv6 router
Nov 12 11:56:28 WimPiZeroW-Wim dhcpcd[252]: usb0: Router Advertisement from fe80::7976:1565:680f:9a36
Nov 12 11:56:28 WimPiZeroW-Wim dhcpcd[252]: usb0: adding address 2607:fb90:8060:79e:d1b6:2c95:f26d:2e0c/64
Nov 12 11:56:28 WimPiZeroW-Wim kernel: [   43.860443] ICMPv6: process `dhcpcd' is using deprecated sysctl (syscall) net.ipv6.neigh.usb0.retrans_time - use net.ipv6.neigh.usb0.retrans_time_ms instead
Nov 12 11:56:28 WimPiZeroW-Wim avahi-daemon[240]: Leaving mDNS multicast group on interface usb0.IPv6 with address fe80::64a:adc8:ebbe:d0ed.
Nov 12 11:56:28 WimPiZeroW-Wim avahi-daemon[240]: Joining mDNS multicast group on interface usb0.IPv6 with address 2607:fb90:8060:79e:d1b6:2c95:f26d:2e0c.
Nov 12 11:56:28 WimPiZeroW-Wim avahi-daemon[240]: Registering new address record for 2607:fb90:8060:79e:d1b6:2c95:f26d:2e0c on usb0.*.
Nov 12 11:56:28 WimPiZeroW-Wim avahi-daemon[240]: Withdrawing address record for fe80::64a:adc8:ebbe:d0ed on usb0.
Nov 12 11:56:28 WimPiZeroW-Wim dhcpcd[252]: usb0: adding route to 2607:fb90:8060:79e::/64
Nov 12 11:56:28 WimPiZeroW-Wim dhcpcd[252]: usb0: requesting DHCPv6 information
Nov 12 11:56:28 WimPiZeroW-Wim dhcpcd[252]: usb0: adding default route via fe80::7976:1565:680f:9a36

An interesting side effect of only having IPv6 on the usb0 interface while allowing it elsewhere is that while my machine is also connected to my home network it automatically routes IPv4 traffic over the wlan0 interface.

wim@WimPiZeroW-Wim:~ $ ip -o a
1: lo    inet 127.0.0.1/8 scope host lo\       valid_lft forever preferred_lft forever
1: lo    inet6 ::1/128 scope host \       valid_lft forever preferred_lft forever
2: wlan0    inet 192.168.0.63/24 brd 192.168.0.255 scope global dynamic noprefixroute wlan0\       valid_lft 4230sec preferred_lft 3555sec
2: wlan0    inet6 2604:4080:1304:8010:57c0:7b33:ef3:3f35/64 scope global dynamic mngtmpaddr noprefixroute \       valid_lft 1789sec preferred_lft 1789sec
2: wlan0    inet6 fe80::2f9e:ceef:76a0:1efa/64 scope link \       valid_lft forever preferred_lft forever
3: usb0    inet6 2607:fb90:8060:79e:d1b6:2c95:f26d:2e0c/64 scope global mngtmpaddr noprefixroute \       valid_lft forever preferred_lft forever
3: usb0    inet6 fe80::64a:adc8:ebbe:d0ed/64 scope link \       valid_lft forever preferred_lft forever

IPv6 and Google Fi on SIM7600G-H and Raspberry Pi

I have been playing with a Raspberry Pi in a remote location that should be connected to a cellular network but I’ve had problems keeping it responding. I duplicated the system in my apartment to spend more time learning about what my options in configuring it may be. I’ve talked about the platform previously https://wimsworld.wordpress.com/2022/07/12/lte-wireless-on-sim7600g-h-4g-hat-b-for-raspberry-pi/ and https://wimsworld.wordpress.com/2022/07/16/more-networking-with-sim7600g-h-4g-hat-b-for-raspberry-pi/

The modem can be configured significantly differently via the CUSBPIDSWITCH command. According to the documentation, the available PIDS are:

  • 9000:Diag, NMEA, At, Modem, Audio, Rmnet
  • 9001:Diag, NMEA, At, Modem, Audio, Rmnet
  • 9002:Diag, NMEA, At, Modem, Audio, Rmnet
  • 9003:Diag, NMEA, At, Modem, Audio, MBIM
  • 9004:Diag, NMEA, At, Modem, Audio, GNSS, Rmnet
  • 9005:Diag, NMEA, At, Modem, Audio, GNSS, MBIM
  • 9006:Diag, NMEA, At,Modem
  • 9007:Diag, NMEA, At, Modem, Audio, Rmnet,mass_storage
  • 9011:RNDIS,Diag, NMEA, At, Modem, Audio
  • 9016:Diag, Rmnet
  • 9018:Diag, NMEA, At, Modem, Audio, Ecm
  • 9019:RNDIS
  • 901A: Diag, NMEA, At, Rmnet
  • 901B:NMEA, At, Rmnet
  • 9020: Diag, At, Modem
  • 9021: Diag, Modem
  • 9022: Diag, Modem, Rmnet
  • 9023: Modem
  • 9024: At, Modem
  • 9025: Modem,rmnet
  • 9026: Modem,Audio
  • 9027: Modem,Audio, Rmnet
  • 9028:Diag, Modem,Audio, Rmnet
  • 9029:Diag, Modem,Audio
  • 902A: At
  • 902B: Diag, NMEA, At, Modem, Rmnet,Usb-audio

If I query the modem possible modes, it responds with

AT+CUSBPIDSWITCH=?
+CUSBPIDSWITCH: (9000,9001,9002,9003,9004,9005,9006,9007,9011,9016,9018,9019,901A,901B,9020,9021,9022,9023,9024,9025,9026,9027,9028,9029,902A,902B),(0-1),(0-1)

OK

I’ve figured out I can switch between three different modem configurations on the linux system safely. 9001, 9011, and 9003. 9001 gives me qmi_wwan, 9011 gives me rndis_host, and 9003 give me cdc_mbim. RNDIS is the only one that is really plug and play on linux and produces the usb0 interface instead of wwan0. The method I’ve been configuring the device has been to connect to /dev/ttyUSB2 and issuing AT commands. When I have tried PID modes other than the ones I’ve called safe, Linux doesn’t provide /dev/ttyUSB* ports even though the device interfaces are displayed in the lsusb -t output.

Here’s what I get when I issue the command

AT+CUSBPIDSWITCH=9001,1,1

wim@WimPiZeroW-Wim:~ $ lsusb
Bus 001 Device 003: ID 1e0e:9001 Qualcomm / Option SimTech, Incorporated
Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
wim@WimPiZeroW-Wim:~ $ lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 1: Dev 3, If 1, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 1: Dev 3, If 2, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 1: Dev 3, If 3, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 1: Dev 3, If 4, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 1: Dev 3, If 5, Class=Vendor Specific Class, Driver=qmi_wwan, 480M
wim@WimPiZeroW-Wim:~ $ ip -o a
1: lo    inet 127.0.0.1/8 scope host lo\       valid_lft forever preferred_lft forever
1: lo    inet6 ::1/128 scope host \       valid_lft forever preferred_lft forever
2: wwan0    inet 169.254.128.15/16 brd 169.254.255.255 scope global noprefixroute wwan0\       valid_lft forever preferred_lft forever
2: wwan0    inet6 fe80::f9:71:4f35:8ef4/64 scope link \       valid_lft forever preferred_lft forever
3: wlan0    inet 192.168.0.63/24 brd 192.168.0.255 scope global dynamic noprefixroute wlan0\       valid_lft 5335sec preferred_lft 4660sec
3: wlan0    inet6 2604:4080:1304:8010:57c0:7b33:ef3:3f35/64 scope global dynamic mngtmpaddr noprefixroute \       valid_lft 1766sec preferred_lft 1766sec
3: wlan0    inet6 fe80::2f9e:ceef:76a0:1efa/64 scope link \       valid_lft forever preferred_lft forever

AT+CUSBPIDSWITCH=9011,1,1

wim@WimPiZeroW-Wim:~ $ lsusb
Bus 001 Device 003: ID 1e0e:9011 Qualcomm / Option SimTech, Incorporated
Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
wim@WimPiZeroW-Wim:~ $ lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 3, If 0, Class=Communications, Driver=rndis_host, 480M
        |__ Port 1: Dev 3, If 1, Class=CDC Data, Driver=rndis_host, 480M
        |__ Port 1: Dev 3, If 2, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 1: Dev 3, If 3, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 1: Dev 3, If 4, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 1: Dev 3, If 5, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 1: Dev 3, If 6, Class=Vendor Specific Class, Driver=option, 480M
wim@WimPiZeroW-Wim:~ $ ip -o a
1: lo    inet 127.0.0.1/8 scope host lo\       valid_lft forever preferred_lft forever
1: lo    inet6 ::1/128 scope host \       valid_lft forever preferred_lft forever
2: wlan0    inet 192.168.0.63/24 brd 192.168.0.255 scope global dynamic noprefixroute wlan0\       valid_lft 5371sec preferred_lft 4696sec
2: wlan0    inet6 2604:4080:1304:8010:57c0:7b33:ef3:3f35/64 scope global dynamic mngtmpaddr noprefixroute \       valid_lft 1767sec preferred_lft 1767sec
2: wlan0    inet6 fe80::2f9e:ceef:76a0:1efa/64 scope link \       valid_lft forever preferred_lft forever
3: usb0    inet 192.168.225.59/24 brd 192.168.225.255 scope global dynamic noprefixroute usb0\       valid_lft 43172sec preferred_lft 37772sec
3: usb0    inet6 2607:fb90:8069:ec7e:4a34:bb42:93a9:e27d/64 scope global mngtmpaddr noprefixroute \       valid_lft forever preferred_lft forever
3: usb0    inet6 fe80::b8ef:f02b:c580:1ebc/64 scope link \       valid_lft forever preferred_lft forever

AT+CUSBPIDSWITCH=9003,1,1

wim@WimPiZeroW-Wim:~ $ lsusb
Bus 001 Device 003: ID 1e0e:9003 Qualcomm / Option SimTech, Incorporated
Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
wim@WimPiZeroW-Wim:~ $ lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 1: Dev 3, If 1, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 1: Dev 3, If 2, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 1: Dev 3, If 3, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 1: Dev 3, If 4, Class=Vendor Specific Class, Driver=option, 480M
        |__ Port 1: Dev 3, If 5, Class=Communications, Driver=cdc_mbim, 480M
        |__ Port 1: Dev 3, If 6, Class=CDC Data, Driver=cdc_mbim, 480M
wim@WimPiZeroW-Wim:~ $ ip -o a
1: lo    inet 127.0.0.1/8 scope host lo\       valid_lft forever preferred_lft forever
1: lo    inet6 ::1/128 scope host \       valid_lft forever preferred_lft forever
2: wwan0    inet 169.254.175.62/16 brd 169.254.255.255 scope global noprefixroute wwan0\       valid_lft forever preferred_lft forever
2: wwan0    inet6 fe80::b43f:d4a3:f985:4f33/64 scope link \       valid_lft forever preferred_lft forever
3: wlan0    inet 192.168.0.63/24 brd 192.168.0.255 scope global dynamic noprefixroute wlan0\       valid_lft 5341sec preferred_lft 4666sec
3: wlan0    inet6 2604:4080:1304:8010:57c0:7b33:ef3:3f35/64 scope global dynamic mngtmpaddr noprefixroute \       valid_lft 1764sec preferred_lft 1764sec
3: wlan0    inet6 fe80::2f9e:ceef:76a0:1efa/64 scope link \       valid_lft forever preferred_lft forever

I have configured the modem to run the way I want with the following commands

AT&F
AT+CUSBPIDSWITCH=9011,1,1
AT+CGDCONT=1,"IPV4V6","h2g2"
AT+CGDCONT=6,"IPV4V6","h2g2"
AT+CGPSAUTO=1

There are multiple things I’m trying to understand about networking while running in 9011 mode. It gets a global scope ipv6 address that is reachable, but that address changes on a very frequent but random time. It gets a local ipv4 address that works for traffic over the internet. Obviously the ipv4 address is being converted by NAT between the raspberry and the internet. I don’t seem to have any way of configuring how that works. The post https://www.jeffgeerling.com/blog/2022/using-4g-lte-wireless-modems-on-raspberry-pi had a Built-in AP configuration that was accessible via http. I have run nmap against the internal gateway on my platform and the only port open is DNS.

Today I ran radvdump to listen for router advertisements from the internet and then later looked at my syslog results to see what happened on the network at the corresponding times.

# radvd configuration generated by radvdump 2.18
# based on Router Advertisement from fe80::fca7:efa4:eef4:655b
# received by interface usb0
#

interface usb0
{
        AdvSendAdvert on;
        # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
        AdvManagedFlag off;
        AdvOtherConfigFlag off;
        AdvReachableTime 0;
        AdvRetransTimer 0;
        AdvCurHopLimit 255;
        AdvDefaultLifetime 0;
        AdvHomeAgentFlag off;
        AdvDefaultPreference medium;
        AdvSourceLLAddress on;
        AdvLinkMTU 1500;

        prefix 2607:fb90:80ca:7753::ff00:0/0
        {
                AdvValidLifetime 2;
                AdvPreferredLifetime 1;
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr off;
        }; # End of prefix definition

}; # End of interface definition


Nov 11 16:11:32 WimPiZeroW-Wim dhcpcd[701]: usb0: Router Advertisement from fe80::fca7:efa4:eef4:655b
Nov 11 16:11:32 WimPiZeroW-Wim dhcpcd[701]: usb0: adding address 5c5a:870:6182:d190:617e:1551:4cea:f6b6/0
Nov 11 16:11:32 WimPiZeroW-Wim dhcpcd[701]: ipv6_addaddr1: Invalid argument
Nov 11 16:11:32 WimPiZeroW-Wim dhcpcd[701]: usb0: adding route to 2607:fb90:80ca:7753::ff00:0/0
Nov 11 16:11:32 WimPiZeroW-Wim dhcpcd[701]: if_route (ADD): File exists

Almost immediately afterwards:

#
# radvd configuration generated by radvdump 2.18
# based on Router Advertisement from fe80::fc89:6dff:fe67:6dde
# received by interface usb0
#

interface usb0
{
        AdvSendAdvert on;
        # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
        AdvManagedFlag off;
        AdvOtherConfigFlag off;
        AdvReachableTime 0;
        AdvRetransTimer 0;
        AdvCurHopLimit 64;
        AdvDefaultLifetime 0;
        AdvHomeAgentFlag off;
        AdvDefaultPreference medium;
        AdvLinkMTU 1500;

        prefix 2607:fb90:80ca:7753::/64
        {
                AdvValidLifetime 2;
                AdvPreferredLifetime 1;
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr off;
        }; # End of prefix definition


        RDNSS fd00:976a::9 fd00:976a::10
        {
                AdvRDNSSLifetime infinity; # (0xffffffff)
        }; # End of RDNSS definition

}; # End of interface definition

Nov 11 16:11:33 WimPiZeroW-Wim dhcpcd[701]: usb0: Router Advertisement from fe80::fc89:6dff:fe67:6dde
Nov 11 16:11:33 WimPiZeroW-Wim dhcpcd[701]: usb0: fe80::fc89:6dff:fe67:6dde: no longer a default router
Nov 11 16:11:33 WimPiZeroW-Wim dhcpcd[701]: usb0: adding route to 2607:fb90:80ca:7753::ff00:0/0
Nov 11 16:11:33 WimPiZeroW-Wim dhcpcd[701]: if_route (ADD): File exists
Nov 11 16:11:33 WimPiZeroW-Wim dhcpcd[701]: usb0: deleting default route via fe80::fc89:6dff:fe67:6dde
Nov 11 16:11:34 WimPiZeroW-Wim dhcpcd[701]: usb0: part of Router Advertisement expired
Nov 11 16:11:34 WimPiZeroW-Wim avahi-daemon[240]: Registering new address record for fe80::a3b3:ec14:47de:4692 on usb0.*.
Nov 11 16:11:35 WimPiZeroW-Wim dhcpcd[701]: usb0: expired address 2607:fb90:80ca:7753:ee71:7d12:766:2e98/64
Nov 11 16:11:35 WimPiZeroW-Wim dhcpcd[701]: usb0: part of Router Advertisement expired
Nov 11 16:11:35 WimPiZeroW-Wim dhcpcd[701]: usb0: deleting route to 2607:fb90:80ca:7753::/64
Nov 11 16:11:35 WimPiZeroW-Wim avahi-daemon[240]: Withdrawing address record for 2607:fb90:80ca:7753:ee71:7d12:766:2e98 on usb0.
Nov 11 16:11:35 WimPiZeroW-Wim avahi-daemon[240]: Leaving mDNS multicast group on interface usb0.IPv6 with address 2607:fb90:80ca:7753:ee71:7d12:766:2e98.
Nov 11 16:11:35 WimPiZeroW-Wim avahi-daemon[240]: Joining mDNS multicast group on interface usb0.IPv6 with address fe80::a3b3:ec14:47de:4692.

And a couple of minutes later:

# radvd configuration generated by radvdump 2.18
# based on Router Advertisement from fe80::fc89:6dff:fe67:6dde
# received by interface usb0
#

interface usb0
{
        AdvSendAdvert on;
        # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
        AdvManagedFlag off;
        AdvOtherConfigFlag on;
        AdvReachableTime 0;
        AdvRetransTimer 0;
        AdvCurHopLimit 64;
        AdvDefaultLifetime 65535;
        AdvHomeAgentFlag off;
        AdvDefaultPreference medium;
        AdvLinkMTU 1500;

        prefix 2607:fb90:80c8:82f8::/64
        {
                AdvValidLifetime infinity; # (0xffffffff)
                AdvPreferredLifetime infinity; # (0xffffffff)
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr off;
        }; # End of prefix definition


        RDNSS fd00:976a::9 fd00:976a::10
        {
                AdvRDNSSLifetime infinity; # (0xffffffff)
        }; # End of RDNSS definition

}; # End of interface definition

Nov 11 16:13:42 WimPiZeroW-Wim dhcpcd[701]: usb0: Router Advertisement from fe80::fc89:6dff:fe67:6dde
Nov 11 16:13:42 WimPiZeroW-Wim dhcpcd[701]: usb0: adding address 2607:fb90:80c8:82f8:b87a:2c7a:ae2e:7e0e/64
Nov 11 16:13:42 WimPiZeroW-Wim avahi-daemon[240]: Leaving mDNS multicast group on interface usb0.IPv6 with address fe80::a3b3:ec14:47de:4692.
Nov 11 16:13:43 WimPiZeroW-Wim avahi-daemon[240]: Joining mDNS multicast group on interface usb0.IPv6 with address 2607:fb90:80c8:82f8:b87a:2c7a:ae2e:7e0e.
Nov 11 16:13:43 WimPiZeroW-Wim avahi-daemon[240]: Registering new address record for 2607:fb90:80c8:82f8:b87a:2c7a:ae2e:7e0e on usb0.*.
Nov 11 16:13:43 WimPiZeroW-Wim avahi-daemon[240]: Withdrawing address record for fe80::a3b3:ec14:47de:4692 on usb0.
Nov 11 16:13:43 WimPiZeroW-Wim dhcpcd[701]: usb0: adding route to 2607:fb90:80c8:82f8::/64
Nov 11 16:13:43 WimPiZeroW-Wim dhcpcd[701]: usb0: adding default route via fe80::fc89:6dff:fe67:6dde

Then it went almost a couple of hours before more changes to the network

Nov 11 18:01:54 WimPiZeroW-Wim dhcpcd[701]: usb0: Router Advertisement from fe80::c1e7:222d:69eb:c90c
Nov 11 18:01:54 WimPiZeroW-Wim dhcpcd[701]: usb0: adding address 5c5a:870:6182:d190:617e:1551:4cea:f6b6/0
Nov 11 18:01:54 WimPiZeroW-Wim dhcpcd[701]: ipv6_addaddr1: Invalid argument
Nov 11 18:01:54 WimPiZeroW-Wim dhcpcd[701]: usb0: adding route to 2607:fb90:80c8:82f8::ff00:0/0
Nov 11 18:01:54 WimPiZeroW-Wim dhcpcd[701]: if_route (ADD): File exists
Nov 11 18:01:55 WimPiZeroW-Wim dhcpcd[701]: usb0: Router Advertisement from fe80::fc89:6dff:fe67:6dde
Nov 11 18:01:55 WimPiZeroW-Wim dhcpcd[701]: usb0: fe80::fc89:6dff:fe67:6dde: no longer a default router
Nov 11 18:01:55 WimPiZeroW-Wim dhcpcd[701]: usb0: adding route to 2607:fb90:80c8:82f8::ff00:0/0
Nov 11 18:01:55 WimPiZeroW-Wim dhcpcd[701]: if_route (ADD): File exists
Nov 11 18:01:55 WimPiZeroW-Wim dhcpcd[701]: usb0: deleting default route via fe80::fc89:6dff:fe67:6dde
Nov 11 18:01:56 WimPiZeroW-Wim dhcpcd[701]: usb0: part of Router Advertisement expired
Nov 11 18:01:56 WimPiZeroW-Wim avahi-daemon[240]: Registering new address record for fe80::a3b3:ec14:47de:4692 on usb0.*.
Nov 11 18:01:57 WimPiZeroW-Wim dhcpcd[701]: usb0: expired address 2607:fb90:80c8:82f8:b87a:2c7a:ae2e:7e0e/64
Nov 11 18:01:57 WimPiZeroW-Wim dhcpcd[701]: usb0: part of Router Advertisement expired
Nov 11 18:01:57 WimPiZeroW-Wim dhcpcd[701]: usb0: deleting route to 2607:fb90:80c8:82f8::/64
Nov 11 18:01:57 WimPiZeroW-Wim avahi-daemon[240]: Withdrawing address record for 2607:fb90:80c8:82f8:b87a:2c7a:ae2e:7e0e on usb0.
Nov 11 18:01:57 WimPiZeroW-Wim avahi-daemon[240]: Leaving mDNS multicast group on interface usb0.IPv6 with address 2607:fb90:80c8:82f8:b87a:2c7a:ae2e:7e0e.
Nov 11 18:01:57 WimPiZeroW-Wim avahi-daemon[240]: Joining mDNS multicast group on interface usb0.IPv6 with address fe80::a3b3:ec14:47de:4692.
Nov 11 18:04:04 WimPiZeroW-Wim dhcpcd[701]: usb0: Router Advertisement from fe80::fc89:6dff:fe67:6dde
Nov 11 18:04:04 WimPiZeroW-Wim dhcpcd[701]: usb0: adding address 2607:fb90:80c3:42cc:11b:d753:e52a:40bb/64
Nov 11 18:04:04 WimPiZeroW-Wim avahi-daemon[240]: Leaving mDNS multicast group on interface usb0.IPv6 with address fe80::a3b3:ec14:47de:4692.
Nov 11 18:04:04 WimPiZeroW-Wim avahi-daemon[240]: Joining mDNS multicast group on interface usb0.IPv6 with address 2607:fb90:80c3:42cc:11b:d753:e52a:40bb.
Nov 11 18:04:04 WimPiZeroW-Wim avahi-daemon[240]: Registering new address record for 2607:fb90:80c3:42cc:11b:d753:e52a:40bb on usb0.*.
Nov 11 18:04:04 WimPiZeroW-Wim avahi-daemon[240]: Withdrawing address record for fe80::a3b3:ec14:47de:4692 on usb0.
Nov 11 18:04:04 WimPiZeroW-Wim dhcpcd[701]: usb0: adding route to 2607:fb90:80c3:42cc::/64
Nov 11 18:04:04 WimPiZeroW-Wim dhcpcd[701]: usb0: adding default route via fe80::fc89:6dff:fe67:6dde
Nov 11 18:29:11 WimPiZeroW-Wim dhcpcd[701]: usb0: failed to renew DHCP, rebinding
Nov 11 18:29:11 WimPiZeroW-Wim dhcpcd[701]: usb0: adding route to 192.168.225.0/24
Nov 11 18:29:11 WimPiZeroW-Wim dhcpcd[701]: usb0: adding default route via 192.168.225.1
ov 11 19:52:16 WimPiZeroW-Wim dhcpcd[701]: usb0: Router Advertisement from fe80::459a:7427:b0ae:7848
Nov 11 19:52:16 WimPiZeroW-Wim dhcpcd[701]: usb0: adding address 5c5a:870:6182:d190:617e:1551:4cea:f6b6/0
Nov 11 19:52:16 WimPiZeroW-Wim dhcpcd[701]: ipv6_addaddr1: Invalid argument
Nov 11 19:52:16 WimPiZeroW-Wim dhcpcd[701]: usb0: adding route to 2607:fb90:80c3:42cc::ff00:0/0
Nov 11 19:52:16 WimPiZeroW-Wim dhcpcd[701]: if_route (ADD): File exists
Nov 11 19:52:18 WimPiZeroW-Wim dhcpcd[701]: usb0: Router Advertisement from fe80::fc89:6dff:fe67:6dde
Nov 11 19:52:18 WimPiZeroW-Wim dhcpcd[701]: usb0: fe80::fc89:6dff:fe67:6dde: no longer a default router
Nov 11 19:52:18 WimPiZeroW-Wim dhcpcd[701]: usb0: adding route to 2607:fb90:80c3:42cc::ff00:0/0
Nov 11 19:52:18 WimPiZeroW-Wim dhcpcd[701]: if_route (ADD): File exists
Nov 11 19:52:18 WimPiZeroW-Wim dhcpcd[701]: usb0: deleting default route via fe80::fc89:6dff:fe67:6dde
Nov 11 19:52:18 WimPiZeroW-Wim dhcpcd[701]: usb0: part of Router Advertisement expired
Nov 11 19:52:19 WimPiZeroW-Wim avahi-daemon[240]: Registering new address record for fe80::a3b3:ec14:47de:4692 on usb0.*.
Nov 11 19:52:20 WimPiZeroW-Wim dhcpcd[701]: usb0: expired address 2607:fb90:80c3:42cc:11b:d753:e52a:40bb/64
Nov 11 19:52:20 WimPiZeroW-Wim dhcpcd[701]: usb0: part of Router Advertisement expired
Nov 11 19:52:20 WimPiZeroW-Wim dhcpcd[701]: usb0: deleting route to 2607:fb90:80c3:42cc::/64
Nov 11 19:52:20 WimPiZeroW-Wim avahi-daemon[240]: Withdrawing address record for 2607:fb90:80c3:42cc:11b:d753:e52a:40bb on usb0.
Nov 11 19:52:20 WimPiZeroW-Wim avahi-daemon[240]: Leaving mDNS multicast group on interface usb0.IPv6 with address 2607:fb90:80c3:42cc:11b:d753:e52a:40bb.
Nov 11 19:52:20 WimPiZeroW-Wim avahi-daemon[240]: Joining mDNS multicast group on interface usb0.IPv6 with address fe80::a3b3:ec14:47de:4692.
Nov 11 19:52:27 WimPiZeroW-Wim systemd[1]: session-3.scope: Succeeded.
Nov 11 19:52:27 WimPiZeroW-Wim systemd[1]: session-3.scope: Consumed 24.275s CPU time.
Nov 11 19:54:27 WimPiZeroW-Wim dhcpcd[701]: usb0: Router Advertisement from fe80::fc89:6dff:fe67:6dde
Nov 11 19:54:27 WimPiZeroW-Wim dhcpcd[701]: usb0: adding address 2607:fb90:8069:47ff:69ad:1e37:6fb5:7fa0/64
Nov 11 19:54:27 WimPiZeroW-Wim dhcpcd[701]: usb0: adding route to 2607:fb90:8069:47ff::/64
Nov 11 19:54:27 WimPiZeroW-Wim dhcpcd[701]: usb0: adding default route via fe80::fc89:6dff:fe67:6dde
Nov 11 19:54:27 WimPiZeroW-Wim avahi-daemon[240]: Leaving mDNS multicast group on interface usb0.IPv6 with address fe80::a3b3:ec14:47de:4692.
Nov 11 19:54:27 WimPiZeroW-Wim avahi-daemon[240]: Joining mDNS multicast group on interface usb0.IPv6 with address 2607:fb90:8069:47ff:69ad:1e37:6fb5:7fa0.
Nov 11 19:54:27 WimPiZeroW-Wim avahi-daemon[240]: Registering new address record for 2607:fb90:8069:47ff:69ad:1e37:6fb5:7fa0 on usb0.*.
Nov 11 19:54:27 WimPiZeroW-Wim avahi-daemon[240]: Withdrawing address record for fe80::a3b3:ec14:47de:4692 on usb0.

I do not understand why it gets router advertisements that change as frequently as it does, and especially why sometimes it gets a /0 prefix occasionally.

Here is a series of commands I’ve found useful to checking status on the modem

AT&V
AT+COPS?
AT+CPSI?
AT+CFUN?
AT+CGPSAUTO?
AT+CSQ
AT+CUSBPIDSWITCH=?
AT+CUSBPIDSWITCH?
AT+CGDCONT?

The command AT+CSQ returns the signal strength of the device. Possible values are:

  • 0 113 dBm or less
  • 1 111 dBm
  • 2…30 109… 53 dBm
  • 31 51 dBm or greater
  • 99 not known or not detectable

Value RSSI dBm Condition

  • 2 -109 Marginal
  • 3 -107 Marginal
  • 4 -105 Marginal
  • 5 -103 Marginal
  • 6 -101 Marginal
  • 7 -99 Marginal
  • 8 -97 Marginal
  • 9 -95 Marginal
  • 10 -93 OK
  • 11 -91 OK
  • 12 -89 OK
  • 13 -87 OK
  • 14 -85 OK
  • 15 -83 Good
  • 16 -81 Good
  • 17 -79 Good
  • 18 -77 Good
  • 19 -75 Good
  • 20 -73 Excellent
  • 21 -71 Excellent
  • 22 -69 Excellent
  • 23 -67 Excellent
  • 24 -65 Excellent
  • 25 -63 Excellent
  • 26 -61 Excellent
  • 27 -59 Excellent
  • 28 -57 Excellent
  • 29 -55 Excellent
  • 30 -53 Excellent

Some of the values on my system

AT&V
&C: 2; &D: 2; &E: 1; &F: 0; &S: 0; &W: 0; E: 1; L: 0; M: 0; Q: 0; V: 1;
X: 1; Z: 0; \Q: 3; \S: 0; \V: 0; O: 0; S0: 0; S2: 43; S3: 13; S4: 10;
S5: 8; S6: 2; S7: 0; S8: 2; S9: 6; S10: 14; S11: 95; S30: 0; S103: 1;
S104: 1; +FCLASS: 0; +ICF: 3,3; +IFC: 0,0; +IPR: 115200; +DR: 0;
+DS: 0,0,2048,6; +CMEE: 2; +WS46: 25; +CFUN:; +IPREX: 115200;
+CBST: 0,0,1; +CRLP: (61,61,48,6,0),(61,61,48,6,1),(240,240,52,6,2);
+CV120: 1,1,1,0,0,0; +CHSN: 0,0,0,0; +CSSN: 0,0; +CREG: 0; +CGREG: 0;
+CEREG: 0; +CSCS: "IRA"; +CSTA: 129;  +CR: 0; +CRC: 0;
+CGDCONT: (1,"IPV4V6","h2g2","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,0),(2,"IPV4V6","","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,0),(3,"IPV4V6","","0.0.0.0.0.0.0;
+CGDSCONT: ; +CGTFT: ; +CGEQREQ: ; +CGEQMIN: ; +CGEQOS: ; +CGQREQ: ;
+CGQMIN: ; +CGEREP: 0,0; +CGDATA: "PPP"; +CGCLASS: "A";  +CGPIAF: 0,0,0,0;
+CGSMS: 1; +CSMS: 0; +CMGF: 0; +CSAS: 0; +CRES: 0; +CSCA: "",;
+CSMP: ,,0,0; +CSDH: 0; +CSCB: 0,"",""; +CMGP: 4098,0,,0,; +ES: ,,;
+ESA: 0,,,,0,0,255,; +CMOD: 0; +CEMODE: 2; +CVHU: 1; ; ; ; ; ; ;
+CSCLK: 0; +CCUART: 0; +CFGRI: 0,60,120; +CUARTSD: 500; +CURCD: 0;
+CUARTLOG: 0; +CUARTRM: 0; +CFGRIDTM: 60,120; +CATR: 0; +CNMP: 2;
+CNRP: 255; +CNAOP: 0; +CNSDP: 2; +CNSMOD: 0; +CNLSA: 0; +CEXTEPLMN: 1;
+CSQFMT: 1; +AUTOCSQ: 0,0; +CSQDELTA: 5; +CPSI: 0; +CMGSI: 2;
+CMGRMI: 4,0; +MONI: 0; +CRUPSI: 0;  +CRUSET: 0; +CGPS: 1,1; +CGPSMSB: 1;
+CGPSINFO: 0; +CGPSINFOCFG: 0,0,0; +CGPSHOR: 50; +CGPSPMD: 65407;
+CGPSXD: 0; +CGNSSINFO: 0; +CSOCKAUTH: 1,0,""; +CGAUTH: 1,0,""; ;
+CIPHEAD: 1; +CIPSRIP: 1; +CIPCCFG: 10,0,0,1,0,0,500; +CIPENSRXGET: 0;
+CIPMODE: 0; +CPIN: ÿÿÿÿÿÿÿÿ,ÿÿÿÿÿÿÿÿ; +CMEC: 0,0,0,0;
+CIND: 0,3,1,1,0,0,1,0; +CMER: 0,0,0,0,0; +CGATT: 1;
+CGACT(1,1),(2,0),(3,0),(4,0),(5,0),(6,0); +CPBS: "SM";
+CPMS: "SM","SM","SM"; +CNMI: 2,1,0,0,0; +CMMS: 0; +CCUG: 0,0,0;
+COPS: 0,0,""; +CUSD: 0; +CAOC: 1; +CCWA: 0;  +CPOL: 0,2,"",0,0,0,0;
+CPLS: 0; +CTZR: 0; +CTZU: 0; +CLIP: 0; +COLP: 0; +CDIP: 0; +CLIR: 0;
+CSDF: 1; +CEN: 0; +CPSMS: 0,"","","",""; +CEDRXS: 0,1,""; +CCARDMA: 0;
+STK: 0; +CSALPHA: 0; +MORING: 0; +CWAKEUPSMSSWITCH: 0;
+CFILTERSMSSWITCH: 0; +EB: 1,0,30; +EFCS: 1; +ER: 0; +ESR: 1;
+ETBM: 1,1,20; +MA: ; +MR: 0; +MS: ; +MV18R: 0; +MV18S: 0,0,0; +CXT: 0;
+CDR: 0; +CDS: 0,1,2048,6; +CFC: 0; +CFG: ""; +CQD: 10; +CCRC: 0;
+QCMUX: C,2; +CTA: 0; +ILRR: 0; +QCPIN: ,; *CNTI: 0; ^PREFMODE: 0;
^DSCI: 0; ^MODE: 0;  ^CPIN: ,

OK
AT+COPS?
+COPS: 0,0,"Google Fi",7

OK
AT+CPSI?
+CPSI: LTE,Online,310-260,0x2C13,45023373,3,EUTRAN-BAND41,39874,5,5,-68,-947,-680,16

OK
AT+CGDCONT?
+CGDCONT: 1,"IPV4V6","h2g2","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,0
+CGDCONT: 2,"IPV4V6","","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,0
+CGDCONT: 3,"IPV4V6","","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,0
+CGDCONT: 4,"IPV4V6","","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,0
+CGDCONT: 5,"IPV4V6","","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,0
+CGDCONT: 6,"IPV4V6","h2g2","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,0

OK
AT+CSQ
+CSQ: 22,99

OK

If you have any suggestions to make my networking more stable, I would appreciate any help. When I tried these two PID modes I lost access to the ttyUSB ports and had to connect the device to a windows machine, force install questionable drivers for the device and then issue commands to reset the modem back to a PID mode I could work with. I would also appreciate any information on how to send AT commands to a USB port/device/interface if the operating system didn’t install tty drivers to make it easily accessible.

AT+CUSBPIDSWITCH=9002,1,1

wim@WimPiZeroW-Wim:~ $ lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 4, If 0, Class=Vendor Specific Class, Driver=, 480M
        |__ Port 1: Dev 4, If 1, Class=Vendor Specific Class, Driver=, 480M
        |__ Port 1: Dev 4, If 2, Class=Vendor Specific Class, Driver=, 480M
        |__ Port 1: Dev 4, If 3, Class=Vendor Specific Class, Driver=, 480M
        |__ Port 1: Dev 4, If 4, Class=Vendor Specific Class, Driver=, 480M
        |__ Port 1: Dev 4, If 5, Class=Vendor Specific Class, Driver=, 480M

AT+CUSBPIDSWITCH=9018,1,1

wim@WimPiZeroW-Wim:~ $ lsusb
Bus 001 Device 003: ID 1e0e:9018 Qualcomm / Option SimTech, Incorporated
Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
wim@WimPiZeroW-Wim:~ $ lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=, 480M
        |__ Port 1: Dev 3, If 1, Class=Vendor Specific Class, Driver=, 480M
        |__ Port 1: Dev 3, If 2, Class=Vendor Specific Class, Driver=, 480M
        |__ Port 1: Dev 3, If 3, Class=Vendor Specific Class, Driver=, 480M
        |__ Port 1: Dev 3, If 4, Class=Vendor Specific Class, Driver=, 480M
        |__ Port 1: Dev 3, If 5, Class=Communications, Driver=cdc_ether, 480M
        |__ Port 1: Dev 3, If 6, Class=CDC Data, Driver=cdc_ether, 480M

Sharing GPS between multiple Raspberry Pi

I have several Raspberry Pi around my apartment in various states of development projects running different versions of Raspian. I’ve been playing with GPSD recently and want the services to be transparently available on each Pi without having to connect directly via a USB port. It turns out that making it work is easy, but obscure.

On my machine that has the GPS plugged into the USB port I need to change the /lib/systemd/system/gpsd.socket file to allow the socket to be visible on the network. On my Raspian Buster machine, it originally looked like this

[Unit]
Description=GPS (Global Positioning System) Daemon Sockets

[Socket]
ListenStream=/var/run/gpsd.sock
ListenStream=[::1]:2947
ListenStream=127.0.0.1:2947
SocketMode=0600

[Install]
WantedBy=sockets.target

I changed it to look like this

[Unit]
Description=GPS (Global Positioning System) Daemon Sockets

[Socket]
ListenStream=/var/run/gpsd.sock
ListenStream=[::]:2947
ListenStream=0.0.0.0:2947
SocketMode=0600

[Install]
WantedBy=sockets.target

I was able to test that it was working properly by running the command gpsmon WimPi4:2497 on the remote host. WimPi4 is the hostname of my machine with the GPS installed.

On the machines I wanted access to the GPS, I modified the file /etc/default/gpsd by adding an entry in the DEVICES section to make the file below.

# Devices gpsd should collect to at boot time.
# They need to be read/writeable, either by user gpsd or the group dialout.
DEVICES="gpsd://WimPi4"

# Other options you want to pass to gpsd
GPSD_OPTIONS=""

# Automatically hot add/remove USB GPS devices via gpsdctl
USBAUTO="true"

With the changes to the gpsd configuration I was able to run cgps or gpsmon on the client machines without requiring an argument. The client programs are connecting the local daemon, which is then connecting to the machine with the gps receiver running gpsd.

Set default XTerm font and screen size

xrdp xterm default

I’ve been employing the interesting hack to run a single graphical program on my raspberry Pi of installing and running xrdp without having installed a full graphical window manager. When I connect to the rdp session and have my window set to 1920×1080, the terminal window that appears runs in the top left of the session window with no visible borders. If the mouse is over the terminal session the cursor works as expected. If the mouse is over the vast blackness of the rest of the screen, the cursor is a simple X cursor.

It’s never been a huge deal to me because I just run the single command of my graphical program most of the time. I had been looking for a way to configure the terminal to be a specific size based on the RDP session, but it’s not really designed for that.

What I finally found was that if I specify the font and window geometry based on the font, it will create the terminal window appropriately. A bit of trial and error and I came up with the following file in my user directory. One nice feature of this fix is that it’s not modifying any systemwide configuration.

wim@WimPi4:~ $ cat ~/.Xresources 
xterm*faceName: Luxi Mono
xterm*faceSize: 16
xterm*geometry: 147x41

Thanks to this post for giving me the solution.

Google Domains Dynamic DNS and IPv6

I’ve been wanting to use a dynamic address in my personal domain and IPv6. While I read that it should be possible, finding the exact method of configuring ddclient to do so was not obvious to me. The default installation configures everything to register an IPv4 address and finding specific configuration examples using IPv6 was hard. It turns out that finding examples was hard because the process itself is easy.

Go to domains.google.com, configure your domain to include dynamic DNS hosts, add the hostname you want to register, and retrieve the specific credentials for that hostname. There are help pages describing that process at google. It will create a record with the hostname you specify, and an A record (IPv4) with a 1 minute time to live.

Google Domains

Install ddclient using apt and go through the debconf wizard to enter the credentials. It will set up the default configuration using IPv4.

sudo apt install ddclient -y
domains.google
ddclient –force –verbose to see if errors occur
Google Domains IPv4 address registered

Manually editing /etc/ddclient.conf and changing the use= statement to usev6= and running ddclient a second time will switch to registering the IPv6 address.

wim@WimPiZeroW-Wim:~ $ sudo cat /etc/ddclient.conf
# Configuration file for ddclient generated by debconf
#
# /etc/ddclient.conf

protocol=googledomains \
usev6=if, if=wlan0 \
login=**************** \
password='***************' \
wimpizerow-wim.wimsworld.com
wim@WimPiZeroW-Wim:~ $
another ddclient –force –verbose to confirm changes didn’t create errors

running sudo systemctl confirms that ddclient.service is loaded active and running. If the address were to change, it should automatically be updated in the dynamic domain entry.

GPS on SIM7600G-H 4G HAT (B) for Raspberry Pi

I bought this device from Amazon to use for a project with a Raspberry Pi Zero and a data sim from my Google Fi Account where I wanted network connectivity. The fact that it had GPS as well was a bonus.

I installed gpsd on raspian. (apt install gpsd gpsd-clients -y) It didn’t automatically recognize the GPS. I was able to get it working by modifying /etc/default/gpsd to have the line DEVICES=”/dev/ttyUSB1″ and then starting the GPS with the command echo AT+CGPS=1 >/dev/ttyUSB2

After that combination, running gpsmon or cgps returned results after the GPS had been able to achieve a fix.

vi /etc/default/gpsd
echo AT+CGPS=1
gpsmon
lsusb -t

I’ve still not got it automatically starting the GPS with the echo command and am working to figure the best place to have that command.

SIM7600G-H 4G HAT (B) for Raspberry Pi, LTE Cat-4 4G / 3G / 2G Support, GNSS Positioning, Global Band
SKU: 19485
Part Number: SIM7600G-H 4G HAT (B)
Brand: Waveshare

Raspberry Pi ZeroW Camera Focus with libcamera-vid

Several years ago I was trying to play with a camera on a Raspberry Pi Zero and was using FFMPEG to stream video to my PC. Now that I’m trying out the Bullseye release of Raspian, I’m attempting to use the camera tools that are installed by default.

I’ve got an Arducam with 160° lens connected to my Pi Zero.

pi@WimPiZeroCamera:~ $ libcamera-vid --list-cameras
[0:01:26.600607679] [701]  INFO Camera camera_manager.cpp:293 libcamera v0.0.0+3544-22656360
[0:01:26.690670361] [702] ERROR CameraSensor camera_sensor.cpp:591 'ov5647 10-0036': Camera sensor does not support test pattern modes.
[0:01:26.842438396] [702]  INFO RPI raspberrypi.cpp:1356 Registered camera /base/soc/i2c0mux/i2c@1/ov5647@36 to Unicam device /dev/media3 and ISP device /dev/media0
Available cameras
-----------------
0 : ov5647 [2592x1944] (/base/soc/i2c0mux/i2c@1/ov5647@36)
    Modes: 'SGBRG10_CSI2P' : 640x480 1296x972 1920x1080 2592x1944 

First I ran the previous command to see that the camera is recognized, then I run the following command to set up the port on the Pi. The program produces no output in the terminal until I connect from my PC.

pi@WimPiZeroCamera:~ $ libcamera-vid --timeout 0 --nopreview --listen --output tcp://0.0.0.0:5000

On the PC, I run VLC

Open Network Stream
tcp/h264://192.168.0.63:5000
View from the camera

looking back at the console output, you can see that it’s defaulting to 640×480 resolution.

pi@WimPiZeroCamera:~ $ libcamera-vid --timeout 0 --nopreview --listen --output tcp://0.0.0.0:5000
[2:02:18.390718603] [16931]  INFO Camera camera_manager.cpp:293 libcamera v0.0.0+3544-22656360
[2:02:18.502791615] [17031] ERROR CameraSensor camera_sensor.cpp:591 'ov5647 10-0036': Camera sensor does not support test pattern modes.
[2:02:18.636067629] [17031]  INFO RPI raspberrypi.cpp:1356 Registered camera /base/soc/i2c0mux/i2c@1/ov5647@36 to Unicam device /dev/media3 and ISP device /dev/media0
[2:02:18.641028629] [16931]  INFO Camera camera.cpp:1029 configuring streams: (0) 640x480-YUV420
[2:02:18.644508629] [17031]  INFO RPI raspberrypi.cpp:760 Sensor: /base/soc/i2c0mux/i2c@1/ov5647@36 - Selected sensor format: 640x480-SGBRG10_1X10 - Selected unicam format: 640x480-pGAA

When I stop the video on the PC, libcamera-vid exits on the Pi.

I can specify the width and height of the output at the Pi, but it seems to be having problems delivering data.

libcamera-vid --timeout 0 --nopreview --width 1920 --height 1080 --inline --listen -o tcp://0.0.0.0:5000
the video starts, but rapidly freezes.
pi@WimPiZeroCamera:~ $ libcamera-vid --timeout 0 --nopreview --width 1920 --height 1080 --inline --listen -o tcp://0.0.0.0:5000 
[0:01:23.973536453] [670]  INFO Camera camera_manager.cpp:293 libcamera v0.0.0+3544-22656360
[0:01:24.087323064] [704] ERROR CameraSensor camera_sensor.cpp:591 'ov5647 10-0036': Camera sensor does not support test pattern modes.
[0:01:24.241746679] [704]  INFO RPI raspberrypi.cpp:1356 Registered camera /base/soc/i2c0mux/i2c@1/ov5647@36 to Unicam device /dev/media3 and ISP device /dev/media0
[0:01:24.247247304] [670]  INFO Camera camera.cpp:1029 configuring streams: (0) 1920x1080-YUV420
[0:01:24.250886379] [704]  INFO RPI raspberrypi.cpp:760 Sensor: /base/soc/i2c0mux/i2c@1/ov5647@36 - Selected sensor format: 1920x1080-SGBRG10_1X10 - Selected unicam format: 1920x1080-pGAA

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.204113] Internal error: Oops: 80000005 [#1] ARM

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.205952] Process libcamera-vid (pid: 704, stack limit = 0x5546931d)

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.205993] Stack: (0xc2d2de10 to 0xc2d2e000)

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206027] de00:                                     c2d2de3b c1b70ea0 c2d2de5c 00000000

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206068] de20: 00000000 00000000 00000000 00000000 c3b2ed20 b58bc074 00c9c038 00000003

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206104] de40: 00000002 00278d00 00004002 00000001 00000000 00000056 00000000 000180b5

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206140] de60: 00000000 00000000 00000000 00000000 00000000 00000000 00000004 0000001d

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206178] de80: 00278d00 00000000 00000000 c2d2de98 c0046c80 c000b100 c13b6014 c1b70ea0

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206216] dea0: c0c2b2c0 c1888ea0 00000000 c41df8c0 c2d2dedc c2d2dec0 c0013798 0a121acf

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206253] dec0: 00000000 bf1d1d50 c3b2ed21 00000000 c3b2ed20 c0c1f028 b58bc074 0000000e

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206292] dee0: c2d2defc c2d2def0 bf1d1d6c bf1d17b4 c2d2df14 c2d2df00 bf1c9148 bf1d1d5c

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206330] df00: c044560f c3b2ed21 c2d2dfa4 c2d2df18 c021fda0 bf1c9108 00000000 c0c1f028

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206369] df20: c0008ff0 00c5387d c2d2df6c c2d2df38 c0014720 c001377c 00000000 00000000

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206406] df40: 00000000 00000000 c0c9c038 60000010 c0008ff0 00c5387d 00000000 c0009104

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206444] df60: c2d2df94 c2d2df70 c00f8f20 c00fa1fc b6968a5c 0a121acf ffffffff b58bc074

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206481] df80: b4f11558 b4f0ba30 00000036 c00083e4 c2d2c000 00000000 00000000 c2d2dfa8

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206518] dfa0: c0008260 c021fc98 b58bc074 b4f11558 0000000e c044560f b58bc074 b6dfb788

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206555] dfc0: b58bc074 b4f11558 b4f0ba30 00000036 0bde9f08 00000014 b6ad9124 01167c88

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206595] dfe0: b6aabe94 b58bc04c b6a354a0 b6bcb1ac 60000010 0000000e 00000000 00000000

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206625] Backtrace: 

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.206653] [<bf1d17a8>] (video_usercopy [videodev]) from [<bf1d1d6c>] (video_ioctl2+0x1c/0x24 [videodev])

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.207763]  r10:0000000e r9:b58bc074 r8:c0c1f028 r7:c3b2ed20 r6:00000000 r5:c3b2ed21

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.207800]  r4:bf1d1d50

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.207820] [<bf1d1d50>] (video_ioctl2 [videodev]) from [<bf1c9148>] (v4l2_ioctl+0x4c/0x64 [videodev])

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.208594] [<bf1c90fc>] (v4l2_ioctl [videodev]) from [<c021fda0>] (sys_ioctl+0x114/0x9b0)

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209024]  r5:c3b2ed21 r4:c044560f

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209047] [<c021fc8c>] (sys_ioctl) from [<c0008260>] (ret_fast_syscall+0x0/0x1c)

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209094] Exception stack(0xc2d2dfa8 to 0xc2d2dff0)

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209128] dfa0:                   b58bc074 b4f11558 0000000e c044560f b58bc074 b6dfb788

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209167] dfc0: b58bc074 b4f11558 b4f0ba30 00000036 0bde9f08 00000014 b6ad9124 01167c88

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209202] dfe0: b6aabe94 b58bc04c b6a354a0 b6bcb1ac

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209233]  r10:00000000 r9:c2d2c000 r8:c00083e4 r7:00000036 r6:b4f0ba30 r5:b4f11558

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209261]  r4:b58bc074

Message from syslogd@WimPiZeroCamera at Jun  3 21:06:16 ...
 kernel:[   86.209294] Code: bad PC value

I’m including the output of dmesg here in case anyone has a solution to my problem. Most likely I’m going to switch back to the Buster release of raspian and see if everything works properly there.

pi@WimPiZeroCamera:~ $ dmesg 
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 5.15.32+ (dom@buildbot) (arm-linux-gnueabihf-gcc-8 (Ubuntu/Linaro 8.4.0-3ubuntu1) 8.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #1538 Thu Mar 31 19:37:58 BST 2022
[    0.000000] CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
[    0.000000] OF: fdt: Machine model: Raspberry Pi Zero W Rev 1.1
[    0.000000] random: fast init done
[    0.000000] Memory policy: Data cache writeback
[    0.000000] Reserved memory: created CMA memory pool at 0x0bc00000, size 256 MiB
[    0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000000000000-0x000000001bffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x000000001bffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000001bffffff]
[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000] pcpu-alloc: [0] 0 
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 113680
[    0.000000] Kernel command line: coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 video=Composite-1:720x480@60i smsc95xx.macaddr=B8:27:EB:B0:8B:F5 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000  console=ttyS0,115200 console=tty1 root=PARTUUID=fb77dacb-02 rootfstype=ext4 fsck.repair=yes rootwait
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 177232K/458752K available (8994K kernel code, 1338K rwdata, 2932K rodata, 436K init, 546K bss, 19376K reserved, 262144K cma-reserved)
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] ftrace: allocating 31774 entries in 94 pages
[    0.000000] ftrace: allocated 94 pages with 5 groups
[    0.000000] trace event string verifier disabled
[    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[    0.000000] random: get_random_bytes called from start_kernel+0x474/0x6d8 with crng_init=1
[    0.000006] sched_clock: 32 bits at 1000kHz, resolution 1000ns, wraps every 2147483647500ns
[    0.000103] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1911260446275 ns
[    0.000218] bcm2835: system timer (irq = 27)
[    0.001053] Console: colour dummy device 80x30
[    0.001743] printk: console [tty1] enabled
[    0.001850] Calibrating delay loop... 697.95 BogoMIPS (lpj=3489792)
[    0.060393] pid_max: default: 32768 minimum: 301
[    0.060674] LSM: Security Framework initializing
[    0.060954] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.061048] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.063506] cgroup: Disabling memory control group subsystem
[    0.064019] CPU: Testing write buffer coherency: ok
[    0.066192] Setting up static identity map for 0x8220 - 0x8258
[    0.067811] devtmpfs: initialized
[    0.083783] VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5
[    0.084268] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.084378] futex hash table entries: 256 (order: -1, 3072 bytes, linear)
[    0.127092] pinctrl core: initialized pinctrl subsystem
[    0.129535] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.134406] DMA: preallocated 1024 KiB pool for atomic coherent allocations
[    0.142234] audit: initializing netlink subsys (disabled)
[    0.143981] thermal_sys: Registered thermal governor 'step_wise'
[    0.145036] hw-breakpoint: found 6 breakpoint and 1 watchpoint registers.
[    0.145154] hw-breakpoint: maximum watchpoint size is 4 bytes.
[    0.145493] Serial: AMBA PL011 UART driver
[    0.151112] audit: type=2000 audit(0.140:1): state=initialized audit_enabled=0 res=1
[    0.160187] bcm2835-mbox 2000b880.mailbox: mailbox enabled
[    0.191113] raspberrypi-firmware soc:firmware: Attached to firmware from 2022-03-24T13:20:54, variant start
[    0.201153] raspberrypi-firmware soc:firmware: Firmware hash is e5a963efa66a1974127860b42e913d2374139ff5
[    0.262032] Kprobes globally optimized
[    0.272466] bcm2835-dma 20007000.dma: DMA legacy API manager, dmachans=0x1
[    0.276096] SCSI subsystem initialized
[    0.276738] usbcore: registered new interface driver usbfs
[    0.276920] usbcore: registered new interface driver hub
[    0.277084] usbcore: registered new device driver usb
[    0.277674] usb_phy_generic phy: supply vcc not found, using dummy regulator
[    0.278596] pps_core: LinuxPPS API ver. 1 registered
[    0.278672] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.278771] PTP clock support registered
[    0.281877] clocksource: Switched to clocksource timer
[    0.370365] VFS: Disk quotas dquot_6.6.0
[    0.370608] VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[    0.370926] FS-Cache: Loaded
[    0.371393] CacheFiles: Loaded
[    0.372730] simple-framebuffer 1eaa9000.framebuffer: framebuffer at 0x1eaa9000, 0x151800 bytes
[    0.372839] simple-framebuffer 1eaa9000.framebuffer: format=a8r8g8b8, mode=720x480x32, linelength=2880
[    2.316040] Console: switching to colour frame buffer device 90x30
[    2.325233] simple-framebuffer 1eaa9000.framebuffer: fb0: simplefb registered!
[    2.350708] NET: Registered PF_INET protocol family
[    2.354867] IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear)
[    2.360331] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
[    2.367949] TCP established hash table entries: 4096 (order: 2, 16384 bytes, linear)
[    2.371976] TCP bind hash table entries: 4096 (order: 2, 16384 bytes, linear)
[    2.375979] TCP: Hash tables configured (established 4096 bind 4096)
[    2.380172] UDP hash table entries: 256 (order: 0, 4096 bytes, linear)
[    2.384369] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes, linear)
[    2.388971] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    2.394705] RPC: Registered named UNIX socket transport module.
[    2.398827] RPC: Registered udp transport module.
[    2.402805] RPC: Registered tcp transport module.
[    2.406660] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    2.412559] armv6-pmu arm-pmu: hw perfevents: no irqs for PMU, sampling events not supported
[    2.420478] hw perfevents: enabled with armv6_1176 PMU driver, 3 counters available
[    2.429866] Initialise system trusted keyrings
[    2.434734] workingset: timestamp_bits=14 max_order=17 bucket_order=3
[    2.454069] zbud: loaded
[    2.461621] FS-Cache: Netfs 'nfs' registered for caching
[    2.467344] NFS: Registering the id_resolver key type
[    2.471447] Key type id_resolver registered
[    2.475469] Key type id_legacy registered
[    2.479543] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[    2.483449] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[    2.489597] Key type asymmetric registered
[    2.493540] Asymmetric key parser 'x509' registered
[    2.497458] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)
[    2.501169] io scheduler mq-deadline registered
[    2.504848] io scheduler kyber registered
[    2.524068] bcm2835-rng 20104000.rng: hwrng registered
[    2.528560] vc-mem: phys_addr:0x00000000 mem_base=0x1ec00000 mem_size:0x20000000(512 MiB)
[    2.538148] gpiomem-bcm2835 20200000.gpiomem: Initialised: Registers at 0x20200000
[    2.566824] brd: module loaded
[    2.585348] loop: module loaded
[    2.590544] Loading iSCSI transport class v2.0-870.
[    2.597691] usbcore: registered new interface driver smsc95xx
[    2.601558] dwc_otg: version 3.00a 10-AUG-2012 (platform bus)
[    3.334020] Core Release: 2.80a
[    3.337668] Setting default values for core params
[    3.341198] Finished setting default values for core params
[    3.545225] Using Buffer DMA mode
[    3.548723] Periodic Transfer Interrupt Enhancement - disabled
[    3.552244] Multiprocessor Interrupt Enhancement - disabled
[    3.555760] OTG VER PARAM: 0, OTG VER FLAG: 0
[    3.559326] Dedicated Tx FIFOs mode

[    3.564631] WARN::dwc_otg_hcd_init:1074: FIQ DMA bounce buffers: virt = cbd04000 dma = 0x8bd04000 len=9024
[    3.575023] FIQ FSM acceleration enabled for :
               Non-periodic Split Transactions
               Periodic Split Transactions
               High-Speed Isochronous Endpoints
               Interrupt/Control Split Transaction hack enabled
[    3.591752] dwc_otg: Microframe scheduler enabled

[    3.592119] WARN::hcd_init_fiq:457: FIQ on core 0

[    3.598562] WARN::hcd_init_fiq:458: FIQ ASM at c0685988 length 36

[    3.604610] WARN::hcd_init_fiq:497: MPHI regs_base at dc810000
[    3.610870] dwc_otg 20980000.usb: DWC OTG Controller
[    3.614171] dwc_otg 20980000.usb: new USB bus registered, assigned bus number 1
[    3.617505] dwc_otg 20980000.usb: irq 56, io mem 0x00000000
[    3.620707] Init: Port Power? op_state=1
[    3.623880] Init: Power Port (0)
[    3.627538] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.15
[    3.633926] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    3.637264] usb usb1: Product: DWC OTG Controller
[    3.640556] usb usb1: Manufacturer: Linux 5.15.32+ dwc_otg_hcd
[    3.643942] usb usb1: SerialNumber: 20980000.usb
[    3.648695] hub 1-0:1.0: USB hub found
[    3.652208] hub 1-0:1.0: 1 port detected
[    3.656876] dwc_otg: FIQ enabled
[    3.656917] dwc_otg: NAK holdoff enabled
[    3.656934] dwc_otg: FIQ split-transaction FSM enabled
[    3.656969] Module dwc_common_port init
[    3.657671] usbcore: registered new interface driver usb-storage
[    3.661498] mousedev: PS/2 mouse device common for all mice
[    3.669132] sdhci: Secure Digital Host Controller Interface driver
[    3.672648] sdhci: Copyright(c) Pierre Ossman
[    3.676899] sdhci-pltfm: SDHCI platform and OF driver helper
[    3.681762] ledtrig-cpu: registered to indicate activity on CPUs
[    3.686524] hid: raw HID events driver (C) Jiri Kosina
[    3.690276] usbcore: registered new interface driver usbhid
[    3.693802] usbhid: USB HID core driver
[    3.705200] Initializing XFRM netlink socket
[    3.709139] NET: Registered PF_PACKET protocol family
[    3.712860] Key type dns_resolver registered
[    3.717207] registered taskstats version 1
[    3.720496] Loading compiled-in X.509 certificates
[    3.742539] uart-pl011 20201000.serial: cts_event_workaround enabled
[    3.746175] 20201000.serial: ttyAMA0 at MMIO 0x20201000 (irq = 81, base_baud = 0) is a PL011 rev2
[    3.757468] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timer
[    3.761772] bcm2835-power bcm2835-power: Broadcom BCM2835 power domains driver
[    3.768052] mmc-bcm2835 20300000.mmcnr: mmc_debug:0 mmc_debug2:0
[    3.771535] mmc-bcm2835 20300000.mmcnr: DMA channel allocated
[    3.803125] sdhost: log_buf @ (ptrval) (8bd03000)
[    3.855698] mmc0: sdhost-bcm2835 loaded - DMA enabled (>1)
[    3.883185] of_cfs_init
[    3.887392] of_cfs_init: OK
[    3.893814] Waiting for root device PARTUUID=fb77dacb-02...
[    3.963217] mmc0: host does not support reading read-only switch, assuming write-enable
[    3.969841] mmc0: new high speed SDHC card at address aaaa
[    3.975484] mmcblk0: mmc0:aaaa SU32G 29.7 GiB 
[    3.985296]  mmcblk0: p1 p2
[    3.990746] mmcblk0: mmc0:aaaa SU32G 29.7 GiB
[    4.021138] mmc1: new high speed SDIO card at address 0001
[    4.025652] EXT4-fs (mmcblk0p2): INFO: recovery required on readonly filesystem
[    4.029180] EXT4-fs (mmcblk0p2): write access will be enabled during recovery
[    4.645008] EXT4-fs (mmcblk0p2): recovery complete
[    4.652774] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none.
[    4.659908] VFS: Mounted root (ext4 filesystem) readonly on device 179:2.
[    4.672891] devtmpfs: mounted
[    4.683522] Freeing unused kernel image (initmem) memory: 436K
[    4.687220] Kernel memory protection not selected by kernel config.
[    4.690800] Run /sbin/init as init process
[    4.694317]   with arguments:
[    4.694341]     /sbin/init
[    4.694360]   with environment:
[    4.694373]     HOME=/
[    4.694388]     TERM=linux
[    5.343914] systemd[1]: System time before build time, advancing clock.
[    5.519817] NET: Registered PF_INET6 protocol family
[    5.526214] Segment Routing with IPv6
[    5.529914] In-situ OAM (IOAM) with IPv6
[    5.645623] systemd[1]: systemd 247.3-7+rpi1 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)
[    5.658634] systemd[1]: Detected architecture arm.
[    5.697216] systemd[1]: Set hostname to <WimPiZeroCamera.WimsWorld>.
[    8.823552] systemd[1]: Queued start job for default target Multi-User System.
[    8.832343] random: systemd: uninitialized urandom read (16 bytes read)
[    8.845466] systemd[1]: Created slice system-getty.slice.
[    8.855414] random: systemd: uninitialized urandom read (16 bytes read)
[    8.862590] systemd[1]: Created slice system-modprobe.slice.
[    8.871824] random: systemd: uninitialized urandom read (16 bytes read)
[    8.879006] systemd[1]: Created slice system-systemd\x2dfsck.slice.
[    8.890763] systemd[1]: Created slice User and Session Slice.
[    8.901199] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[    8.911716] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[    8.924537] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.
[    8.939726] systemd[1]: Reached target Local Encrypted Volumes.
[    8.950927] systemd[1]: Reached target Paths.
[    8.961450] systemd[1]: Reached target Slices.
[    8.971718] systemd[1]: Reached target Swap.
[    8.992662] systemd[1]: Listening on Syslog Socket.
[    9.004199] systemd[1]: Listening on fsck to fsckd communication Socket.
[    9.014989] systemd[1]: Listening on initctl Compatibility Named Pipe.
[    9.027787] systemd[1]: Listening on Journal Audit Socket.
[    9.039590] systemd[1]: Listening on Journal Socket (/dev/log).
[    9.051807] systemd[1]: Listening on Journal Socket.
[    9.064158] systemd[1]: Listening on udev Control Socket.
[    9.075266] systemd[1]: Listening on udev Kernel Socket.
[    9.086732] systemd[1]: Condition check resulted in Huge Pages File System being skipped.
[    9.105301] systemd[1]: Mounting POSIX Message Queue File System...
[    9.142938] systemd[1]: Mounting RPC Pipe File System...
[    9.196885] systemd[1]: Mounting Kernel Debug File System...
[    9.263061] systemd[1]: Mounting Kernel Trace File System...
[    9.283089] systemd[1]: Condition check resulted in Kernel Module supporting RPCSEC_GSS being skipped.
[    9.326171] systemd[1]: Starting Restore / save the current clock...
[    9.375407] systemd[1]: Starting Set the console keyboard layout...
[    9.444206] systemd[1]: Starting Create list of static device nodes for the current kernel...
[    9.573546] systemd[1]: Starting Load Kernel Module configfs...
[    9.644045] systemd[1]: Starting Load Kernel Module drm...
[    9.715011] systemd[1]: Starting Load Kernel Module fuse...
[    9.772720] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.
[    9.883008] systemd[1]: Starting File System Check on Root Device...
[    9.959381] fuse: init (API version 7.34)
[   10.056397] systemd[1]: Starting Journal Service...
[   10.173562] systemd[1]: Starting Load Kernel Modules...
[   10.293577] systemd[1]: Starting Coldplug All udev Devices...
[   10.497717] systemd[1]: Mounted POSIX Message Queue File System.
[   10.568086] systemd[1]: Mounted RPC Pipe File System.
[   10.656644] systemd[1]: Mounted Kernel Debug File System.
[   10.735604] systemd[1]: Mounted Kernel Trace File System.
[   10.825311] systemd[1]: Finished Restore / save the current clock.
[   10.894803] systemd[1]: Finished Create list of static device nodes for the current kernel.
[   10.961170] systemd[1]: modprobe@configfs.service: Succeeded.
[   11.025586] systemd[1]: Finished Load Kernel Module configfs.
[   11.079411] systemd[1]: modprobe@drm.service: Succeeded.
[   11.132309] systemd[1]: Finished Load Kernel Module drm.
[   11.185670] systemd[1]: modprobe@fuse.service: Succeeded.
[   11.242902] systemd[1]: Finished Load Kernel Module fuse.
[   11.312343] systemd[1]: Finished Load Kernel Modules.
[   11.428197] systemd[1]: Mounting FUSE Control File System...
[   11.602844] systemd[1]: Mounting Kernel Configuration File System...
[   11.723998] systemd[1]: Started File System Check Daemon to report status.
[   11.863618] systemd[1]: Starting Apply Kernel Variables...
[   12.002325] systemd[1]: Finished File System Check on Root Device.
[   12.076580] systemd[1]: Mounted FUSE Control File System.
[   12.137696] systemd[1]: Mounted Kernel Configuration File System.
[   12.283330] systemd[1]: Starting Remount Root and Kernel File Systems...
[   12.454112] systemd[1]: Finished Apply Kernel Variables.
[   12.531005] systemd[1]: Started Journal Service.
[   13.322293] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null). Quota mode: none.
[   13.886004] systemd-journald[100]: Received client request to flush runtime journal.
[   13.928907] systemd-journald[100]: File /var/log/journal/68fa56d97f7c4ad18b377cc5780ee614/system.journal corrupted or uncleanly shut down, renaming and replacing.
[   18.180305] mc: Linux media interface: v0.10
[   18.288049] vc_sm_cma: module is from the staging directory, the quality is unknown, you have been warned.
[   18.290893] bcm2835_vc_sm_cma_probe: Videocore shared memory driver
[   18.290953] [vc_sm_connected_init]: start
[   18.343502] [vc_sm_connected_init]: installed successfully
[   18.492369] videodev: Linux video capture interface: v2.00
[   18.606837] bcm2835_mmal_vchiq: module is from the staging directory, the quality is unknown, you have been warned.
[   18.610017] bcm2835_mmal_vchiq: module is from the staging directory, the quality is unknown, you have been warned.
[   18.622220] bcm2835_mmal_vchiq: module is from the staging directory, the quality is unknown, you have been warned.
[   18.648452] bcm2835_isp: module is from the staging directory, the quality is unknown, you have been warned.
[   18.651155] bcm2835_v4l2: module is from the staging directory, the quality is unknown, you have been warned.
[   18.707824] bcm2835-isp bcm2835-isp: Device node output[0] registered as /dev/video13
[   18.723636] bcm2835-isp bcm2835-isp: Device node capture[0] registered as /dev/video14
[   18.726664] bcm2835-isp bcm2835-isp: Device node capture[1] registered as /dev/video15
[   18.736682] bcm2835-isp bcm2835-isp: Device node stats[2] registered as /dev/video16
[   18.738200] bcm2835-isp bcm2835-isp: Register output node 0 with media controller
[   18.738293] bcm2835-isp bcm2835-isp: Register capture node 1 with media controller
[   18.738336] bcm2835-isp bcm2835-isp: Register capture node 2 with media controller
[   18.738374] bcm2835-isp bcm2835-isp: Register capture node 3 with media controller
[   18.740160] bcm2835_codec: module is from the staging directory, the quality is unknown, you have been warned.
[   18.758906] snd_bcm2835: module is from the staging directory, the quality is unknown, you have been warned.
[   18.782242] bcm2835-isp bcm2835-isp: Device node output[0] registered as /dev/video20
[   18.803152] bcm2835_audio bcm2835_audio: there is not valid maps for state default
[   18.806862] bcm2835-isp bcm2835-isp: Device node capture[0] registered as /dev/video21
[   18.809409] bcm2835-isp bcm2835-isp: Device node capture[1] registered as /dev/video22
[   18.823238] bcm2835-isp bcm2835-isp: Device node stats[2] registered as /dev/video23
[   18.823323] bcm2835-isp bcm2835-isp: Register output node 0 with media controller
[   18.823374] bcm2835-isp bcm2835-isp: Register capture node 1 with media controller
[   18.823412] bcm2835-isp bcm2835-isp: Register capture node 2 with media controller
[   18.823447] bcm2835-isp bcm2835-isp: Register capture node 3 with media controller
[   18.825769] bcm2835-isp bcm2835-isp: Loaded V4L2 bcm2835-isp
[   18.840766] bcm2835-codec bcm2835-codec: Device registered as /dev/video10
[   18.840912] bcm2835-codec bcm2835-codec: Loaded V4L2 decode
[   18.871541] bcm2835-codec bcm2835-codec: Device registered as /dev/video11
[   18.871647] bcm2835-codec bcm2835-codec: Loaded V4L2 encode
[   18.907048] bcm2835-codec bcm2835-codec: Device registered as /dev/video12
[   18.907151] bcm2835-codec bcm2835-codec: Loaded V4L2 isp
[   18.924107] bcm2835-codec bcm2835-codec: Device registered as /dev/video18
[   18.924213] bcm2835-codec bcm2835-codec: Loaded V4L2 image_fx
[   18.947826] bcm2835-codec bcm2835-codec: Device registered as /dev/video31
[   18.947931] bcm2835-codec bcm2835-codec: Loaded V4L2 encode_image
[   19.858213] i2c i2c-11: Added multiplexed i2c bus 0
[   19.859223] i2c 10-0036: Fixing up cyclic dependency with 20801000.csi
[   19.860015] i2c i2c-11: Added multiplexed i2c bus 10
[   21.188839] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[   21.706164] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[   21.750115] cfg80211: loaded regulatory.db is malformed or signature is missing/invalid
[   22.412389] brcmfmac: F1 signature read @0x18000000=0x1541a9a6
[   22.561652] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
[   22.563589] brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43430-sdio.raspberrypi,model-zero-w.bin failed with error -2
[   22.572818] usbcore: registered new interface driver brcmfmac
[   22.885833] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
[   22.886140] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
[   22.899684] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43430/1 wl0: Jul 19 2021 03:24:18 version 7.45.98 (TOB) (56df937 CY) FWID 01-8e14b897
[   23.403642] checking generic (1eaa9000 151800) vs hw (0 ffffffff)
[   23.403700] fb0: switching to vc4 from simple
[   23.460836] Console: switching to colour dummy device 80x30
[   23.502302] vc4-drm soc:gpu: bound 20400000.hvs (ops vc4_hvs_ops [vc4])
[   23.572366] Registered IR keymap rc-cec
[   23.572797] rc rc0: vc4 as /devices/platform/soc/20902000.hdmi/rc/rc0
[   23.573285] input: vc4 as /devices/platform/soc/20902000.hdmi/rc/rc0/input0
[   28.080722] 8021q: 802.1Q VLAN Support v1.8
[   29.503575] uart-pl011 20201000.serial: no DMA platform data
[   29.815882] Adding 102396k swap on /var/swap.  Priority:-2 extents:4 across:249856k SSFS
[   30.952146] random: crng init done
[   30.952182] random: 7 urandom warning(s) missed due to ratelimiting
[   33.878808] Bluetooth: Core ver 2.22
[   33.878983] NET: Registered PF_BLUETOOTH protocol family
[   33.879004] Bluetooth: HCI device and connection manager initialized
[   33.879041] Bluetooth: HCI socket layer initialized
[   33.879065] Bluetooth: L2CAP socket layer initialized
[   33.879109] Bluetooth: SCO socket layer initialized
[   33.898769] Bluetooth: HCI UART driver ver 2.3
[   33.898816] Bluetooth: HCI UART protocol H4 registered
[   33.898969] Bluetooth: HCI UART protocol Three-wire (H5) registered
[   33.899327] Bluetooth: HCI UART protocol Broadcom registered
[   34.402009] cam-dummy-reg: disabling
[   34.922194] vc4-drm soc:gpu: bound 20400000.hvs (ops vc4_hvs_ops [vc4])
[   34.942692] Registered IR keymap rc-cec
[   34.942995] rc rc0: vc4 as /devices/platform/soc/20902000.hdmi/rc/rc0
[   34.943342] input: vc4 as /devices/platform/soc/20902000.hdmi/rc/rc0/input1
[   34.951397] vc4-drm soc:gpu: bound 20902000.hdmi (ops vc4_hdmi_ops [vc4])
[   34.962416] vc4-drm soc:gpu: bound 20004000.txp (ops vc4_txp_ops [vc4])
[   34.963176] vc4-drm soc:gpu: bound 20206000.pixelvalve (ops vc4_crtc_ops [vc4])
[   34.963844] vc4-drm soc:gpu: bound 20207000.pixelvalve (ops vc4_crtc_ops [vc4])
[   34.964501] vc4-drm soc:gpu: bound 20807000.pixelvalve (ops vc4_crtc_ops [vc4])
[   34.965047] vc4-drm soc:gpu: bound 20c00000.v3d (ops vc4_v3d_ops [vc4])
[   35.004689] [drm] Initialized vc4 0.0.0 20140616 for soc:gpu on minor 0
[   35.005276] vc4-drm soc:gpu: [drm] Cannot find any crtc or sizes
[   36.267635] ov5647 10-0036: Consider updating driver ov5647 to match on endpoints
[   37.037078] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[   37.037123] Bluetooth: BNEP filters: protocol multicast
[   37.037157] Bluetooth: BNEP socket layer initialized
[   37.216575] NET: Registered PF_ALG protocol family
[   39.103893] brcmfmac: brcmf_cfg80211_set_power_mgmt: power save enabled
[   40.789395] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[   42.261353] ICMPv6: process `dhcpcd' is using deprecated sysctl (syscall) net.ipv6.neigh.wlan0.retrans_time - use net.ipv6.neigh.wlan0.retrans_time_ms instead
[   45.282398] vc4-drm soc:gpu: [drm] Cannot find any crtc or sizes
[   86.203912] 8<--- cut here ---
[   86.203998] Unable to handle kernel paging request at virtual address bfa0dc9c
[   86.204036] pgd = 4ed01598
[   86.204067] [bfa0dc9c] *pgd=00000000
[   86.204113] Internal error: Oops: 80000005 [#1] ARM
[   86.204142] Modules linked in: cmac algif_hash aes_arm aes_generic ecb algif_skcipher af_alg bnep ov5647 snd_soc_hdmi_codec hci_uart btbcm bluetooth ecdh_generic ecc libaes 8021q garp stp llc vc4 brcmfmac cec brcmutil sha256_generic libsha256 drm_kms_helper cfg80211 snd_soc_core snd_compress snd_pcm_dmaengine syscopyarea rfkill sysfillrect i2c_mux_pinctrl sysimgblt raspberrypi_hwmon fb_sys_fops i2c_mux bcm2835_unicam v4l2_dv_timings v4l2_fwnode v4l2_async snd_bcm2835(C) bcm2835_codec(C) i2c_bcm2835 bcm2835_v4l2(C) v4l2_mem2mem bcm2835_isp(C) bcm2835_mmal_vchiq(C) snd_pcm videobuf2_vmalloc videobuf2_dma_contig videobuf2_memops videobuf2_v4l2 snd_timer videobuf2_common snd vc_sm_cma(C) videodev mc uio_pdrv_genirq fixed uio fuse drm drm_panel_orientation_quirks backlight ip_tables x_tables ipv6
[   86.204627] CPU: 0 PID: 704 Comm: libcamera-vid Tainted: G         C        5.15.32+ #1538
[   86.204667] Hardware name: BCM2835
[   86.204687] PC is at 0xbfa0dc9c
[   86.204718] LR is at video_usercopy+0x4e8/0x5a8 [videodev]
[   86.205310] pc : [<bfa0dc9c>]    lr : [<bf1d1c90>]    psr: 60000013
[   86.205338] sp : c2d2de10  ip : c2d2de10  fp : c2d2deec
[   86.205362] r10: c0c1f028  r9 : 00000000  r8 : 00000000
[   86.205386] r7 : c2d2de3c  r6 : 00000000  r5 : c044560f  r4 : c050560f
[   86.205411] r3 : 00000000  r2 : bf1f3a40  r1 : 0a121acf  r0 : c399c2e8
[   86.205437] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
[   86.205467] Control: 00c5387d  Table: 059d0008  DAC: 00000055
[   86.205490] Register r0 information: slab kmalloc-8k start c399c000 pointer offset 744 size 8192
[   86.205564] Register r1 information: non-paged memory
[   86.205597] Register r2 information: 58-page vmalloc region starting at 0xbf1c9000 allocated at load_module+0xa74/0x25f8
[   86.205667] Register r3 information: NULL pointer
[   86.205696] Register r4 information: non-slab/vmalloc memory
[   86.205727] Register r5 information: non-slab/vmalloc memory
[   86.205755] Register r6 information: NULL pointer
[   86.205780] Register r7 information: non-slab/vmalloc memory
[   86.205809] Register r8 information: NULL pointer
[   86.205834] Register r9 information: NULL pointer
[   86.205862] Register r10 information: non-slab/vmalloc memory
[   86.205896] Register r11 information: non-slab/vmalloc memory
[   86.205924] Register r12 information: non-slab/vmalloc memory
[   86.205952] Process libcamera-vid (pid: 704, stack limit = 0x5546931d)
[   86.205993] Stack: (0xc2d2de10 to 0xc2d2e000)
[   86.206027] de00:                                     c2d2de3b c1b70ea0 c2d2de5c 00000000
[   86.206068] de20: 00000000 00000000 00000000 00000000 c3b2ed20 b58bc074 00c9c038 00000003
[   86.206104] de40: 00000002 00278d00 00004002 00000001 00000000 00000056 00000000 000180b5
[   86.206140] de60: 00000000 00000000 00000000 00000000 00000000 00000000 00000004 0000001d
[   86.206178] de80: 00278d00 00000000 00000000 c2d2de98 c0046c80 c000b100 c13b6014 c1b70ea0
[   86.206216] dea0: c0c2b2c0 c1888ea0 00000000 c41df8c0 c2d2dedc c2d2dec0 c0013798 0a121acf
[   86.206253] dec0: 00000000 bf1d1d50 c3b2ed21 00000000 c3b2ed20 c0c1f028 b58bc074 0000000e
[   86.206292] dee0: c2d2defc c2d2def0 bf1d1d6c bf1d17b4 c2d2df14 c2d2df00 bf1c9148 bf1d1d5c
[   86.206330] df00: c044560f c3b2ed21 c2d2dfa4 c2d2df18 c021fda0 bf1c9108 00000000 c0c1f028
[   86.206369] df20: c0008ff0 00c5387d c2d2df6c c2d2df38 c0014720 c001377c 00000000 00000000
[   86.206406] df40: 00000000 00000000 c0c9c038 60000010 c0008ff0 00c5387d 00000000 c0009104
[   86.206444] df60: c2d2df94 c2d2df70 c00f8f20 c00fa1fc b6968a5c 0a121acf ffffffff b58bc074
[   86.206481] df80: b4f11558 b4f0ba30 00000036 c00083e4 c2d2c000 00000000 00000000 c2d2dfa8
[   86.206518] dfa0: c0008260 c021fc98 b58bc074 b4f11558 0000000e c044560f b58bc074 b6dfb788
[   86.206555] dfc0: b58bc074 b4f11558 b4f0ba30 00000036 0bde9f08 00000014 b6ad9124 01167c88
[   86.206595] dfe0: b6aabe94 b58bc04c b6a354a0 b6bcb1ac 60000010 0000000e 00000000 00000000
[   86.206625] Backtrace: 
[   86.206653] [<bf1d17a8>] (video_usercopy [videodev]) from [<bf1d1d6c>] (video_ioctl2+0x1c/0x24 [videodev])
[   86.207763]  r10:0000000e r9:b58bc074 r8:c0c1f028 r7:c3b2ed20 r6:00000000 r5:c3b2ed21
[   86.207800]  r4:bf1d1d50
[   86.207820] [<bf1d1d50>] (video_ioctl2 [videodev]) from [<bf1c9148>] (v4l2_ioctl+0x4c/0x64 [videodev])
[   86.208594] [<bf1c90fc>] (v4l2_ioctl [videodev]) from [<c021fda0>] (sys_ioctl+0x114/0x9b0)
[   86.209024]  r5:c3b2ed21 r4:c044560f
[   86.209047] [<c021fc8c>] (sys_ioctl) from [<c0008260>] (ret_fast_syscall+0x0/0x1c)
[   86.209094] Exception stack(0xc2d2dfa8 to 0xc2d2dff0)
[   86.209128] dfa0:                   b58bc074 b4f11558 0000000e c044560f b58bc074 b6dfb788
[   86.209167] dfc0: b58bc074 b4f11558 b4f0ba30 00000036 0bde9f08 00000014 b6ad9124 01167c88
[   86.209202] dfe0: b6aabe94 b58bc04c b6a354a0 b6bcb1ac
[   86.209233]  r10:00000000 r9:c2d2c000 r8:c00083e4 r7:00000036 r6:b4f0ba30 r5:b4f11558
[   86.209261]  r4:b58bc074
[   86.209294] Code: bad PC value
[   86.209325] ---[ end trace 573ed3b4c982bd9e ]---

Adding the verbose option gets some interesting information.

pi@WimPiZeroCamera:~ $ libcamera-vid --verbose --timeout 0 --nopreview --listen --output tcp://0.0.0.0:5000
Options:
    verbose: 1
    info_text:#%frame (%fps fps) exp %exp ag %ag dg %dg
    timeout: 0
    width: 640
    height: 480
    output: tcp://0.0.0.0:5000
    post_process_file: 
    rawfull: 0
    preview: none
    qt-preview: 0
    transform: identity
    roi: all
    metering: centre
    exposure: normal
    ev: 0
    awb: auto
    flush: false
    wrap: 0
    brightness: 0
    contrast: 1
    saturation: 1
    sharpness: 1
    framerate: 30
    denoise: auto
    viewfinder-width: 0
    viewfinder-height: 0
    tuning-file: (libcamera)
    lores-width: 0
    lores-height: 0
    mode: unspecified
    viewfinder-mode: unspecified
    bitrate: 0
    profile: 
    level:  
    intra: 0
    inline: 0
    save-pts: 
    codec: h264
    quality (for MJPEG): 50
    keypress: 0
    signal: 0
    initial: record
    split: 0
    segment: 0
    circular: 0
Waiting for client to connect...
Client connection accepted
Running without preview window
Opening camera...
[0:01:26.152722968] [676]  INFO Camera camera_manager.cpp:293 libcamera v0.0.0+3544-22656360
[0:01:26.265051532] [688] ERROR CameraSensor camera_sensor.cpp:591 'ov5647 10-0036': Camera sensor does not support test pattern modes.
[0:01:26.418635710] [688]  INFO RPI raspberrypi.cpp:1356 Registered camera /base/soc/i2c0mux/i2c@1/ov5647@36 to Unicam device /dev/media3 and ISP device /dev/media0
Acquired camera /base/soc/i2c0mux/i2c@1/ov5647@36
Configuring video...
[0:01:26.426674609] [676]  INFO Camera camera.cpp:1029 configuring streams: (0) 640x480-YUV420
[0:01:26.430277012] [688]  INFO RPI raspberrypi.cpp:760 Sensor: /base/soc/i2c0mux/i2c@1/ov5647@36 - Selected sensor format: 640x480-SGBRG10_1X10 - Selected unicam format: 640x480-pGAA
Camera streams configured
Buffers allocated and mapped
Video setup complete
Opened H264Encoder on /dev/video11 as fd 25
Got 6 output buffers
Got 12 capture buffers
Codec streaming started
Requests created
Camera started!
Viewfinder frame 0
NetOutput: output buffer 0xb3463000 size 10770
Viewfinder frame 1
NetOutput: output buffer 0xb33e3000 size 5366
Viewfinder frame 2
NetOutput: output buffer 0xb3363000 size 5147
Viewfinder frame 3
NetOutput: output buffer 0xb32e3000 size 8520
Viewfinder frame 4
NetOutput: output buffer 0xb3263000 size 14873
Viewfinder frame 5
NetOutput: output buffer 0xb31e3000 size 17447
Viewfinder frame 6
NetOutput: output buffer 0xb3163000 size 17869
Viewfinder frame 7
NetOutput: output buffer 0xb30e3000 size 17804
Viewfinder frame 8
NetOutput: output buffer 0xb3063000 size 18022
Viewfinder frame 9
NetOutput: output buffer 0xb2fe3000 size 17997
Viewfinder frame 10
NetOutput: output buffer 0xb2f63000 size 17849
Viewfinder frame 11
NetOutput: output buffer 0xb2ee3000 size 17926
Viewfinder frame 12
NetOutput: output buffer 0xb3463000 size 18017
Viewfinder frame 13
NetOutput: output buffer 0xb33e3000 size 18010
Viewfinder frame 14
NetOutput: output buffer 0xb3363000 size 18047

Each time I try higher resolution, the pi program crashes, and sometimes it leaves the pi completely nonresponsive on the network, requiring a power cycle to recover it.

DD-WRT Upgrade part two

The upgrade of DD-WRT that I performed this last Saturday brought the version from a 2019 release to a 2022 release. DD-WRT always recommends doing a factory reset of settings before and after flashing a new firmware. As far as I’ve been able to find out, DD-WRT doesn’t provide any way to back up the settings in any form other than a binary download that is not compatible between versions. This shortcoming makes upgrading a router with many customized settings a difficult process.

dd-wrt status screen

I performed the flash upgrade without resetting everything to defaults. It wasn’t until I was going to bed on Saturday night that I realized not all things were working properly. All of the ipv4 services appeared to be working properly. The ipv6 services were not working properly on my internal network clients.

I have a Microsoft Windows Server 2016 Essentials machine running several services including file sharing on my internal network. I also have my Windows 10 desktop, and several Raspberry Pi machines. Some of the Pi machines access the file shares on the server for both reading and writing.

I’ve found that when ipv6 is not allocating global addresses for the windows server and clients, file sharing doesn’t work properly. This is an issue I don’t understand, and don’t want to change the default operation of the windows server or windows client machines, which might create more long term maintenance headaches.

Among the customizations I have set in the router:

  • Router Name
  • Domain Name
  • Local IP (v4) address is 192.168.0.1 instead of 192.168.1.1
  • close to 35 DHCP reservations for machines that run on my internal network.
  • IPv6 enabled and configured for DHCPv6 with Prefix Delegation
  • DDNS service configured as in previous post.
  • Wireless SSID
  • Wireless Password
  • SSH access to the router with rsa keys entered for allowed machines.

I figured out that the primary settings for DHCP and DNS resolution are run using dnsmasq, and the configuration file can be viewed by looking at /tmp/dnsmasq.conf in the ssh console. All of the dns reservations are listed in the form of:

dhcp-host=b0:39:56:78:83:b0,GS108Tv2,192.168.0.123,1440m
dhcp-host=28:c6:8e:09:30:cb,GS108Tv2-LR,192.168.0.125,1440m
dhcp-host=04:a1:51:b0:a6:9a,GS108Tv2-OW,192.168.0.124,1440m

Copying all of them out of the console as one entry and adding them to the Additional Dnsmasq Options field was much easier than pasting MAC addresses, Hostnames, and IP addresses into separate field for each entry.

After adding them via the web interface here, they look exactly like the entries created in the static leases section of the interface. I was hoping that the system would parse them and display them in the static leases section, but it doesn’t seem to do that.

My SSH terminal program is configured to send a series of commands to the console each time I connect which reminds me of the current setup as well as how to examine it after a long time when I’ve not worked on the device.

  • date ; uptime
  • route -A inet
  • route -A inet6
  • ip6tables -vnL
  • cat /tmp/dnsmasq.conf
  • cat /tmp/dhcp6c.conf
  • cat /tmp/radvd.conf
  • ifconfig

I’m currently not dumping the iptables (v4) output simply because there are a large number of rules that don’t get used which takes up a lot of extra space scrolling by.

I’ve compared the ipv4 and ipv6 routes from when ipv6 was not working, and they are identical.

root@Netgear-R7000:~# route -A inet
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         br1-mballard-v1 0.0.0.0         UG    0      0        0 vlan2
24.35.91.128    *               255.255.255.192 U     0      0        0 vlan2
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
192.168.0.0     *               255.255.255.0   U     0      0        0 br0
root@Netgear-R7000:~# route -A inet6
Kernel IPv6 routing table
Destination                                 Next Hop                                Flags Metric Ref    Use Iface
2604:4080:1304::/64                         ::                                      UA    256    0        0 vlan2   
2604:4080:1304:8010::/60                    ::                                      U     256    0        0 br0     
fe80::/64                                   ::                                      U     256    0        0 eth0    
fe80::/64                                   ::                                      U     256    0        0 vlan1   
fe80::/64                                   ::                                      U     256    0        0 eth1    
fe80::/64                                   ::                                      U     256    0        0 eth2    
fe80::/64                                   ::                                      U     256    1       23 br0     
fe80::/64                                   ::                                      U     256    0        0 vlan2   
::/0                                        fe80::22c:c8ff:fe42:24bf                UGDA  1024   2      302 vlan2   
::/0                                        ::                                      U     2048   2       38 vlan2   
::/0                                        ::                                      !n    -1     1      372 lo      
::1/128                                     ::                                      Un    0      3       15 lo      
2604:4080:1304::/128                        ::                                      Un    0      1        0 lo      
2604:4080:1304:0:b27f:b9ff:fe83:6590/128    ::                                      Un    0      3       75 lo      
2604:4080:1304:8010::/128                   ::                                      Un    0      1        0 lo      
2604:4080:1304:8010:b27f:b9ff:fe83:6591/128 ::                                      Un    0      3       64 lo      
fe80::/128                                  ::                                      Un    0      1        0 lo      
fe80::/128                                  ::                                      Un    0      1        0 lo      
fe80::/128                                  ::                                      Un    0      1        0 lo      
fe80::/128                                  ::                                      Un    0      1        0 lo      
fe80::/128                                  ::                                      Un    0      1        0 lo      
fe80::/128                                  ::                                      Un    0      1        0 lo      
fe80::b27f:b9ff:fe83:658f/128               ::                                      Un    0      1        0 lo      
fe80::b27f:b9ff:fe83:658f/128               ::                                      Un    0      1        0 lo      
fe80::b27f:b9ff:fe83:6590/128               ::                                      Un    0      3       61 lo      
fe80::b27f:b9ff:fe83:6591/128               ::                                      Un    0      1        0 lo      
fe80::b27f:b9ff:fe83:6591/128               ::                                      Un    0      3       24 lo      
fe80::b27f:b9ff:fe83:659e/128               ::                                      Un    0      1        0 lo      
ff00::/8                                    ::                                      U     256    0        0 eth0    
ff00::/8                                    ::                                      U     256    0        0 vlan1   
ff00::/8                                    ::                                      U     256    0        0 eth1    
ff00::/8                                    ::                                      U     256    0        0 eth2    
ff00::/8                                    ::                                      U     256    2      580 br0     
ff00::/8                                    ::                                      U     256    2       12 vlan2   
::/0                                        ::                                      !n    -1     1      372 lo      

I’ve looked at the ip6tables, and it also appears identical, beyond the counters.

root@Netgear-R7000:~# ip6tables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   12  2289 ACCEPT     all      *      *       ::/0                 ::/0                 state RELATED,ESTABLISHED
    5   376 ACCEPT     icmpv6    *      *       ::/0                 ::/0                
    0     0 ACCEPT     all      *      *       fe80::/64            ::/0                
    0     0 ACCEPT     all      br0    *       ::/0                 ::/0                
    0     0 ACCEPT     all      *      *       ::/0                 ::/0                

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all      *      *       ::/0                 ::/0                 state RELATED,ESTABLISHED
    0     0 ACCEPT     all      *      vlan2   ::/0                 ::/0                
    0     0 ACCEPT     icmpv6    *      *       ::/0                 ::/0                 ipv6-icmptype 128 limit: avg 2/sec burst 5
    0     0 ACCEPT     all      *      *       ::/0                 ::/0                

Chain OUTPUT (policy ACCEPT 31 packets, 4287 bytes)
 pkts bytes target     prot opt in     out     source               destination         

I’d tried disabling Radvd on the IPv6 configuration gui and adding “enable-ra” to the Additional Dnsmasq Options, but that didn’t fix my problems. The current configuration has matching radv.conf files to the non working version.

root@Netgear-R7000:~# cat /tmp/radvd.conf
interface br0
{
 IgnoreIfMissing on;
 AdvSendAdvert on;
 MinRtrAdvInterval 3;
 MaxRtrAdvInterval 10;
 AdvHomeAgentFlag off;
 AdvManagedFlag off;
 AdvOtherConfigFlag on;
 AdvLinkMTU 1452;
 prefix 2604:4080:1304:8010::/64 
 {
  AdvOnLink on;
  AdvAutonomous on;
  AdvValidLifetime 30;
  AdvPreferredLifetime 20;
 };
 RDNSS 2607:f060:2::1 2607:f060:2:1::1{};
};

I spent a lot of time reading up on IPv6 and reminding myself of things I’d known in the past and forgotten. https://blog.dorianbolivar.com/2018/09/going-full-ipv6-with-dd-wrt.html?lr=1 is a well written post with links to more sources that I found especially helpful as it was written specifically using DD-WRT and IPv6. My only issue is that it was written nearly four years ago and may not have the same options in the DD-WRT gui as are currently available.

One of the items I added to the Additional Dnsmasq Options was a couple of host entries so that dnsmasq would resolve IPv6 addresses for my windows machines. It seems to speed up the IPv6 name discovery of my windows server while still pointing default DNS resolution at the router.

host-record entries

My conclusion is that I don’t understand what was different in the non-functioning setup I had with holdovers from the older version of DD-WRT, and going through the pain of re-installing from factory fresh configuration after each upgrade is worth the trouble. I’m still not satisfied with the best way of retrieving all of the configuration data into a text file that I can later run a difference test to see what’s changed, or needs to be changed.