NetGear AC1200 A6210 ================================ .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow Topics in this section, * :ref:`Learnings in this section ` * :ref:`NetGear Wi-Fi driver image ` * :ref:`Netgear A6210 features ` * :ref:`Version Info ` * :ref:`Steps to load netgear wifi driver ` * :ref:`Video tutorial ` * :ref:`STEP 1: Check wifi chipset ` * :ref:`STEP 2: Check dmesg output ` * :ref:`STEP 3: Stop existing Wireless Modules ` * :ref:`STEP 4: Compile Linux ` * :ref:`STEP 5: Compile Wireless Modules ` * :ref:`STEP 6: Check for ".ko" files ` * :ref:`STEP 7: Check for ".zst" file, if present remove that file ` * :ref:`STEP 8: Restart your system ` * :ref:`STEP 9: Change directory to compiled kernel path ` * :ref:`STEP 10: Clear old kernel logs ` * :ref:`STEP 11: Insert the modules ` * :ref:`STEP 12: Check the loaded modules ` * :ref:`STEP 13: Check the interface name ` * :ref:`STEP 14: Let us do Wireless driver development ! ` * :ref:`STEP 14.1: Init path debugging ` * :ref:`Add prints in module init, module exit ` * :ref:`STEP 14.2: Control path debugging ` * :ref:`Add prints in nl80211_small_ops ` * :ref:`Add prints in mac80211_config_ops ` * :ref:`Add prints in mt76x2u_ops ` * :ref:`STEP 14.3: Data path debugging ` * :ref:`Add prints in ieee80211_dataif_ops ` .. _barelinux_x86-64_wi-fi_netgear_A6210_1: .. tab-set:: .. tab-item:: Wi-Fi NetGear Driver * In this section, you are going to learn .. panels:: :container: container pb-4 :column: col-lg-12 p-2 :card: shadow * How to load netgear wifi linux driver for NetGear AC1200 A6210-100PES USB Wi-Fi Adapter .. _barelinux_x86-64_wi-fi_netgear_A6210_2: .. tab-set:: .. tab-item:: NetGear AC1200 A6210-100PES USB Wi-Fi Adapter .. image:: netgear_A6210_image.png :alt: Diagram :width: 500 :height: 300 .. _barelinux_x86-64_wi-fi_netgear_A6210_3: .. tab-set:: .. tab-item:: NetGear AC1200 A6210-100PES USB Wi-Fi Adapter features =============================== ======================================= Features =============================== ======================================= Hardware Interface USB 2.0 Compatible Devices Laptop, Desktop Data Link Protocol USB Data Transfer Rate 1200 Megabits Per Second Item Weight 0.09 Kilograms =============================== ======================================= .. _barelinux_x86-64_wi-fi_netgear_A6210_4: .. tab-set:: .. tab-item:: Version Info =============================== ======================================= # Version =============================== ======================================= Ubuntu Ubuntu 22.04 64 bit Linux Kernel 6.9.0 Wifi chip NetGear Chipset version NetGear A6210 =============================== ======================================= .. _barelinux_x86-64_wi-fi_netgear_A6210_5: .. tab-set:: .. tab-item:: Steps to load NetGear wifi driver .. _barelinux_x86-64_wi-fi_netgear_A6210_6: .. tab-set:: .. tab-item:: Video tutorial .. video:: netgear_A6210_video.webm :class: video-bordered :width: 900 :height: 600 .. _barelinux_x86-64_wi-fi_netgear_A6210_7: .. tab-set:: .. tab-item:: STEP 1: Check wifi chipset * Insert the wifi usb adapter to the usb port: * Check the wifi chipset by running the below command .. code-block:: shell :emphasize-lines: 2 test:~$ lsusb Bus 002 Device 011: ID 0846:9053 NetGear, Inc. A6210 Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 004: ID 413c:301a Dell Computer Corp. Dell MS116 Optical Mouse Bus 001 Device 002: ID 0461:0010 Primax Electronics, Ltd HP PR1101U / Primax PMX-KPR1101U Keyboard Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub .. _barelinux_x86-64_wi-fi_netgear_A6210_8: .. tab-set:: .. tab-item:: STEP 2: Check dmesg output * Check the dmesg output by running the below command: .. code-block:: shell test:~$ sudo dmesg [350373.768384] usb 2-5: USB disconnect, device number 10 [350376.064380] usb 2-5: new SuperSpeed USB device number 11 using xhci_hcd [350376.086666] usb 2-5: New USB device found, idVendor=0846, idProduct=9053, bcdDevice= 1.00 [350376.086679] usb 2-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [350376.086685] usb 2-5: Product: A6210 [350376.086690] usb 2-5: Manufacturer: NETGEAR [350376.086693] usb 2-5: SerialNumber: 100 .. _barelinux_x86-64_wi-fi_netgear_A6210_9: .. tab-set:: .. tab-item:: STEP 3: Stop existing Wireless Modules * Stop applications by running the commands below: .. code-block:: shell test@test-V520-15IKL:~/linux-6.9$ pwd /home/test/linux-6.9 test:~/linux-6.9$ sudo systemctl stop NetworkManager.service test:~/linux-6.9$ sudo killall wpa_supplicant hostapd test:~/linux-6.9$ ps -N | grep -i wpa_supplicant test:~/linux-6.9$ ps -N | grep -i hostapd * Run lsmod commands: .. code-block:: shell test:~/linux-6.9$ lsmod | grep -i 80211 mac80211 1712128 10 mt792x_lib,mt76,mt76x2e,mt76x0e,mt76x02_lib,mt76x02_usb,mt76x0_common,mt76x2u,mt76_connac_lib,mt76x0u lib80211_crypt_tkip 24576 0 lib80211_crypt_ccmp 16384 0 lib80211_crypt_wep 12288 0 libarc4 12288 3 lib80211_crypt_tkip,lib80211_crypt_wep,mac80211 lib80211 16384 3 lib80211_crypt_tkip,lib80211_crypt_wep,lib80211_crypt_ccmp cfg80211 1376256 7 mt76,mt76x02_lib,mac80211,mt76x02_usb,mt76x0_common,mt76x2_common,mt76_connac_lib test:~/linux-6.9$ lsmod | grep -i mt76 mt7663s 16384 0 mt7663u 16384 0 mt7663_usb_sdio_common 12288 2 mt7663u,mt7663s mt7615e 28672 0 mt7615_common 143360 4 mt7663_usb_sdio_common,mt7615e,mt7663u,mt7663s mt7603e 77824 0 mt76x2u 28672 0 mt76x2e 24576 0 mt76x2_common 28672 2 mt76x2e,mt76x2u mt76x0e 16384 0 mt76x0u 20480 0 mt76x0_common 53248 2 mt76x0e,mt76x0u mt76_connac_lib 106496 12 mt792x_lib,mt7921s,mt7996e,mt7663_usb_sdio_common,mt7921e,mt7915e,mt7615e,mt7663u,mt7615_common,mt7921_common,mt7663s,mt7921u mt76x02_usb 24576 2 mt76x2u,mt76x0u mt76x02_lib 114688 7 mt76x2e,mt76x0e,mt76x02_usb,mt76x0_common,mt76x2u,mt76x2_common,mt76x0u mt76_sdio 32768 2 mt7921s,mt7663s mt76_usb 40960 6 mt792x_usb,mt7663u,mt76x02_usb,mt76x2u,mt76x0u,mt7921u mt76 139264 25 mt792x_lib,mt7921s,mt7996e,mt7663_usb_sdio_common,mt792x_usb,mt76x2e,mt76x0e,mt7921e,mt76_usb,mt7915e,mt76x02_lib,mt7615e,mt7663u,mt76x02_usb,mt7615_common,mt7921_common,mt76x0_common,mt7663s,mt76_sdio,mt76x2u,mt76x2_common,mt76_connac_lib,mt7603e,mt76x0u,mt7921u mac80211 1712128 19 mt792x_lib,mt76,mt7996e,mt7663_usb_sdio_common,mt76x2e,mt76x0e,mt7915e,mt76x02_lib,mt7615e,mt7663u,mt76x02_usb,mt7615_common,mt7921_common,mt76x0_common,mt7663s,mt76x2u,mt76_connac_lib,mt7603e,mt76x0u cfg80211 1376256 12 mt76,mt7996e,mt7915e,mt76x02_lib,mac80211,mt76x02_usb,mt7615_common,mt7921_common,mt76x0_common,mt76x2_common,mt76_connac_lib,mt7603e * Now, remove drivers by executing rmmod command as shown below: .. code-block:: shell test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt7996e test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt7921u test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt7921s test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt7921e test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt7921-common test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt7915e test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt7663s test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt7663u test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt7663-usb-sdio-common test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt7615e test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt7615-common test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt7603e test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt76x2u test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt76x2e test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt76x2-common test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt76x0e test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt76x0u test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt76x0-common test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt792x-usb test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt792x-lib test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt76-connac-lib test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt76x02-usb test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt76x02-lib test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt76-sdio test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt76-usb test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mt76 test@test-V520-15IKL:~/linux-6.9$ sudo rmmod mac80211 test@test-V520-15IKL:~/linux-6.9$ sudo rmmod lib80211_crypt_tkip test@test-V520-15IKL:~/linux-6.9$ sudo rmmod lib80211_crypt_ccmp test@test-V520-15IKL:~/linux-6.9$ sudo rmmod lib80211_crypt_wep test@test-V520-15IKL:~/linux-6.9$ sudo rmmod libarc4 test@test-V520-15IKL:~/linux-6.9$ sudo rmmod lib80211 test@test-V520-15IKL:~/linux-6.9$ sudo rmmod cfg80211 .. _barelinux_x86-64_wi-fi_netgear_A6210_10: .. tab-set:: .. tab-item:: STEP 4: Compile Linux * Follow steps from the link : * Move to compiled Linux folder as shown below: .. code-block:: c $ cd /home/test/linux-6.9 .. _barelinux_x86-64_wi-fi_netgear_A6210_11: .. tab-set:: .. tab-item:: STEP 5: Compile Wireless Modules * Check current directory: .. code-block:: shell test@test-V520-15IKL:~/linux-6.9$ pwd /home/test/linux-6.9 * Start compilation for wireless folder: .. code-block:: shell test@test-V520-15IKL:~/linux-6.9$ sudo make -C . M=net/wireless/ make: Entering directory "/home/test/linux-6.9" CC [M] net/wireless/core.o LD [M] net/wireless/cfg80211.o CC [M] net/wireless/lib80211.o CC [M] net/wireless/lib80211_crypt_wep.o CC [M] net/wireless/lib80211_crypt_ccmp.o CC [M] net/wireless/lib80211_crypt_tkip.o MODPOST net/wireless/Module.symvers LD [M] net/wireless/cfg80211.ko LD [M] net/wireless/lib80211.ko LD [M] net/wireless/lib80211_crypt_wep.ko LD [M] net/wireless/lib80211_crypt_ccmp.ko LD [M] net/wireless/lib80211_crypt_tkip.ko make: Leaving directory "/home/test/linux-6.9" * Run make command for mac80211 folder: .. code-block:: shell test@test-V520-15IKL:~/linux-6.9$ sudo make -C . M=net/mac80211 make: Entering directory "/home/test/linux-6.9" CC [M] net/mac80211/main.o LD [M] net/mac80211/mac80211.o MODPOST net/mac80211/Module.symvers LD [M] net/mac80211/mac80211.ko make: Leaving directory "/home/test/linux-6.9" * Run make command for mt76 folder: .. code-block:: shell test@test-V520-15IKL:~/linux-6.9$ sudo make -C . M=drivers/net/wireless/mediatek/mt76 make: Entering directory "/home/test/linux-6.9" CC [M] drivers/net/wireless/mediatek/mt76/mt7603/main.o LD [M] drivers/net/wireless/mediatek/mt76/mt7603/mt7603e.o CC [M] drivers/net/wireless/mediatek/mt76/mt7615/mmio.o LD [M] drivers/net/wireless/mediatek/mt76/mt7615/mt7615e.o CC [M] drivers/net/wireless/mediatek/mt76/mt7915/mmio.o LD [M] drivers/net/wireless/mediatek/mt76/mt7915/mt7915e.o CC [M] drivers/net/wireless/mediatek/mt76/mt7996/mmio.o LD [M] drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.o MODPOST drivers/net/wireless/mediatek/mt76/Module.symvers CC [M] drivers/net/wireless/mediatek/mt76/mt76.mod.o LD [M] drivers/net/wireless/mediatek/mt76/mt76.ko CC [M] drivers/net/wireless/mediatek/mt76/mt76-usb.mod.o LD [M] drivers/net/wireless/mediatek/mt76/mt76-usb.ko CC [M] drivers/net/wireless/mediatek/mt76/mt76-sdio.mod.o LD [M] drivers/net/wireless/mediatek/mt76/mt76-sdio.ko CC [M] drivers/net/wireless/mediatek/mt76/mt76x02-lib.mod.o LD [M] drivers/net/wireless/mediatek/mt76/mt76x02-lib.ko CC [M] drivers/net/wireless/mediatek/mt76/mt76x02-usb.mod.o LD [M] drivers/net/wireless/mediatek/mt76/mt76x02-usb.ko CC [M] drivers/net/wireless/mediatek/mt76/mt76-connac-lib.mod.o LD [M] drivers/net/wireless/mediatek/mt76/mt76-connac-lib.ko CC [M] drivers/net/wireless/mediatek/mt76/mt792x-lib.mod.o LD [M] drivers/net/wireless/mediatek/mt76/mt792x-lib.ko CC [M] drivers/net/wireless/mediatek/mt76/mt792x-usb.mod.o LD [M] drivers/net/wireless/mediatek/mt76/mt792x-usb.ko CC [M] drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0u.mod.o LD [M] drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0u.ko CC [M] drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0e.mod.o LD [M] drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0e.ko CC [M] drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0-common.mod.o LD [M] drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0-common.ko CC [M] drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2-common.mod.o LD [M] drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2-common.ko CC [M] drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2e.mod.o LD [M] drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2e.ko CC [M] drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2u.mod.o LD [M] drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2u.ko make: Leaving directory "/home/test/linux-6.9" .. _barelinux_x86-64_wi-fi_netgear_A6210_12: .. tab-set:: .. tab-item:: STEP 6: Check for ".ko" files * Run find command to search for ".ko" files in ./net/wireless directory: .. code-block:: shell test@test-V520-15IKL:~/linux-6.9$ find ./net/wireless/ -iname "*.ko" -print ./net/wireless/lib80211_crypt_wep.ko ./net/wireless/cfg80211.ko ./net/wireless/lib80211_crypt_ccmp.ko ./net/wireless/lib80211.ko ./net/wireless/lib80211_crypt_tkip.ko * Run find command to search for ".ko" files in ./net/mac80211 directory: .. code-block:: shell test@test-V520-15IKL:~/linux-6.9$ find ./net/mac80211/ -iname "*.ko" -print ./net/mac80211/mac80211.ko * Run find command to search for ".ko" files in ./drivers/net/wireless/mediatek/mt76/ directory: .. code-block:: shell test@test-V520-15IKL:~/linux-6.9$ find ./drivers/net/wireless/mediatek/mt76/ -iname "*.ko" -print ./drivers/net/wireless/mediatek/mt76/mt7921/mt7921-common.ko ./drivers/net/wireless/mediatek/mt76/mt7921/mt7921u.ko ./drivers/net/wireless/mediatek/mt76/mt7921/mt7921s.ko ./drivers/net/wireless/mediatek/mt76/mt7921/mt7921e.ko ./drivers/net/wireless/mediatek/mt76/mt7603/mt7603e.ko ./drivers/net/wireless/mediatek/mt76/mt76-sdio.ko ./drivers/net/wireless/mediatek/mt76/mt76x02-lib.ko ./drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0-common.ko ./drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0e.ko ./drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0u.ko ./drivers/net/wireless/mediatek/mt76/mt76.ko ./drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2e.ko ./drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2-common.ko ./drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2u.ko ./drivers/net/wireless/mediatek/mt76/mt7615/mt7615e.ko ./drivers/net/wireless/mediatek/mt76/mt7615/mt7663s.ko ./drivers/net/wireless/mediatek/mt76/mt7615/mt7663-usb-sdio-common.ko ./drivers/net/wireless/mediatek/mt76/mt7615/mt7615-common.ko ./drivers/net/wireless/mediatek/mt76/mt7615/mt7663u.ko ./drivers/net/wireless/mediatek/mt76/mt792x-usb.ko ./drivers/net/wireless/mediatek/mt76/mt76-connac-lib.ko ./drivers/net/wireless/mediatek/mt76/mt792x-lib.ko ./drivers/net/wireless/mediatek/mt76/mt76-usb.ko ./drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko ./drivers/net/wireless/mediatek/mt76/mt7915/mt7915e.ko ./drivers/net/wireless/mediatek/mt76/mt76x02-usb.ko .. _barelinux_x86-64_wi-fi_netgear_A6210_13: .. tab-set:: .. tab-item:: STEP 7: Check for ".zst" file, if present remove that file * Remove the following .zst files .. code-block:: shell test@test-V520-15IKL:~/linux-6.9$ find /lib/modules/6.9.0/kernel/net/wireless/ -iname "*.ko.zst*" -print /lib/modules/6.9.0/kernel/net/wireless/lib80211_crypt_wep.ko.zst /lib/modules/6.9.0/kernel/net/wireless/lib80211_crypt_ccmp.ko.zst /lib/modules/6.9.0/kernel/net/wireless/lib80211.ko.zst /lib/modules/6.9.0/kernel/net/wireless/cfg80211.ko.zst /lib/modules/6.9.0/kernel/net/wireless/lib80211_crypt_tkip.ko.zst test@test-V520-15IKL:~/linux-6.9$ find /lib/modules/6.9.0/kernel/net/mac80211/ -iname "*.ko.zst*" -print /lib/modules/6.9.0/kernel/net/mac80211/mac80211.ko.zst test@test-V520-15IKL:~/linux-6.9$ find /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/ -iname "*.ko.zst*" -print /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt76-sdio.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt7921/mt7921u.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt7921/mt7921-common.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt7921/mt7921e.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt7921/mt7921s.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt76-usb.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt76-connac-lib.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0u.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0-common.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0e.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt76x02-usb.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2u.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2e.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2-common.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7663s.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7663-usb-sdio-common.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7663u.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7615e.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt7615/mt7615-common.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt792x-usb.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt792x-lib.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt76.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt7915/mt7915e.ko.zst /lib/modules/6.9.0/kernel/drivers/net/wireless/mediatek/mt76/mt76x02-lib.ko.zst .. _barelinux_x86-64_wi-fi_netgear_A6210_14: .. tab-set:: .. tab-item:: STEP 8: Restart your system * You may restart your system using the command below: .. code-block:: c $ reboot .. _barelinux_x86-64_wi-fi_netgear_A6210_15: .. tab-set:: .. tab-item:: STEP 9: Change directory to compiled kernel path * Repeat Step 3 .. code-block:: c $ cd /home/test/linux-6.9 * Repeat Step 5 .. _barelinux_x86-64_wi-fi_netgear_A6210_16: .. tab-set:: .. tab-item:: STEP 10: Clear old kernel logs .. code-block:: shell test@test-V520-15IKL:~/linux-6.9$ sudo dmesg -c .. _barelinux_x86-64_wi-fi_netgear_A6210_17: .. tab-set:: .. tab-item:: STEP 11: Insert the modules .. code-block:: c sudo insmod ./net/wireless/cfg80211.ko sudo insmod ./net/wireless/lib80211.ko sudo insmod ./lib/crypto/libarc4.ko sudo insmod ./net/wireless/lib80211_crypt_wep.ko sudo insmod ./net/wireless/lib80211_crypt_ccmp.ko sudo insmod ./net/wireless/lib80211_crypt_tkip.ko sudo insmod ./net/mac80211/mac80211.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt76.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt76-usb.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt76-sdio.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt76x02-lib.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt76x02-usb.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt76-connac-lib.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt792x-lib.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt792x-usb.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0-common.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0u.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0e.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2-common.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2e.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt76x2/mt76x2u.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt7603/mt7603e.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt7615/mt7615-common.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt7615/mt7615e.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt7615/mt7663-usb-sdio-common.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt7615/mt7663u.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt7615/mt7663s.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt7915/mt7915e.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt7921/mt7921-common.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt7921/mt7921e.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt7921/mt7921s.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt7921/mt7921u.ko sudo insmod drivers/net/wireless/mediatek/mt76/mt7996/mt7996e.ko .. _barelinux_x86-64_wi-fi_netgear_A6210_18: .. tab-set:: .. tab-item:: STEP 12: Check the loaded modules .. code-block:: shell test@test-V520-15IKL:~/linux-6.9$ lsmod Module Size Used by mt7996e 200704 0 mt7921u 16384 0 mt7921s 20480 0 mt7921e 20480 0 mt7921_common 81920 3 mt7921s,mt7921e,mt7921u mt7915e 212992 0 mt7663s 16384 0 mt7663u 16384 0 mt7663_usb_sdio_common 12288 2 mt7663u,mt7663s mt7615e 28672 0 mt7615_common 143360 4 mt7663_usb_sdio_common,mt7615e,mt7663u,mt7663s mt7603e 77824 0 mt76x2u 28672 0 mt76x2e 24576 0 mt76x2_common 28672 2 mt76x2e,mt76x2u mt76x0e 16384 0 mt76x0u 20480 0 mt76x0_common 53248 2 mt76x0e,mt76x0u mt792x_usb 16384 1 mt7921u mt792x_lib 73728 5 mt7921s,mt792x_usb,mt7921e,mt7921_common,mt7921u mt76_connac_lib 106496 12 mt792x_lib,mt7921s,mt7996e,mt7663_usb_sdio_common,mt7921e,mt7915e,mt7615e,mt7663u,mt7615_common,mt7921_common,mt7663s,mt7921u mt76x02_usb 24576 2 mt76x2u,mt76x0u mt76x02_lib 114688 7 mt76x2e,mt76x0e,mt76x02_usb,mt76x0_common,mt76x2u,mt76x2_common,mt76x0u mt76_sdio 32768 2 mt7921s,mt7663s mt76_usb 40960 6 mt792x_usb,mt7663u,mt76x02_usb,mt76x2u,mt76x0u,mt7921u mt76 139264 25 mt792x_lib,mt7921s,mt7996e,mt7663_usb_sdio_common,mt792x_usb,mt76x2e,mt76x0e,mt7921e,mt76_usb,mt7915e,mt76x02_lib,mt7615e,mt7663u,mt76x02_usb,mt7615_common,mt7921_common,mt76x0_common,mt7663s,mt76_sdio,mt76x2u,mt76x2_common,mt76_connac_lib,mt7603e,mt76x0u,mt7921u mac80211 1712128 19 mt792x_lib,mt76,mt7996e,mt7663_usb_sdio_common,mt76x2e,mt76x0e,mt7915e,mt76x02_lib,mt7615e,mt7663u,mt76x02_usb,mt7615_common,mt7921_common,mt76x0_common,mt7663s,mt76x2u,mt76_connac_lib,mt7603e,mt76x0u lib80211_crypt_tkip 24576 0 lib80211_crypt_ccmp 16384 0 lib80211_crypt_wep 12288 0 libarc4 12288 3 lib80211_crypt_tkip,lib80211_crypt_wep,mac80211 lib80211 16384 3 lib80211_crypt_tkip,lib80211_crypt_wep,lib80211_crypt_ccmp cfg80211 1376256 12 mt76,mt7996e,mt7915e,mt76x02_lib,mac80211,mt76x02_usb,mt7615_common,mt7921_common,mt76x0_common,mt76x2_common,mt76_connac_lib,mt7603e .. _barelinux_x86-64_wi-fi_netgear_A6210_19: .. tab-set:: .. tab-item:: STEP 13: Check for Wi-Fi interface name .. code-block:: shell test@test-V520-15IKL:~/linux-6.9$ iwconfig lo no wireless extensions. enp1s0 no wireless extensions. wlx44a56e63a637 IEEE 802.11 ESSID:off/any Mode:Managed Access Point: Not-Associated Tx-Power=3 dBm Retry short limit:7 RTS thr:off Fragment thr:off Encryption key:off Power Management:on .. _barelinux_x86-64_wi-fi_netgear_A6210_20: .. tab-set:: .. tab-item:: STEP 14: Let us do Wireless driver development ! .. _barelinux_x86-64_wi-fi_netgear_A6210_21: .. tab-set:: .. tab-item:: STEP 14.1: Init path debugging .. _barelinux_x86-64_wi-fi_netgear_A6210_22: .. tab-set:: .. tab-item:: Add prints in "module_init" and "module_exit" functions in files mentioned below * Open below files with vim and add prints in module_init and module_exit fucntions: .. code-block:: c test:linux-6.9$ pwd /home/test/linux-6.9 ./net/wireless/lib80211_crypt_wep.c ./net/wireless/lib80211.c ./net/wireless/lib80211_crypt_tkip.c ./net/wireless/lib80211_crypt_ccmp.c ./net/wireless/core.c ./net/mac80211/main.c ./drivers/net/wireless/mediatek/mt76/mt7603/main.c ./drivers/net/wireless/mediatek/mt76/mt7615/mmio.c ./drivers/net/wireless/mediatek/mt76/mt7996/mmio.c ./drivers/net/wireless/mediatek/mt76/mt7915/mmio.c .. _barelinux_x86-64_wi-fi_netgear_A6210_23: .. tab-set:: .. tab-item:: STEP 14.2: Control path debugging .. _barelinux_x86-64_wi-fi_netgear_A6210_24: .. tab-set:: .. tab-item:: Add prints in nl80211_small_ops * Open nl80211.c file with vim, add prints in all .doit functions in nl80211_small_ops .. code-block:: c test:linux-6.9/net/wireless$ vi nl80211.c static const struct genl_small_ops nl80211_small_ops[] = { { .cmd = NL80211_CMD_SET_WIPHY, .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .doit = nl80211_set_wiphy, .flags = GENL_UNS_ADMIN_PERM, }, { .cmd = NL80211_CMD_GET_INTERFACE, .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .doit = nl80211_get_interface, .dumpit = nl80211_dump_interface, /* can be retrieved by unprivileged users */ .internal_flags = IFLAGS(NL80211_FLAG_NEED_WDEV), }, { .cmd = NL80211_CMD_SET_INTERFACE, .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .doit = nl80211_set_interface, .flags = GENL_UNS_ADMIN_PERM, .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV | NL80211_FLAG_NEED_RTNL), }, .. _barelinux_x86-64_wi-fi_netgear_A6210_25: .. tab-set:: .. tab-item:: Add prints in mac80211_config_ops * Open cfg.c file with vim, add prints in all functions in mac80211_config_ops .. code-block:: c test:linux-6.9/net/mac80211$ vi cfg.c const struct cfg80211_ops mac80211_config_ops = { .add_virtual_intf = ieee80211_add_iface, .del_virtual_intf = ieee80211_del_iface, .change_virtual_intf = ieee80211_change_iface, .start_p2p_device = ieee80211_start_p2p_device, .stop_p2p_device = ieee80211_stop_p2p_device, .. _barelinux_x86-64_wi-fi_netgear_A6210_26: .. tab-set:: .. tab-item:: Add prints in mt76x2u_ops * Open usb_main.c file with vim, add prints in all functions in mt76x2u_ops .. code-block:: c test:linux-6.9/drivers/net/wireless/mediatek/mt76/mt76x2$ vi usb_main.c const struct ieee80211_ops mt76x2u_ops = { .add_chanctx = ieee80211_emulate_add_chanctx, .remove_chanctx = ieee80211_emulate_remove_chanctx, .change_chanctx = ieee80211_emulate_change_chanctx, .switch_vif_chanctx = ieee80211_emulate_switch_vif_chanctx, .tx = mt76x02_tx, .start = mt76x2u_start, .stop = mt76x2u_stop, .add_interface = mt76x02_add_interface, .. _barelinux_x86-64_wi-fi_netgear_A6210_27: .. tab-set:: .. tab-item:: STEP 14.3: Data path debugging .. _barelinux_x86-64_wi-fi_netgear_A6210_28: .. tab-set:: .. tab-item:: Add prints in ieee80211_dataif_ops * Open iface.c file with vim, add prints in all functions in ieee80211_dataif_ops .. code-block:: c test:linux-6.9/net/mac80211$ vi ./iface.c static const struct net_device_ops ieee80211_dataif_ops = { .ndo_open = ieee80211_open, .ndo_stop = ieee80211_stop, .ndo_uninit = ieee80211_uninit, .ndo_start_xmit = ieee80211_subif_start_xmit, .ndo_set_rx_mode = ieee80211_set_multicast_list, .ndo_set_mac_address = ieee80211_change_mac, .ndo_get_stats64 = ieee80211_get_stats64, .ndo_setup_tc = ieee80211_netdev_setup_tc, };