diff --git a/utils/update-kernel-headers.sh b/utils/update-kernel-headers.sh
index f9baa66d00b4..93599dfe5d52 100755
--- a/utils/update-kernel-headers.sh
+++ b/utils/update-kernel-headers.sh
@@ -65,7 +65,9 @@ headers="
 
 for header in $headers ; do
 	name="${header#*/}"
-	cp "${install_dir}/usr/include/${header}" "${header_dir}/${name}"
+	dest="${header_dir}/${name}"
+	mkdir -p "$(dirname "$dest")"
+	cp "${install_dir}/usr/include/${header}" "${dest}"
 done
 
 # The IPU3 header is a special case, as it's stored in staging. Handle it
