I have purchased 2 of the MM8108 evaluation kits as listed in the title. My goal is to set up one of the kits as an access point, which I have done, and then connect to it with a station. I was successful in connecting the station to the access point using the router and USB from the kit.
However, my end goal is connecting the USB directly to a raspberry pi 3 or 4 and then connecting to the access point as a station without needing the second router from the kit. Is this possible? I havenāt had any luck so far.
I want to do this without needing to create a new image on the pi, so I can keep my existing code that I have running on the pi, and just use the USB to connect to the HaLow wifi.
When I plug the USB into the pi, it does not light up but my pi can recognize it with lsusb. I was told that when I plug in the USB it would present itself as an ethernet connection to my pi and I would be able to configure it on the pi by typing the ip address into a browser, but I have not seen that happen.
Do I need to add any software or drivers to configure the USB for the pi? If anyone could help me out with this, I would really appreciate it!
Which ones and where are they? How do you install them?
The answer to this depends on what operating system youāre using. The easy path is using our OpenWrt system, but it sounds like you want to add them to whatever youāre running at the moment. What is that? Raspbian?
Iām running on Raspberry Pi OS 12 Bookworm, 6.12.25+rpt-rpi-v8. And yes I donāt want to overwrite what I currently have. Does OpenWrt only reimage the pi completely? How would you add on to an existing image?
Thanks for pointing this out! I was able to use OpenWrt on my Pi4 and completely reimage it with the help of your post. But what I want is to not require a complete reimaging of the pi. I want to take an existing image and add in the MM8108 functionality to connect to a HaLow access point. Anyone know how to do this?
This is doable, but it may require you to patch your kernel.
I have some instructions for bringing this up on a Raspberry Pi 5 running Raspberry Pi OS and I can share those instructions shortly.
In the meantime, take a look at Wi-Fi HaLow Driver | Linux Porting Guide App Note 24 for the compilation instructions of the Morse Micro driver. You can acquire kernel source to target the driver with sudo apt install linux-headers-$(uname -r). This should install the headers, and kbuild into /usr/src/linux-headers-$(uname -r).
You can then point the driver compilation to this as the KERNEL_SRC.
If you find you do need to patch the kernel (required for 1.15, possibly not required for 1.16), then youāll need to clone the Linux source to apply the patches. You can update the kernel without affecting your rootfs.
Weāre looking to deliver a dkms package in the future, when time allows.
Thank you for your reply. I still have not been successful in getting this to work.
When you say patching the kernel, are you expecting to point the driver compilation towards the clone of the Linux source after the patches are applied? I am still confused on how patching the kernel works and what version the pi needs to be.
I also have a problem of the Morse Micro linux repo being too large to clone onto my pi. I am trying to put it onto a CM3+ running 6.12.25+rpt-rpi-v8. So I was trying to compile the driver on my pc and then transfer it to the CM3+. I cloned the morse linux repo and ran through all the patch files. But making the driver is giving me errors still. How exactly is the driver supposed to be built? Could you give me steps to build it on a pc so that I could transfer it to the CM3+?
I also tried building it on a raspberry pi 4 that was running 6.1.21-v8+. I was able to clone the morse linux and patch it. Then I built it, went through the firmware installs, modprobed the drivers, ran the wpa_supplicant, but the usb MM8108 was still not lighting up. The usb was recognized and the drivers were being registered.
I really need to get this up and working soon, so any help you could provide would be greatly appreciated!
Can you give us more information about this one? Itās not clear at what point the bring-up went wrong here. Did wlan0 appear and did you set it up? What logs did wpa_supplicant emit?
I cloned the morse linux repo and ran through all the patch files. But making the driver is giving me errors still.
What errors are you getting?
Other thoughts:
if you build things on your PC, you will need to cross compile the kernel/driver. Iām not sure if youāre doing that.
you mention cloning the Linux repo. If you follow Arienās suggestion, you should not need to do this, but instead be installing the Linux source from the raspbian package. The only repo to clone is the morse_driver. However, you may need to look at the Morse Linux repo as a reference for what patches to apply.
I left a list of steps I tried below. I built the MorseMicro linux on my pc and copied the patch files over. The driver compiles against the clone of the raspberry pi linux, but not when running: make KERNEL_SRC=/usr/src/linux-headers-$(uname -r) CONFIG_WLAN_VENDOR_MORSE=m CONFIG_MORSE_USER_ACCESS=y CONFIG_MORSE_VENDOR_COMMAND=y
Are you supposed to apply the patches to the kernel directly? How do you do that? Canāt you only apply patches to a git repository?
If you could edit this or list out the steps that would be great.
cd ~/halow_build/rpi_kernel_6.12
git am ~/halow_patches/*.patch
git am --show-current-patch=diff
git add -u
git am ācontinue
keep adding space in comment and deleting, add each time
sudo apt install raspberrypi-kernel-headers
cd /usr/src
cp /usr/src/linux-headers-6.12.25+rpt-rpi-v8/.config ~/halow_build/rpi_kernel_6.12/.config
cd ~/halow_build/rpi_kernel_6.12
make oldconfig
make prepare
make -j$(nproc)
sudo make modules_install
sudo make install
sudo reboot
remake drivers:
make KERNEL_SRC=/usr/src/linux-headers-$(uname -r) CONFIG_WLAN_VENDOR_MORSE=m CONFIG_MORSE_USER_ACCESS=y CONFIG_MORSE_VENDOR_COMMAND=y
When compiling the morse_driver on a patched 6.12.47+rpt-rpi-v8 kernel with morse_driver 1.16.4 running:
make KERNEL_SRC=/lib/modules/$(uname -r)/build CONFIG_WLAN_VENDOR_MORSE=m CONFIG_MORSE_USER_ACCESS=y CONFIG_MORSE_VENDOR_COMMAND=y CONFIG_MORSE_USB=y CONFIG_MORSE_SDIO=n
Here are some of the errors:
make MORSE_VERSION=ā0-rel_1_16_4_2025_Sep_18ā -C /lib/modules/6.12.47+rpt-rpi-v8/build M=/home/pi/halow_build/morse_driver
make[1]: Entering directory ā/usr/src/linux-headers-6.12.47+rpt-rpi-v8ā
CC [M] /home/pi/halow_build/morse_driver/dot11ah/main.o
CC [M] /home/pi/halow_build/morse_driver/dot11ah/debug.o
CC [M] /home/pi/halow_build/morse_driver/dot11ah/tx_11n_to_s1g.o
CC [M] /home/pi/halow_build/morse_driver/dot11ah/rx_s1g_to_11n.o
CC [M] /home/pi/halow_build/morse_driver/dot11ah/ie.o
/home/pi/halow_build/morse_driver/dot11ah/ie.c: In function āmorse_dot11_insert_ordered_ies_from_ies_maskā:
/home/pi/halow_build/morse_driver/dot11ah/ie.c:529:13: error: too few arguments to function āieee80211_is_s1g_short_beaconā
529 | if (ieee80211_is_s1g_short_beacon(frame_control) ||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/src/linux-headers-6.12.47+rpt-common-rpi/include/net/mac80211.h:20,
from /home/pi/halow_build/morse_driver/dot11ah/ie.c:11:
/usr/src/linux-headers-6.12.47+rpt-common-rpi/include/linux/ieee80211.h:4870:20: note: declared here
4870 | static inline bool ieee80211_is_s1g_short_beacon(__le16 fc, const u8 *variable,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/pi/halow_build/morse_driver/dot11ah/s1g_channels.c: In function āmorse_dot11ah_ignore_channelā:
/home/pi/halow_build/morse_driver/dot11ah/s1g_channels.c:724:70: error: āIEEE80211_CHAN_IGNOREā undeclared (first use in this function); did you mean āIEEE80211_CHAN_NO_HEā?
724 | __mors_s1g_map->s1g_channels[ch].ch.flags |= IEEE80211_CHAN_IGNORE;
| ^~~~~~~~~~~~~~~~~~~~~
| IEEE80211_CHAN_NO_HE
/home/pi/halow_build/morse_driver/dot11ah/s1g_channels.c:724:70: note: each undeclared identifier is reported only once for each function it appears in
/home/pi/halow_build/morse_driver/dot11ah/s1g_channels.c: In function āmorse_dot11ah_fill_channel_listā:
/home/pi/halow_build/morse_driver/dot11ah/s1g_channels.c:756:43: error: āIEEE80211_CHAN_IGNOREā undeclared (first use in this function); did you mean āIEEE80211_CHAN_NO_HEā?
756 | if (map_entry->ch.flags & IEEE80211_CHAN_IGNORE)
| ^~~~~~~~~~~~~~~~~~~~~
| IEEE80211_CHAN_NO_HE
Are there manual edits that can fix these? Is there a certain branch that works with bookworm OS?
Looks like itās only scanning in traditional wifi frequencies rather than the sub 1 GHz HaLow band. Morse_cli is also having an issue. I am trying it on 1.16.4.
Is there a better example wpa_supplicant.conf file example than the one in the guide?
This is my /etc/wpa_supplicant/wpa_supplicant_s1g.conf file:
āIEEE80211_CHAN_IGNOREā undeclared (first use in this function); did you mean āIEEE80211_CHAN_NO_HEā?
724 | __mors_s1g_map->s1g_channels\[ch\].ch.flags |= IEEE80211_CHAN_IGNORE;
| ^~~~~~~~~~~~~~~~~~~~~
| IEEE80211_CHAN_NO_HE
I wasnāt sure how to fix this so I changed it to IEEE80211_CHAN_DISABLED. But it hasnāt fully worked yet so if someone knows a better solution let me know.
Then I compiled with:
make KERNEL_SRC=/lib/modules/$(uname -r)/build CONFIG_WLAN_VENDOR_MORSE=m CONFIG_MORSE_USER_ACCESS=y CONFIG_MORSE_VENDOR_COMMAND=y CONFIG_MORSE_USB=y CONFIG_MORSE_SDIO=n
@ajudge Iām also trying to do the same, but Iām using an NVIDIA Jetson Orin Nano. Is there any documentation on how to integrate the MM8108-EKH19 USB directly with the Jetson and connect it to an already set-up access point?