Skip to content

Instantly share code, notes, and snippets.

@ukn
Forked from Stono/99-install-facetime-camera.sh
Last active October 25, 2025 17:11
Show Gist options
  • Select an option

  • Save ukn/a2f85e3420ae7d0f64db2274a9bc106b to your computer and use it in GitHub Desktop.

Select an option

Save ukn/a2f85e3420ae7d0f64db2274a9bc106b to your computer and use it in GitHub Desktop.
Install the kernal module required for the facetimehd camera to work on Linux
#!/bin/bash
set -e
export CONFIG_MODULE_SIG=n
export CONFIG_MODULE_SIG_ALL=n
# For current kernel
export KERNELRELEASE=$(cat /proc/version | awk '{print $3}')
temp_dir=$(mktemp -d)
echo "Installing FacetimeHD camera for $KERNELRELEASE"
cd $temp_dir
git clone https://github.com/patjak/facetimehd-firmware.git
git clone https://github.com/patjak/bcwc_pcie.git
cd $temp_dir/facetimehd-firmware
pwd
make
make install
cd $temp_dir/bcwc_pcie
pwd
make
make install
rm -rf $temp_dir
if [ ! -d "/etc/modules-load.d" ]; then
mkdir -p "/etc/modules-load.d"
fi
cat > "/etc/modules-load.d/facetimehd.conf" << EOL
videobuf2-core
videobuf2_v4l2
videobuf2-dma-sg
facetimehd
EOL
# Workaround for depmod being skipped above with error:
# Warning: modules_install: missing 'System.map' file. Skipping depmod
echo "Generate modules.dep and map files"
sudo depmod
echo "Adding kernel modules"
sudo modprobe -r bdc_pci
sudo modprobe facetimehd
echo "Install complete"
@xyb
Copy link

xyb commented Oct 9, 2022

It works perfectly on my MacBook Pro Retina 13″, Mid 2014, MX Linux 21.2

I updated the script to install kernel modules as root user and also added the color calibration files. You might want to check it out here:

@ghoshpp
Copy link

ghoshpp commented Jan 14, 2023

on entering the bcwc-pcie directory the make command:
make -C /lib/modules/5.10.161-1-MANJARO/build M=/home/partha/Downloads/bcwc_pcie modules
returns the error:
make[1]: *** /lib/modules/5.10.161-1-MANJARO/build: No such file or directory. Stop. make: *** [Makefile:12: all] Error 2

Please help...

@ghoshpp
Copy link

ghoshpp commented Jan 14, 2023

further, when the directory /lib/modules/5.10.161-1-MANJARO/build was created and make run from bcwc_pcie directory there is a further error message:
make -C /lib/modules/5.10.161-1-MANJARO/build M=/home/partha/Downloads/bcwc_pcie modules
make[1]: Entering directory '/usr/lib/modules/5.10.161-1-MANJARO/build'
make[1]: *** No rule to make target 'modules'. Stop.
make[1]: Leaving directory '/usr/lib/modules/5.10.161-1-MANJARO/build'
make: *** [Makefile:12: all] Error 2

So there is some problem here with the files in the directory; please help....

@ukn
Copy link
Author

ukn commented Jan 16, 2023

No rule to make target 'modules'.

I don't use this setup any more but have you tried searching the web for this error?
Check if you have kernel headers installed that match the current kernel version.

@Memnoc
Copy link

Memnoc commented Jan 6, 2024

I have sort of gathered all I could find on this topic and the gist itself into another repo with some more info. I hope this can be useful to someone struggling with this.
I had a particular rough time making this work on Debian 12, and then this script helped.
Hope this helps!

P.S. sometimes Cheese is picky with the drivers - test on google meet to see if the fix the worked, then tackle Cheese separately.

@BenjaminNassW
Copy link

I had 'make' error because i didnt have curl installed,
now i thought it installed correctly but cheese wont load the camera and neither will google meet, here is the termina:

sudo ./99-install-facetime-camera.sh
Installing FacetimeHD camera for 6.1.0-22-amd64
Cloning into 'facetimehd-firmware'...
remote: Enumerating objects: 902, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 902 (delta 6), reused 14 (delta 5), pack-reused 885
Receiving objects: 100% (902/902), 301.25 KiB | 1.19 MiB/s, done.
Resolving deltas: 100% (591/591), done.
Cloning into 'bcwc_pcie'...
remote: Enumerating objects: 1169, done.
remote: Counting objects: 100% (86/86), done.
remote: Compressing objects: 100% (44/44), done.
remote: Total 1169 (delta 52), reused 63 (delta 42), pack-reused 1083
Receiving objects: 100% (1169/1169), 421.23 KiB | 1.21 MiB/s, done.
Resolving deltas: 100% (779/779), done.
/tmp/tmp.4UWrdtSMYi/facetimehd-firmware

Checking dependencies for driver download...
/usr/bin/curl
/usr/bin/xzcat
/usr/bin/cpio

Downloading the driver, please wait...

Found matching hash from OS X, El Capitan 10.11.5
==> Extracting firmware...
--> Decompressing the firmware using gzip...
--> Deleting temporary files...
--> Extracted firmware version 1.43.0

Copying firmware into '//usr/lib/firmware/facetimehd'
/tmp/tmp.4UWrdtSMYi/bcwc_pcie
make -C /lib/modules/6.1.0-22-amd64/build M=/tmp/tmp.4UWrdtSMYi/bcwc_pcie modules
make[1]: Entering directory '/usr/src/linux-headers-6.1.0-22-amd64'
CC [M] /tmp/tmp.4UWrdtSMYi/bcwc_pcie/fthd_ddr.o
CC [M] /tmp/tmp.4UWrdtSMYi/bcwc_pcie/fthd_hw.o
CC [M] /tmp/tmp.4UWrdtSMYi/bcwc_pcie/fthd_drv.o
CC [M] /tmp/tmp.4UWrdtSMYi/bcwc_pcie/fthd_ringbuf.o
CC [M] /tmp/tmp.4UWrdtSMYi/bcwc_pcie/fthd_isp.o
CC [M] /tmp/tmp.4UWrdtSMYi/bcwc_pcie/fthd_v4l2.o
CC [M] /tmp/tmp.4UWrdtSMYi/bcwc_pcie/fthd_buffer.o
CC [M] /tmp/tmp.4UWrdtSMYi/bcwc_pcie/fthd_debugfs.o
LD [M] /tmp/tmp.4UWrdtSMYi/bcwc_pcie/facetimehd.o
MODPOST /tmp/tmp.4UWrdtSMYi/bcwc_pcie/Module.symvers
CC [M] /tmp/tmp.4UWrdtSMYi/bcwc_pcie/facetimehd.mod.o
LD [M] /tmp/tmp.4UWrdtSMYi/bcwc_pcie/facetimehd.ko
BTF [M] /tmp/tmp.4UWrdtSMYi/bcwc_pcie/facetimehd.ko
Skipping BTF generation for /tmp/tmp.4UWrdtSMYi/bcwc_pcie/facetimehd.ko due to unavailability of vmlinux
make[1]: Leaving directory '/usr/src/linux-headers-6.1.0-22-amd64'
make -C /lib/modules/6.1.0-22-amd64/build M=/tmp/tmp.4UWrdtSMYi/bcwc_pcie modules_install
make[1]: Entering directory '/usr/src/linux-headers-6.1.0-22-amd64'
INSTALL /lib/modules/6.1.0-22-amd64/extra/facetimehd.ko
DEPMOD /lib/modules/6.1.0-22-amd64
Warning: modules_install: missing 'System.map' file. Skipping depmod.
make[1]: Leaving directory '/usr/src/linux-headers-6.1.0-22-amd64'
Generate modules.dep and map files
Adding kernel modules
modprobe: FATAL: Module bdc_pci not found.

@zigarojec
Copy link

You guys are perfect. Works on my MacBook Pro Retina Early 2015, Debian 12 KDE Plasma.

@risugop
Copy link

risugop commented Aug 31, 2024

for some reason im getting this error

Installing FacetimeHD camera for 6.1.0-23-amd64
Clonando en 'facetimehd-firmware'...
remote: Enumerating objects: 902, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 902 (delta 6), reused 14 (delta 5), pack-reused 885 (from 1)
Recibiendo objetos: 100% (902/902), 301.25 KiB | 1.53 MiB/s, listo.
Resolviendo deltas: 100% (591/591), listo.
Clonando en 'bcwc_pcie'...
remote: Enumerating objects: 1169, done.
remote: Counting objects: 100% (86/86), done.
remote: Compressing objects: 100% (44/44), done.
remote: Total 1169 (delta 52), reused 63 (delta 42), pack-reused 1083 (from 1)
Recibiendo objetos: 100% (1169/1169), 421.23 KiB | 1.66 MiB/s, listo.
Resolviendo deltas: 100% (779/779), listo.
/tmp/tmp.gVcNmYfViw/facetimehd-firmware

Checking dependencies for driver download...
/usr/bin/curl
/usr/bin/xzcat
/usr/bin/cpio

Downloading the driver, please wait...

Found matching hash from OS X, El Capitan 10.11.5
==> Extracting firmware...
--> Decompressing the firmware using gzip...
--> Deleting temporary files...
--> Extracted firmware version 1.43.0

Copying firmware into '//usr/lib/firmware/facetimehd'
/tmp/tmp.gVcNmYfViw/bcwc_pcie
make -C /lib/modules/6.1.0-23-amd64/build M=/tmp/tmp.gVcNmYfViw/bcwc_pcie modules
make[1]: *** /lib/modules/6.1.0-23-amd64/build: No existe el fichero o el directorio. Alto.
make: *** [Makefile:12: all] Error 2

if anybody asks, i am using debian 12 with kde plasma

@lovrenco
Copy link

lovrenco commented Sep 8, 2024

Hello, I have latest Ubuntu 24.04.1 and when script runs I get this error. Can you help, please:

Copying firmware into '//usr/lib/firmware/facetimehd'
/tmp/tmp.UFC9QVUmI1/bcwc_pcie
make -C /lib/modules/6.8.0-41-generic/build M=/tmp/tmp.UFC9QVUmI1/bcwc_pcie modules
make[1]: Entering directory '/usr/src/linux-headers-6.8.0-41-generic'
warning: the compiler differs from the one used to build the kernel
The kernel was built by: x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0
You are using: gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0
CC [M] /tmp/tmp.UFC9QVUmI1/bcwc_pcie/fthd_ddr.o
CC [M] /tmp/tmp.UFC9QVUmI1/bcwc_pcie/fthd_hw.o
CC [M] /tmp/tmp.UFC9QVUmI1/bcwc_pcie/fthd_drv.o
CC [M] /tmp/tmp.UFC9QVUmI1/bcwc_pcie/fthd_ringbuf.o
CC [M] /tmp/tmp.UFC9QVUmI1/bcwc_pcie/fthd_isp.o
CC [M] /tmp/tmp.UFC9QVUmI1/bcwc_pcie/fthd_v4l2.o
CC [M] /tmp/tmp.UFC9QVUmI1/bcwc_pcie/fthd_buffer.o
CC [M] /tmp/tmp.UFC9QVUmI1/bcwc_pcie/fthd_debugfs.o
LD [M] /tmp/tmp.UFC9QVUmI1/bcwc_pcie/facetimehd.o
MODPOST /tmp/tmp.UFC9QVUmI1/bcwc_pcie/Module.symvers
CC [M] /tmp/tmp.UFC9QVUmI1/bcwc_pcie/facetimehd.mod.o
LD [M] /tmp/tmp.UFC9QVUmI1/bcwc_pcie/facetimehd.ko
BTF [M] /tmp/tmp.UFC9QVUmI1/bcwc_pcie/facetimehd.ko
make[1]: Leaving directory '/usr/src/linux-headers-6.8.0-41-generic'
make -C /lib/modules/6.8.0-41-generic/build M=/tmp/tmp.UFC9QVUmI1/bcwc_pcie modules_install
make[1]: Entering directory '/usr/src/linux-headers-6.8.0-41-generic'
INSTALL /lib/modules/6.8.0-41-generic/updates/facetimehd.ko
SIGN /lib/modules/6.8.0-41-generic/updates/facetimehd.ko
DEPMOD /lib/modules/6.8.0-41-generic
Warning: modules_install: missing 'System.map' file. Skipping depmod.
make[1]: Leaving directory '/usr/src/linux-headers-6.8.0-41-generic'
Generate modules.dep and map files
Adding kernel modules
modprobe: FATAL: Module bdc_pci not found.
lovrenco@MacBuntu:~/Documents$

@Dzmms
Copy link

Dzmms commented Oct 24, 2025

Installing FacetimeHD camera for 6.8.0-1041-nvidia
Cloning into 'facetimehd-firmware'...
remote: Enumerating objects: 902, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 902 (delta 6), reused 14 (delta 5), pack-reused 885 (from 1)
Receiving objects: 100% (902/902), 301.25 KiB | 2.23 MiB/s, done.
Resolving deltas: 100% (591/591), done.
Cloning into 'bcwc_pcie'...
remote: Enumerating objects: 1183, done.
remote: Counting objects: 100% (56/56), done.
remote: Compressing objects: 100% (29/29), done.
remote: Total 1183 (delta 39), reused 28 (delta 27), pack-reused 1127 (from 3)
Receiving objects: 100% (1183/1183), 432.69 KiB | 744.00 KiB/s, done.
Resolving deltas: 100% (785/785), done.
/tmp/tmp.EAmA1sSuZI/facetimehd-firmware

Checking dependencies for driver download...
/usr/bin/curl
/usr/bin/xzcat
/usr/bin/cpio

Downloading the driver, please wait...

Found matching hash from OS X, El Capitan 10.11.5
==> Extracting firmware...
--> Decompressing the firmware using gzip...
--> Deleting temporary files...
--> Extracted firmware version 1.43.0

Copying firmware into '//usr/lib/firmware/facetimehd'
install: cannot create regular file '//usr/lib/firmware/facetimehd/firmware.bin': Permission denied
make: *** [Makefile:47: install] Error

It says permission denied how do I set this? I"ve already done sudo chmod +x

@Dzmms
Copy link

Dzmms commented Oct 24, 2025

Wait it's fixed but I have encountered new error

Installing FacetimeHD camera for 6.8.0-1041-nvidia
Cloning into 'facetimehd-firmware'...
remote: Enumerating objects: 902, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 902 (delta 6), reused 14 (delta 5), pack-reused 885 (from 1)
Receiving objects: 100% (902/902), 301.25 KiB | 2.39 MiB/s, done.
Resolving deltas: 100% (591/591), done.
Cloning into 'bcwc_pcie'...
remote: Enumerating objects: 1183, done.
remote: Counting objects: 100% (56/56), done.
remote: Compressing objects: 100% (29/29), done.
remote: Total 1183 (delta 39), reused 28 (delta 27), pack-reused 1127 (from 3)
Receiving objects: 100% (1183/1183), 432.69 KiB | 870.00 KiB/s, done.
Resolving deltas: 100% (785/785), done.
/tmp/tmp.9W88Eeglrg/facetimehd-firmware

Checking dependencies for driver download...
/usr/bin/curl
/usr/bin/xzcat
/usr/bin/cpio

Downloading the driver, please wait...

Found matching hash from OS X, El Capitan 10.11.5
==> Extracting firmware...
--> Decompressing the firmware using gzip...
--> Deleting temporary files...
--> Extracted firmware version 1.43.0

Copying firmware into '//usr/lib/firmware/facetimehd'
/tmp/tmp.9W88Eeglrg/bcwc_pcie
make -C /lib/modules/6.8.0-1041-nvidia/build M=/tmp/tmp.9W88Eeglrg/bcwc_pcie modules
make[1]: Entering directory '/usr/src/linux-headers-6.8.0-1041-nvidia'
warning: the compiler differs from the one used to build the kernel
The kernel was built by: x86_64-linux-gnu-gcc-11 (Ubuntu 11.4.0-1ubuntu122.04.2) 11.4.0
You are using: gcc-11 (Ubuntu 11.4.0-1ubuntu1
22.04.2) 11.4.0
CC [M] /tmp/tmp.9W88Eeglrg/bcwc_pcie/fthd_ddr.o
CC [M] /tmp/tmp.9W88Eeglrg/bcwc_pcie/fthd_hw.o
CC [M] /tmp/tmp.9W88Eeglrg/bcwc_pcie/fthd_drv.o
CC [M] /tmp/tmp.9W88Eeglrg/bcwc_pcie/fthd_ringbuf.o
CC [M] /tmp/tmp.9W88Eeglrg/bcwc_pcie/fthd_isp.o
CC [M] /tmp/tmp.9W88Eeglrg/bcwc_pcie/fthd_v4l2.o
CC [M] /tmp/tmp.9W88Eeglrg/bcwc_pcie/fthd_buffer.o
CC [M] /tmp/tmp.9W88Eeglrg/bcwc_pcie/fthd_debugfs.o
LD [M] /tmp/tmp.9W88Eeglrg/bcwc_pcie/facetimehd.o
MODPOST /tmp/tmp.9W88Eeglrg/bcwc_pcie/Module.symvers
CC [M] /tmp/tmp.9W88Eeglrg/bcwc_pcie/facetimehd.mod.o
LD [M] /tmp/tmp.9W88Eeglrg/bcwc_pcie/facetimehd.ko
BTF [M] /tmp/tmp.9W88Eeglrg/bcwc_pcie/facetimehd.ko
Skipping BTF generation for /tmp/tmp.9W88Eeglrg/bcwc_pcie/facetimehd.ko due to unavailability of vmlinux
make[1]: Leaving directory '/usr/src/linux-headers-6.8.0-1041-nvidia'
make -C /lib/modules/6.8.0-1041-nvidia/build M=/tmp/tmp.9W88Eeglrg/bcwc_pcie modules_install
make[1]: Entering directory '/usr/src/linux-headers-6.8.0-1041-nvidia'
INSTALL /lib/modules/6.8.0-1041-nvidia/updates/facetimehd.ko
SIGN /lib/modules/6.8.0-1041-nvidia/updates/facetimehd.ko
DEPMOD /lib/modules/6.8.0-1041-nvidia
Warning: modules_install: missing 'System.map' file. Skipping depmod.
make[1]: Leaving directory '/usr/src/linux-headers-6.8.0-1041-nvidia'
Generate modules.dep and map files
Adding kernel modules
modprobe: FATAL: Module bdc_pci not found.

Can anyone fix this? I'm using pop os

@Dzmms
Copy link

Dzmms commented Oct 24, 2025

No wait it's fixed and running perfect

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment