Difference between revisions of "Build drivers from source for rpi"
| (2 intermediate revisions by the same user not shown) | |||
| Line 5: | Line 5: | ||
We provide methods to compile locally on Raspberry Pi and cross-compile on PC. It is recommended to use Raspberry Pi local compilation, which is simpler and faster. | We provide methods to compile locally on Raspberry Pi and cross-compile on PC. It is recommended to use Raspberry Pi local compilation, which is simpler and faster. | ||
| − | === Building the Drivers Locally === | + | ===Building the Drivers Locally=== |
The following operations are performed on the Raspberry Pi. | The following operations are performed on the Raspberry Pi. | ||
The following is an example of piOS 5.15.32. | The following is an example of piOS 5.15.32. | ||
| − | ==== Prepare environment ==== | + | ====Prepare environment==== |
<code>sudo apt install git bc bison flex libssl-dev make</code> | <code>sudo apt install git bc bison flex libssl-dev make</code> | ||
| − | ==== Download the kernel headers for the local piOS ==== | + | ====Download the kernel headers for the local piOS==== |
<code>sudo apt install raspberrypi-kernel-headers</code> | <code>sudo apt install raspberrypi-kernel-headers</code> | ||
| − | ====Download drivers code from veye ==== | + | ====Download drivers code from veye==== |
<code>git clone <nowiki>https://github.com/veyeimaging/raspberrypi_v4l2.git</nowiki></code> | <code>git clone <nowiki>https://github.com/veyeimaging/raspberrypi_v4l2.git</nowiki></code> | ||
| − | ==== Confirm the version of piOS on your own Raspberry Pi ==== | + | ====Confirm the version of piOS on your own Raspberry Pi==== |
<code>$ uname -a</code> | <code>$ uname -a</code> | ||
<code>Linux raspberrypi 5.15.32-v8+ #1538 SMP PREEMPT Thu Mar 31 19:40:39 BST 2022 aarch64 GNU/Linux</code> | <code>Linux raspberrypi 5.15.32-v8+ #1538 SMP PREEMPT Thu Mar 31 19:40:39 BST 2022 aarch64 GNU/Linux</code> | ||
| − | ==== Compile drivers ==== | + | ====Compile drivers==== |
<code>cd ~/raspberrypi_v4l2/driver_source/cam_drv_src/rpi-5.15_all</code> | <code>cd ~/raspberrypi_v4l2/driver_source/cam_drv_src/rpi-5.15_all</code> | ||
| Line 31: | Line 31: | ||
Done. | Done. | ||
| − | ==== Compile dts ==== | + | ====Compile dts==== |
<code>cd ~/raspberrypi_v4l2/driver_source/dts/rpi-5.15.y</code> | <code>cd ~/raspberrypi_v4l2/driver_source/dts/rpi-5.15.y</code> | ||
| Line 38: | Line 38: | ||
Done. | Done. | ||
| − | ==== Common errors ==== | + | ====Common errors==== |
| − | ===== Missing build directory ===== | + | =====Missing build directory===== |
<code>make[1]: *** /lib/modules/[version]/build: No such file or directory. Stop.</code> | <code>make[1]: *** /lib/modules/[version]/build: No such file or directory. Stop.</code> | ||
| Line 49: | Line 49: | ||
Solutions: | Solutions: | ||
| − | 1. Upgrade piOS, and build again. | + | ======1. Upgrade piOS, and build again.====== |
| − | |||
<code>sudo apt update</code> | <code>sudo apt update</code> | ||
| Line 57: | Line 56: | ||
<code>sudo apt install raspberrypi-kernel-headers</code> | <code>sudo apt install raspberrypi-kernel-headers</code> | ||
| − | + | Specifically, for the Raspberry Pi 4 series, 32-bit PiOS will automatically switch to 64-bit mode after upgrading to the latest version. However, the raspberrypi-kernel-headers package is missing the build directory for the v8+ mode. | |
| − | |||
| − | |||
| − | For | + | For example: |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
<code>$ uname -a</code> | <code>$ uname -a</code> | ||
| − | <code>Linux raspberrypi | + | <code>Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64 GNU/Linux</code> |
| − | + | There is no build directory under <code>/lib/modules/6.1.21-v8+/</code>. | |
| − | <code> | + | If this happens, you can add <code>arm_64bit=0</code> to the <code>/boot/config.txt</code> file and then restart the Raspberry Pi to switch back to 32-bit mode. |
| − | + | ======2. Install specific version kernel headers.====== | |
| + | Download the deb package for the version of piOS you are currently using from this [https://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/ link] and install it. | ||
| − | + | For tag name, please determine according to the local piOS version and raspberrypi OS [https://github.com/raspberrypi/linux/tags tags]. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | ======3. Use rpi-source====== | |
| − | ==== | + | Use rpi-source from <nowiki>https://github.com/RPi-Distro/rpi-source</nowiki> it sets up everything you need to build your own kernel (from the current running kernel by default). |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | < | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
===Install the compiled driver=== | ===Install the compiled driver=== | ||
Once compiled, you get the specified version of the driver and dtbo file. | Once compiled, you get the specified version of the driver and dtbo file. | ||
| Line 192: | Line 98: | ||
https://www.raspberrypi.org/documentation/linux/kernel/building.md | https://www.raspberrypi.org/documentation/linux/kernel/building.md | ||
| − | === Document History === | + | ===Document History=== |
| + | |||
| + | * 20260321 | ||
| + | |||
| + | Delete the section related to cross-compilation. | ||
| + | |||
| + | *20230510 | ||
| + | |||
| + | Add solution for"Missing build directory" error. | ||
| − | * 20230326 | + | *20230326 |
Add description and solution for "Missing build directory" error. | Add description and solution for "Missing build directory" error. | ||
| − | * 20220424 | + | *20220424 |
Add local build method. | Add local build method. | ||
| − | * 20220411 | + | *20220411 |
Add description of MV series. | Add description of MV series. | ||
Latest revision as of 07:48, 21 March 2026
The main resources in this section are the official piOS building method.
We provide methods to compile locally on Raspberry Pi and cross-compile on PC. It is recommended to use Raspberry Pi local compilation, which is simpler and faster.
1 Building the Drivers Locally
The following operations are performed on the Raspberry Pi.
The following is an example of piOS 5.15.32.
1.1 Prepare environment
sudo apt install git bc bison flex libssl-dev make
1.2 Download the kernel headers for the local piOS
sudo apt install raspberrypi-kernel-headers
1.3 Download drivers code from veye
git clone https://github.com/veyeimaging/raspberrypi_v4l2.git
1.4 Confirm the version of piOS on your own Raspberry Pi
$ uname -a
Linux raspberrypi 5.15.32-v8+ #1538 SMP PREEMPT Thu Mar 31 19:40:39 BST 2022 aarch64 GNU/Linux
1.5 Compile drivers
cd ~/raspberrypi_v4l2/driver_source/cam_drv_src/rpi-5.15_all
make
Done.
1.6 Compile dts
cd ~/raspberrypi_v4l2/driver_source/dts/rpi-5.15.y
./build_dtbo.sh
Done.
1.7 Common errors
1.7.1 Missing build directory
make[1]: *** /lib/modules/[version]/build: No such file or directory. Stop.
The cmd sudo apt install raspberrypi-kernel-headers will simply install the latest kernel headers available on the mirror. Which indeed matches the latest available kernel on the mirror. But not necessarily the installed kernel on the system.
The Raspbian maintainers always remove the older kernel headers from the repository index files. Not sure why they do that.
Solutions:
1.7.1.1 1. Upgrade piOS, and build again.
sudo apt update
sudo apt full-upgrade
sudo apt install raspberrypi-kernel-headers
Specifically, for the Raspberry Pi 4 series, 32-bit PiOS will automatically switch to 64-bit mode after upgrading to the latest version. However, the raspberrypi-kernel-headers package is missing the build directory for the v8+ mode.
For example:
$ uname -a
Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64 GNU/Linux
There is no build directory under /lib/modules/6.1.21-v8+/.
If this happens, you can add arm_64bit=0 to the /boot/config.txt file and then restart the Raspberry Pi to switch back to 32-bit mode.
1.7.1.2 2. Install specific version kernel headers.
Download the deb package for the version of piOS you are currently using from this link and install it.
For tag name, please determine according to the local piOS version and raspberrypi OS tags.
1.7.1.3 3. Use rpi-source
Use rpi-source from https://github.com/RPi-Distro/rpi-source it sets up everything you need to build your own kernel (from the current running kernel by default).
2 Install the compiled driver
Once compiled, you get the specified version of the driver and dtbo file.
Refer to How to install driver,
wget https://github.com/veyeimaging/raspberrypi_v4l2/releases/latest/download/raspberrypi_v4l2.tgz
tar -xzvf raspberrypi_v4l2.tgz
cd raspberrypi_v4l2/release/
mkdir driver_bin/$(uname -r)
Put the driver and dtbo files compiled into this directory.
chmod +x *
sudo ./install_driver.sh [camera module]
camera module:could be veye327,csimx307,cssc132,veyecam2m,etc.
3 References
https://www.raspberrypi.org/documentation/linux/kernel/building.md
4 Document History
- 20260321
Delete the section related to cross-compilation.
- 20230510
Add solution for"Missing build directory" error.
- 20230326
Add description and solution for "Missing build directory" error.
- 20220424
Add local build method.
- 20220411
Add description of MV series.