pi4上编译内核组件
准备工作
给pi4安装Kernel Headers
$ sudo apt update
$ sudo apt install raspberrypi-kernel-headers
确认pi4的版本号
并下载对应源码并解压:https://github.com/raspberrypi/
pi@raspberrypi:~ $ uname -r
4.19.97-v7l+
放到虚拟机上或者哪里都行
user@ubuntu:/opt/pi$ ll
drwxrwxr-x 27 user user 4096 May 9 10:46 linux-rpi-4.19.y/
-rw-rw-r-- 1 user user 203337874 May 8 18:01 linux-rpi-4.19.y.zip
user@ubuntu:/opt/pi$ cd linux-rpi-4.19.y/drivers/
user@ubuntu:/opt/pi/linux-rpi-4.19.y/drivers$ //这里的文件就是我们要修改的组件
以修改一个usb serial驱动为例
进到源码的 linux-rpi-4.19.y/drivers/usb/serial 目录下
这里都是各个usb串口驱动源文件
可以把目录下的所有文件copy到pi4上的 /lib/modules/4.19.97-v7l+/build/drivers/usb/serial/ ,这样方便一些,或者假如只修改option这个驱动,只复制option.c、option.mod.c 这几个文件到pi4上。
option.c 用nano工具打开简单修改如下
static const struct usb_device_id option_ids[] = {
{ USB_DEVICE(0x2C7C, 0x0700) }, /* Quectel XXXX */
......
}
保存退出,运行编译命令
sudo make -C /lib/modules/`uname -r`/build M=/lib/modules/`uname -r`/build/drivers/usb/serial obj-m=option.o modules
pi@raspberrypi:/ $ sudo make -C /lib/modules/`uname -r`/build M=/lib/modules/`uname -r`/build/drivers/usb/serial obj-m=option.o modules
make: Entering directory '/usr/src/linux-headers-4.19.97-v7l+'
CC [M] /lib/modules/4.19.97-v7l+/build/drivers/usb/serial/option.o
Building modules, stage 2.
MODPOST 1 modules
LD [M] /lib/modules/4.19.97-v7l+/build/drivers/usb/serial/option.ko
make: Leaving directory '/usr/src/linux-headers-4.19.97-v7l+'
pi@raspberrypi:/ $
看到生成option.ko内核模块了吧,接着运行
//将ko模块copy到对应的内核文件目录下
sudo cp /lib/modules/`uname -r`/build/drivers/usb/serial/option.ko /lib/modules/`uname -r`/kernel/drivers/usb/serial
//检查依赖
sudo depmod
//reboot重新加载模块
sudo reboot
这样我们就可以在pi4上随便编译修改后的模块了。
交叉编译环境可以放心落灰了。