The Linux firmware sources are being developed in a Git repository, so it's easy to go back in time for all older releases of the firmware.
- Install git
Clone the repository (cgit web page):
git clone http://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
cd into the repository:
Locate the firmware for your device as per the iwlwifi development page (scroll down), e.g.
find . -name "iwlwifi*"
Notice that for some devices multiple versions are kept as separate files, for the compatibility of older kernel versions.
Have a look at the history of the file:
git log iwlwifi-3945-2.ucode
shows (removed some irrelevant lines):
Date: Thu May 14 18:15:50 2009 +0100
linux-firmware: Update Intel Wireless Wifi 3945 firmware
Version is now 18.104.22.168
Date: Tue Jan 20 21:37:48 2009 +0000
linux-firmware: Add Intel Wireless Wifi firmware
The revision at the top is the version in your working directory. To retrieve an older version of the same file, do this:
git show caef650a8c909f557ed7f6b23c413401d6994fdb iwlwifi-3945-2.ucode > ~/some/destination/iwlwifi-3945-2.ucode
see also: How to retrieve a single file from specific revision in Git?
However, most firmware files only have a single revision in the repository and are versioned by just having multiple filenames.
Install the firmware in
/usr/local/lib/firmware (location for manually installed firmware files) by copying the file there:
sudo cp /path/to/iwlwifi-3945-2.ucode /usr/local/lib/firmware/
Remove and re-insert the kernel module(s):
rmmod iwldvm && rmmod iwlwifi
modprobe iwlwifi && modprobe iwldvm
And look at
dmesg to see if the firmware gets loaded.
In case you wonder if any files have been removed from the repository, try this:
git log --diff-filter=D --summary | grep delete
At the time of writing, no Intel firmware has been deleted ever.