irpas技术客

基于树莓派4b(raspberry pi 4b)内核编译流程,交叉编译环境搭建,loadable kernel module (LKM)编译方法_gogogo_

大大的周 7101

树莓派4b编译Linux内核&交叉编译环境的搭建

使用树莓派4b编译内核很简单,具体可以参考以下树莓派官网中关于Build the Kernel的内容:

?https://·/documentation/computers/linux_kernel.html#building-the-kernel

使用树莓派4b编译内核就一个字:慢!我买的是8G RAM版本的4b(以下简称rpi 4b),感觉每次编译要花掉1个小时的时间。所以我会选择用笔记本运行虚拟机来交叉编译rpi 4b的内核,具体硬件配置为CPU: i7-11800H,RAM:32GB。软件为:虚拟机VMware Workstation 16.1.2 build-17966106,Ubuntu 18.04.6 LTS,Ubuntu内核版本5.4.0-105-generic。树莓派内核源码使用rpi-5.15.y。用以上配置的笔记本编译一次内核大约需要8分钟。因为两者编译时间上的巨大差异,所以导致我经常用笔记本编

loadable kernel module (LKM)交叉编译方法

? ? ? 本人主要用rpi 4b学习Linux的驱动开发。习惯在rpi 4b上搭建samba服务,然后通过VScode直接打开rpi 4b上的项目文件夹来开发,MobaXterm通过SSH辅助运行make,加载模块等命令。自我感觉这套开发流程比较时候初学者,可以先主要把精力放在学习编程本身,先避开学习繁琐的传统Linux开发工具。我这种习惯也导致在笔记本上编译的Linux内核还有内核模块,拷贝并加载到rpi 4b?SD卡上的时候,会导致在rpi 4b上编译内核出现错误,其中之一的错误为:

pi@gf-raspberrypi:~/LinuxDeviceDD/18_dtsplatform $ make make -C /home/pi/rpi4_kernel_5.15.y/linux M=/home/pi/LinuxDeviceDD/18_dtsplatform modules make[1]: Entering directory '/home/pi/rpi4_kernel_5.15.y/linux' MODPOST /home/pi/LinuxDeviceDD/18_dtsplatform/Module.symvers ERROR: modpost: "__might_fault" [/home/pi/LinuxDeviceDD/18_dtsplatform/leddriver.ko] undefined! make[2]: *** [scripts/Makefile.modpost:134: /home/pi/LinuxDeviceDD/18_dtsplatform/Module.symvers] Error 1 make[2]: *** Deleting file '/home/pi/LinuxDeviceDD/18_dtsplatform/Module.symvers' make[1]: *** [Makefile:1783: modules] Error 2 make[1]: Leaving directory '/home/pi/rpi4_kernel_5.15.y/linux' make: *** [Makefile:9: kernel_modules] Error 2

解决办法很简单,把笔记本虚拟机的内核根目录中的.config文件拷贝到rpi 4b内核根目录中,替换原来的.config文件并重新用rpi 4b编译,编译完成后别忘sudo make modules_install(当然前提是虚拟机与rpi 4b用的是同一版本的Linux源码)。成功编译项目模块:

pi@gf-raspberrypi:~/LinuxDeviceDD/18_dtsplatform $ make make -C /home/pi/rpi4_kernel_5.15.y/linux M=/home/pi/LinuxDeviceDD/18_dtsplatform modules make[1]: Entering directory '/home/pi/rpi4_kernel_5.15.y/linux' CC [M] /home/pi/LinuxDeviceDD/18_dtsplatform/leddriver.o MODPOST /home/pi/LinuxDeviceDD/18_dtsplatform/Module.symvers CC [M] /home/pi/LinuxDeviceDD/18_dtsplatform/leddriver.mod.o LD [M] /home/pi/LinuxDeviceDD/18_dtsplatform/leddriver.ko make[1]: Leaving directory '/home/pi/rpi4_kernel_5.15.y/linux'

?如果想用虚拟机交叉编译rpi 4b的loadable kernel module,

安装工具链:sudo apt install crossbuild-essential-armhf编译模块的时候使用以下命令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #树莓派4b交叉编译环境 #The #RAM版本的4b以下简称rpi