Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
This commit is contained in:
Jeroen Oudshoorn
2023-11-02 22:27:04 +01:00
parent 1185ee50c8
commit e3ffd1f3d8

View File

@ -1,164 +1,40 @@
#
# Install nexmon brcmfmac firmware and drivers from source as needed
#
# Install nexmon to fix wireless scanning (takes 2.5G of space)
- name: clone nexmon repository
git:
repo: https://github.com/DrSchottky/nexmon.git
dest: /usr/local/src/nexmon
- name: "Check for /lib/modules/{{ item.kernel }}/build to see if we can"
stat: path="/lib/modules/{{item.kernel}}/build"
register: kernel_headers
- name: make firmware
shell: "source ./setup_env.sh && make"
args:
executable: /bin/bash
chdir: /usr/local/src/nexmon/
- name: "Kernel {{item.kernel}} exists; installing nexmon"
when:
- kernel_headers.stat.exists
block:
- name: "Check for staged firmware {{ item.firmware }}"
stat: path="{{ staging }}/firmware/{{ item.firmware }}"
register: firmware
- name: make firmware patch
shell: "source ./setup_env.sh && cd /usr/local/src/nexmon/patches/{{ item.patch }}/nexmon/ && make"
args:
executable: /bin/bash
chdir: /usr/local/src/nexmon/
environment:
QEMU_UNAME: "{{ item.kernel }}"
ARCHFLAGS: "{{ item.arch_flags }}"
- name: "Check for staged kernel module {{ item.kernel }}/brcmfmac.ko"
stat: path="{{ staging }}/modules/{{ item.kernel }}/brcmfmac.ko"
register: kmodule
- name: install new firmware (bcm43455c0)
copy:
src: "/usr/local/src/nexmon/patches/{{ item.patch }}/nexmon/{{ item.firmware }}"
dest: "/usr/lib/firmware/brcm/{{ item.firmware }}"
follow: true
environment:
QEMU_UNAME: "{{ item.kernel }}"
ARCHFLAGS: "{{ item.arch_flags }}"
- name: Build nexmon as needed
when:
- not firmware.stat.exists or not kmodule.stat.exists
block:
- name: backup original driver
command: "mv /usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko.xz /usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko.xz.orig"
- name: Check for existence of nexmon repo
stat: path="/usr/local/src/nexmon"
register: nexmongit
- name: copy modified driver
copy:
src: "/usr/local/src/nexmon/patches/driver/brcmfmac_6.1.y-nexmon/brcmfmac.ko"
dest: "/usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko"
- name: clone nexmon repository
when: not nexmongit.stat.exists
git:
repo: "https://github.com/DrSchottky/nexmon.git"
dest: /usr/local/src/nexmon
register: nexmongit
- name: prepare nexmon build tree
when: nexmongit.changed
shell: "source ./setup_env.sh && make"
args:
executable: /bin/bash
chdir: /usr/local/src/nexmon/
- name: Build firmware if needed
when: not firmware.stat.exists
environment:
QEMU_UNAME: "{{ item.kernel }}"
ARCHFLAGS: "{{ item.arch_flags }}"
block:
- name: "make firmware patch {{ item.patch }}"
shell: |
source ./setup_env.sh
cd patches/{{ item.patch }}/nexmon/
make clean
make
args:
executable: /bin/bash
chdir: /usr/local/src/nexmon/
- name: make firmware staging dir
file:
state: directory
path: "{{ staging }}/firmware"
- name: 'copy firmware {{ item.firmware }} to staging directory'
copy:
src: '/usr/local/src/nexmon/patches/{{ item.patch }}/nexmon/{{ item.firmware }}'
dest: '{{ staging }}/firmware/'
follow: true
- name: Build module as needed
when: not kmodule.stat.exists
environment:
QEMU_UNAME: "{{ item.kernel }}"
ARCHFLAGS: "{{ item.arch_flags }}"
block:
- name: "make brcmfmac.ko module {{ item.kernel }}"
when: firmware.stat.exists
# if not firmware.stat.exists, then module would have been installed above
shell: |
export QEMU_UNAME={{ item.kernel }}
uname -a
source ./setup_env.sh
cd patches/{{ item.patch }}/nexmon/
make clean
make brcmfmac.ko
args:
executable: /bin/bash
chdir: /usr/local/src/nexmon/
environment:
QEMU_UNAME: "{{ item.kernel }}"
ARCHFLAGS: "{{ item.arch_flags }}"
- name: make modules staging dir
file:
state: directory
path: "{{ staging }}/modules/{{ item.kernel }}"
- name: copy modified driver to staging
copy:
src: "/usr/local/src/nexmon/patches/driver/brcmfmac_{{ kernel.min }}.y-nexmon/brcmfmac.ko"
dest: "{{ staging }}/modules/{{ item.kernel }}/brcmfmac.ko"
follow: true
register: brcmfmac_installed
# end of nexmon build block. products should now be in staging if they were not already
# check again, just to be sure
- name: "Check for staged firmware {{ item.firmware }}"
stat: path="{{ staging }}/firmware/{{ item.firmware }}"
register: firmware
# install nexmon firmware from staging directory
- name: 'install nexmon firmware {{ item.firmware }}'
when: firmware.stat.exists
block:
- name: "Install nexmon firware in /usr/lib/firmware/brcm"
copy:
src: '{{ staging }}/firmware/{{ item.firmware }}'
dest: '/usr/lib/firmware/brcm/{{ item.firmware }}'
follow: true
- name: "Check for staged kernel module {{ item.kernel }}/brcmfmac.ko"
stat: path="{{ staging }}/modules/{{ item.kernel }}/brcmfmac.ko"
register: kmodule
- name: "Install kernel module {{ item.kernel }}/brcmfmac.ko from staging"
when: kmodule.stat.exists
block:
# remove originals, and keep track
- name: "Remove old compressed kernel module (if there)"
file:
state: absent
path: "/usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko.xz"
register: brcmfmac_ko_xz
ignore_errors: true
- name: "Remove old uncompressed kernel module (if there)"
file:
state: absent
path: "/usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko"
register: brcmfmac_ko
ignore_errors: true
- name: "install nexmon kernel driver {{item.kernel}}"
copy:
src: "{{ staging }}/modules/{{ item.kernel }}/brcmfmac.ko"
dest: "/usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko"
follow: true
register: brcmfmac_installed
- name: "xz compress driver: {{brcmfmac_ko_xz.changed}}"
when: brcmfmac_ko_xz.changed
command: xz -k brcmfmac.ko
args:
chdir: '/usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac'
- name: "remove uncompressed driver: {{brcmfmac_ko.changed}}"
when: not brcmfmac_ko.changed
file:
state: absent
path: "/usr/lib/modules/{{ item.kernel }}/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko"
- name: update module dependencies
command: "/sbin/depmod -a {{ item.kernel }}"
- name : load brcmfmac drivers
command: "/sbin/depmod -a {{ item.kernel}}"