How to use firmware search path? (e.g. `/mnt/data/supervisor/share/firmware`)

Hello!

According to add fw for dvb tuner · Issue #1157 · home-assistant/operating-system · GitHub, it is possible to add firmware search paths as boot parameter in cmdline.txt, e.g. for additional firmware:

There is even a option to specify a custom search path, which is what I utilized.
The path can be specified using a kernel boot parameter. I my case I placed the firmware files in the /share folder exposed to the supervisor, specifically /share/firmware.
Within the underlying operating system the path translates to /mnt/data/supervisor/share/firmware. This path is what is need for the kernel parameter. firmware_class.path=/mnt/data/supervisor/share/firmware/ must be added to cmdline.txt on the PI SD card.
On the next boot the HAOS will happily load the firmware from the specified location.

However, my /mnt path is empty, and when I create the whole path /mnt/data/supervisor/share/firmware (with sudo via unrestricted terminal), after reboot, /mnt is empty again.

I am running HA on a Raspberry Pi 4 with the default installation.

What am I missing? Thanks a lot for your help! :+1:

## System Information

version | core-2023.5.3
-- | --
installation_type | Home Assistant OS
dev | false
hassio | true
docker | true
user | root
virtualenv | false
python_version | 3.10.11
os_name | Linux
os_version | 6.1.21-v8
arch | aarch64

Hello! Is there really nobody with a hint for me?

Anybody, who uses a similar setup like me and could explain how to set up that path so it survives a reboot? Thank you so much! :+1:

My current setup:

Home Assistant 2023.5.4
Supervisor 2023.04.1
Operating System 10.1
Frontend 20230503.3 - latest

Has really nobody a hint for my question?

/mnt/data/supervisor/share is mapped to /share in typical addons. E.g. you can use the Samba add-on to access that location. You would need to add firmware directory in the share folder, and store firmwares in there.

What firmware are you missing?

My problem is that this folder structure does not exist:

Welcome to the Home Assistant command line.

System information
  IPv4 addresses for eth0:  192.168.11.55/24
  IPv6 addresses for eth0:  xxxx::xxxx:xxxx:xxxx:xxxx/64
  IPv4 addresses for wlan0:

  OS Version:               Home Assistant OS 10.3
  Home Assistant Core:      2023.7.2

  Home Assistant URL:       http://homeassistant.local:8123
  Observer URL:             http://homeassistant.local:4357
➜  ~ sudo su
➜  ~ cd /mnt
➜  /mnt ls -al
total 8
drwxr-xr-x    2 root     root          4096 Jun 14 17:05 .
drwxr-xr-x    1 root     root          4096 Jul 15 14:30 ..

As you can see, /mnt is empty. I tried to create the path but after reboot it’s gone.

@agners
Do you know how I can make this path persistent?

I need these FW files:

PS:
I downloaded (as root) the 3 FW files to /share/. How can I make HA use them for tvheadend without rebooting?

@agners
Sorry to bother you again, but I just want to ensure that my question was not silly. Was it? :wink:

Really no hints about this? :frowning:

Hello! Am I the only one with this problem? How do other people get firmware files loaded at boot time and have the path and firmware files persistent to stay there after a reboot?

I am waiting for my question to get answered :sweat_smile:

Currently firmware loading in HAOS comes with caveats because we mount the data partition at a later time.

For now, probably the best way to go in your case is to use a Supervised installation (using Debian).

Hello!

As I thought that my problem/ question goes beyond how to store firmware files, I opened a new thread:
https://community.home-assistant.io/t/how-to-persistently-store-fw-files-in-mnt-haos-10-5

However, that post was closed by @tom_l who kindly reminded me that there was no need to start a new topic and that I should just bump the other one (i.e. this one) by commenting on it. And that is what I do hereby: bump :slight_smile:

Along with a copy of my text from the closed thread:

Is there some advice or guidance how to persistently store FW [EDIT: or any other] files in /mnt?

Whatever I store there, it does not survive a reboot, i.e. /mnt is always empty after a reboot.

Therefore, I cannot store and load FW files via kernel boot parameter, but I need these FW files for a USB DVB-T2 stick, attached to my Raspberry Pi 4 running this:

Home Assistant 2023.8.3
Supervisor 2023.08.1
Operating System 10.5
Frontend 20230802.1 - latest

Thanks for your help! :+1:

PS1: Seeing the warning about supervised installations for their complexity and problems for non-experts (like me), I do not want to change my current (Home Assistant OS) installation. :wink:

PS2: Sorry that I don’t understand this, but am I running supervised? It’s not clear from what I read:

Home Assistant 2023.8.3
Supervisor 2023.08.1
Operating System 10.5
Frontend 20230802.1 - latest

My HA installation follows the Home Assistant OS guidance.

The reason for my question is this:

PS3 (sorry!): As I don’t have /usr/share/hassio/, I assume that I ran hassio but am back to square one, as I still don’t see a way to store anything unter /mnt. And I use the “Advanced SSH & Web Terminal” addon with the secure mode disabled, i.e. I can ssh with full control (AFAIK).

If you followed the HA OS instructions, that is what you are running. HA OS uses the Supervisor also.

Yes, thank you. I should be able to create a sub-folder and place files under /mnt/, which should survive a reboot, but this is not the case.

So I am still interested to learn if HA users running it by standard installation (like I do) have an idea how to store something under /mnt/ (or actually elsewhere, if another path could be used with the boot parameters - see below) that

  • a) survives a reboot, and
  • b) could be used as path with the boot parameters

This is what I tried:

I flashed the HAOS image for the RPi 4 to a nano SD card (updated HA meanwhile) and opened cmdline.txt in an editor that shows just this one line:

dwc_otg.lpm_enable=0 console=tty1 usb-storage.quirks=174c:55aa:u,2109:0715:u,152d:0578:u,152d:0579:u,152d:1561:u,174c:0829:u,14b0:0206:u

I appended the path (in bold below), so the cmdline.txt afterwards looks as follows (one line):

dwc_otg.lpm_enable=0 console=tty1 usb-storage.quirks=174c:55aa:u,2109:0715:u,152d:0578:u,152d:0579:u,152d:1561:u,174c:0829:u,14b0:0206:u firmware_class.path=/mnt/data/supervisor/share/firmware/

This is what that folder currently looks like (after I just stored the files there - but everything under /mnt/ will be gone after a reboot):

➜  / ls -al /mnt/data/supervisor/share/firmware
total 24
drwxr-xr-x    2 root     root          4096 Aug 24 15:10 .
drwxr-xr-x    3 root     root          4096 Aug 24 15:10 ..
-rw-r--r--    1 root     root          2728 Aug 24 15:08 dvb-demod-si2168-02.fw
-rw-r--r--    1 root     root          6919 Aug 24 15:08 dvb-demod-si2168-b40-01.fw
-rw-r--r--    1 root     root          2169 Aug 24 15:08 dvb-usb-it9303-01.fw

The whole problem is that the folders/files under /mnt/ do not survive a reboot. Any ideas?

Is it really impossible to achieve what I want?

Still no solution for this problem? (which I am surely not the only one complaining about. :wink: )

This is really disappointing. :unamused:

Hey @7wells ,

I just ran into a similar issue with a wifi firmware for a intel wifi card.

When you access the device via terminal or ssh, you’re only accessing it from inside a docker container.
You have to follow this tutorial to allow access to the underlying device:

I’ve put my firmware to /mnt/boot/firmware/<FIRMWARE FILE> and then set the firmware_class.path=/mnt/boot/firmware/ .

That way my wifi card was available.

Hope that helps.

Dom

1 Like

Hi @codewithpassion - welcome to the forum and thanks for your reply! :blush:

I’m not using the standard HA ssh addon but the Advanced SSH & Web Terminal with save mode disabled. I thought that thus I have access as root - see login etc.:

  OS Version:               Home Assistant OS 11.1
  Home Assistant Core:      2023.11.0

  Home Assistant URL:       http://homeassistant.local:8123
  Observer URL:             http://homeassistant.local:4357
➜  ~ sudo su
➜  ~ cd /
➜  / ll
total 120K
drwxr-xr-x    2 root     root        4.0K Oct 15 13:04 addons
drwxr-xr-x    2 root     root        4.0K Nov  3 11:18 backup
drwxr-xr-x    1 root     root        4.0K Oct 13 20:11 bin
drwxr-xr-x    2 root     root       12.0K May  5  2023 command
drwxr-xr-x   11 root     root        4.0K Nov  3 18:08 config
drwxr-xr-x    3 root     root        4.0K Oct 30 11:16 data
drwxr-xr-x   17 root     root        4.0K Apr  4  2023 dev
drwxr-xr-x    1 root     root        4.0K Oct 30 11:16 etc
drwxr-xr-x    1 root     root        4.0K Oct 30 11:16 home
-rwxr-xr-x    1 root     root         907 May  5  2023 init
drwxr-xr-x    1 root     root        4.0K Oct 13 20:25 lib
drwxr-xr-x    2 root     root        4.0K Oct 13 20:10 lib64
drwxr-xr-x    2 root     root        4.0K Oct 15 13:04 media
drwxr-xr-x    2 root     root        4.0K Sep 28 13:23 mnt
drwxr-xr-x    2 root     root        4.0K Sep 28 13:23 opt
drwxr-xr-x    1 root     root        4.0K May  5  2023 package
dr-xr-xr-x  349 root     root           0 Oct 30 11:16 proc
drwxr-xr-x    1 root     root        4.0K Nov  3 18:35 root
drwxr-xr-x    1 root     root        4.0K Oct 30 11:16 run
drwxr-xr-x    1 root     root        4.0K Oct 13 20:25 sbin
drwxr-xr-x    2 root     root        4.0K Oct 15 13:04 share
drwxr-xr-x    2 root     root        4.0K Sep 28 13:23 srv
drwxr-xr-x    2 root     root        4.0K Oct 15 13:04 ssl
dr-xr-xr-x   12 root     root           0 Jan  1  1970 sys
drwxrwxrwt    1 root     root        4.0K Nov  3 18:35 tmp
drwxr-xr-x    1 root     root        4.0K Oct 15 14:21 usr
drwxr-xr-x    1 root     root        4.0K Oct 15 14:21 var
➜  /

Is this not the right way and/or does this not offer me enough privileges to do want I want to achieve?

Did you have to create the boot sub-folder under /mnt/? In my case, folder /mnt/ is empty. However, when I create the /boot/firmware/ sub-folders and store the firmware files there and restart the Raspberry Pi 4 that runs HA, the /mnt/ folder is again empty. Maybe I don’t have all the necessary privileges after all. :thinking:

EDIT:
These 2 commands work and give me plenty of log stuff:

# Supervisor logs
➜  ~ docker logs hassio_supervisor

# Home Assistant logs
➜  ~ docker logs homeassistant

However, this one does not work:

# Logs from the supervisor service on the Host OS
➜  ~ journalctl -f -u hassos-supervisor.service
zsh: command not found: journalctl

Is this, because I have not follows that guide for developers, or is there maybe another problem?

In any case, it puzzles me a lot that we need to take actions that are explicitly only for developers when we simply want to add firmware files to make devices work that we plug into our HA-running systems.

By the way, I installed HA the “recommended” way, i.e. I followed the the Raspberry Pi guide to install Home Assistant Operating System.

This might be helpful, too, if ssh access via port 22222 is required (as it seems to be the case here):

1 Like