最详细的树莓派更换自定义内核步骤

[树莓派3B+]&[内核版本6.1]的linux内核编译+替换 (超详细) 虽然Linux内核源码有上万行,但是Linux内核编译出来只有若干个M,其原因是编译的时候是针对一个特定平台,所以不是所有的代码都会参与编译。这也再次解释了为什么Linux的可移植性会如此强大。也正是因为Linux强大的可移植性,针对不同的目标平台(ARM?X86?PowerPC?),在进行内核编译之前,就需要针对性的配置。 内核配置完成后,就可以结合交叉编译工具链进行内核编译了! 阅读详情
AI摘要

本文详细指导如何在树莓派4B上安装自定义32位内核,涉及依赖项安装、内核源码下载、预配置、内核配置、交叉编译和安装过程,以及注意事项。

设备准备

  • 树莓派4B
  • Ubuntu18.04.6虚拟机
  • SD卡(已安装树莓派系统)
  • 读卡器

说明:本文仅针对树莓派4B更换自定义的32位内核。如果树莓派型号不同还需要参考文末的参考链接,结合本文内容,相信你一定能弄明白。

安装依赖项

第一行安装一些后续程序所需要的包;第二行安装32位内核的交叉编译工具。

为什么需要交叉编译工具呢?这是由于我们使用的Ubuntu是基于Linux的64位系统,但是我们想要编译的树莓派系统内核是32位的ARM架构程序。因此需要借助交叉编译工具进行编译。

注意:没有依赖项和交叉编译工具后面的步骤无法顺利进行,请确保所有依赖项和交叉编译工具均已安装。此外,交叉编译工具仅用于交叉编译arm32位程序,如果想编译64位内核请参考文末的链接。

sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
sudo apt install crossbuild-essential-armhf

下载内核源码

--depth=1保证只下载最新版本的树莓派内核源代码。如果没有该参数则会下载所有的分支。如果不是想进行开发,建议使用git下载时都加上--depth参数。

如果想下载特定版本的树莓派内核,请打开https://github.com/raspberrypi/linux在branch中寻找合适的版本并使用git下载到本地。

经测试,树莓派4B不能使用高于5.15.y版本的内核,因此需要使用下面的命令下载5.15版本的内核。(测试了6.1.y版本不行,5.18.y版本不行,5.15y版本可以)

git clone -b rpi-5.15.y --single-branch --depth=1 https://github.com/raspberrypi/linux
下载不同版本的树莓派系统内核
图1 下载不同版本的树莓派内核

预配置

进入刚刚下载树莓派源代码目录,设置环境变量KERNEL,并使用make指定bcm2711_defconfig配置模板生成arm架构32位的配置文件。

  • ARCH=arm代表架构位arm32位架构;
  • CROSS_CPMPILE指定交叉编译工具为linux平台交叉编译arm32位工具;
  • 最后指定初始配置文件的模板为bcm2711_defconfig。

注意:树莓派版本不同,这里设置的环境变量KERNEL不同,所使用的配置模板也不同,其他型号的具体参数设置请参考文末链接。

cd linux
KERNEL=kernel7l
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig

配置内核

这里使用make工具打开linux内核配置菜单。64位内核在这与此命令不同,请结合本文内容并参考文末链接:

ARCH和CROSS_COMPILE参数与预配置中的参数和意思相同,不再赘述。最后的menuconfig命令指示打开linux配置菜单。

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

在配置菜单中,使用方向键移动光标;使用 y 键选择功能,可以将该功能编译进内核,此时功能前面变为[*];使用m键选中功能,可以将该功能作为模块编译,此时功能前面变为[M];使用 n 键可以取消选中,此时功能前面变为[ ]。

图2 内核配置菜单

在配置内核时,有时想将功能编译进内核,但是会如下图提示:

图3 将功能编译进内核却报错

这是因为这个功能还依赖于其他功能。而其他功能是被作为模块编译的。因此要想将该功能编译进内核,就也得把它依赖的功能编译进内核。所以,我们回到功能页面,按下 h 键就可以看到它依赖的都是哪些功能了。

图4 查看所依赖的功能

我们只需寻找到这些功能,并把它也配置为编译进内核就好了。怎么寻找呢?我们可以按下 / 键调出搜索菜单,然后输入功能的名字就可以查找到这个模块啦。找到模块位置后,将其状态设置为 [*] 就可以啦。此时再回到原来的功能,就可以成功将其编译进内核了。

图5 查找功能位置

最后不断按ESC返回上级菜单,提示选择YES保存即可。

交叉编译

内核配置完成后,我们就要进行交叉编译,将源代码编译为可执行程序。执行下面的代码即可。64位内核在这与此命令不同,请结合本文内容并参考文末链接:

  • ARCH、CROSS_COMPILE参数不再赘述。
  • zImage:生成的 Linux 内核镜像的文件名;
  • modules:生成内核模块;
  • dtbs:生成设备树二进制文件(Device Tree Binary)。设备树是一种描述硬件设备信息的数据结构,用于在 Linux 内核中动态配置硬件。生成的设备树二进制文件将包含硬件设备的描述信息
  • ;-j24 多线程编译。其后的数字取决于电脑的CPU线程数量,一般为CPU线程数量*1.5。请自行修改为适合自己电脑的参数。
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j24

注意:如果编译失败,请自行查找错误。网络上一般都有线程的解决方法。唯一要注意的是,报错信息并不总是在make结尾,中间也可能出现报错。因此在编译失败后请使用第三方工具查找make输出所有结果中含有error的内容。建议将Make输出信息输出到文件,便于查找错误信息。

内核安装

将预安装有系统的SD卡插入读卡器,连接到Ubuntu虚拟机。执行下面的命令查看SD卡的分区情况。

sudo lsblk
图6 查看分区

其中,boot分区,即小一点的分区,文件系统格式一般为fat32;rootfs分区,即大一点的分区,文件系统格式一般为ex4。这里要将分区号与文件系统格式对应。在本文中,sdb1对应fat32文件系统;sdb2对应ex4文件系统。

此时,我们应该还在下载的树莓派内核源代码的目录,即在名为linux的目录下。如果不在,请切换到刚刚下载的树莓派内核源代码目录。

然后,创建文件夹,将不同的文件系统挂载到对饮的目录下。这里sdb1对应fat32文件系统;sdb2对应ex4文件系统。如果你的电脑上不是,请自行调整顺序,保证文件系统挂载到和其相同的目录下。

sudo mkdir mnt
sudo mkdir mnt/fat32
sudo mkdir mnt/ext4
sudo mount /dev/sdb1 mnt/fat32
sudo mount /dev/sdb2 mnt/ext4

接下来,执行下面的命令,安装内核及模块。64位内核在这与此命令不同,请结合本文内容并参考文末链接。

sudo env PATH=$PATH make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=mnt/ext4 modules_install

然后,备份原内核、复制新内核及设备树信息。64位内核在这与此命令不同,请结合本文内容并参考文末链接。

sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img
sudo cp arch/arm/boot/zImage mnt/fat32/$KERNEL.img
sudo cp arch/arm/boot/dts/*.dtb mnt/fat32/
sudo cp arch/arm/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
sudo cp arch/arm/boot/dts/overlays/README mnt/fat32/overlays/
sudo umount mnt/fat32
sudo umount mnt/ext4

将SD卡重新插入树莓派,启动树莓派,使用下列命令即可查看内核版本。至此,大功告成!

uname -a

参考链接:

Raspberry Pi Documentation - The Linux kernel --- Raspberry Pi 文档 - Linux 内核

主要参考Building the Kernel Locally、Cross-Compiling the Kernel、Configuring the Kernel。

树莓派4B采用设备树(DTS)提供硬件信息,编写platform驱动控制io(LED) 树莓派4B采用设备树(DTS)提供硬件信息,编写platform驱动控制led灯 阅读详情

相关推荐

树莓派 zero w 4.19 内核头文件安装方法

树莓派Zero w 4.19 内核头文件安装方法 本文介绍了树莓派 zero w 系统安装内核头文件的方法,理论上可以安装任意版本内核。文章介绍了起因,解决过程及结果,您也可以直接跳到文末看结论。 缘起 话说我为了安装M项目,将树莓派 zero w 内核手动降级到 4.19.118 版本,兴高采烈的去编译 M 项目,结果到最后依然出错,抱怨找不到头文件。 APPLYING FLASHPATCHES gen/flashpatches.mk => brcmfmac43430-sdio.bin (de

dxxdxxd的博客 3131

树莓派内核编译,替换。

下载linux内核源码树。下载好之后传送到ubuntu里面。下载安装交叉编译工具链。内核配置有三种方式。第一种:基于厂家提供的linux内核源码(.config文件)进行配置。第二种:make menuconfig 根据厂家提供的一项一项的配置。第三种:自己搞。树莓派2,3的工程是bcm2709_defconfig.(1)先搜索一下所有的config文件,看有没有bcm2709_defconfig这个文件在里面找到这个bcm2709_defconfig的文件。

m0_72442663的博客 751

树莓派Linux源码配置,树莓派Linux内核编译,树莓派Linux内核更换_树莓派内核编译报错

编译完成后,可以看到源码树目录多了vmlinux这个文件,如果编译失败则没有此文件,成功后,目标zImage镜像在arch/arm/boot目录下(此步ARM架构的芯片都是类似)(vmlinux是未压缩的liunx,zImage是压缩好的liunx)。对树莓派内核源码进行配置后,接下来就要进行树莓派Linux内核的编译,需要树莓派交叉编译工具、树莓派内核。:驱动代码的编译需要一个提前编译好的内核,所以需要先编译内核,而编译内核又必须提前完成相关的源码配置;树莓派1的工程是bcmrpi_defconfig,

2401_86401589的博客 2389

树莓派(三)内核开发:下载、编译、替换内核

用串口或者远程登录树莓派后,用指令uname -a查看内核版本,发现内核信息已经是发生改变了。替换内核之前。替换内核之后。树莓派的版本已经发生了变化,说明内核替换成功了。

m0_64151334的博客 2009

进阶:ubuntu配置树莓派linux内核→编译→挂载→运行新内核

这里写目录标题一级目录二级目录三级目录 一级目录 二级目录 三级目录

华天朱 1924

树莓派(八)进阶:ubuntu配置树莓派linux内核→编译→挂载→运行新内核

树莓派(八)进阶:ubuntu配置树莓派linux内核→编译→挂载→运行新内核

weixin_50546241的博客 2114

Linux树莓派开发——配置树莓派内核源码,内核编译,更换树莓派Linux内核

树莓派Linux内核源码的下载,编译,以及更换Linux树莓派的内核方法

学习记录,交流学习 7912

树莓派3b——linux内核更新

闲来无事,试水写个博客,各位大神看看就好 也希望能帮助到别人呗

qq_35297619的博客 8233

树莓派Linux源码配置,树莓派Linux内核编译,树莓派Linux内核更换

② 编译时报错及解决方案(亲测)● dmesg报错及解决方案(亲测)① 打包zImage文件。打包zImage成树莓派可用的xxx.img② 树莓派断电,拔出树莓派的SD卡,插到读卡器,读卡器插入电脑,映射到虚拟机③ 数据拷贝,挂载U盘④安装modules。含有设备驱动文件:比如HDMI,WIFI,USB,IO等⑤安装更新 kernel.img 文件,镜像名字是kernel7.img⑥ 把kernel_new.img文件,拷贝到data1分区,起名kernel7.img,覆盖原来的kernel7.img

m0_74985965的博客 1484

从零做出可发布的2D冒险游戏!Unity全流程实战指南:从资源搭建到打包发布,新手也能跟着做

项目配置→资源导入→核心模块开发→关卡设计→调试→打包发布;玩家控制→敌人AI→道具系统→UI系统→游戏管理器→音效系统;新手开发重点:先实现核心玩法(移动、跳跃、攻击),再补充UI、音效、存档等辅助功能;调试是关键:每实现一个功能就测试,避免最后一堆bug难以定位。从零做一款完整的2D冒险游戏,能快速提升你的Unity综合能力——不仅能掌握C#编程、2D物理、UI系统,还能理解游戏开发的完整流程。先做出基础版,再慢慢迭代优化,你会发现游戏开发并没有想象中那么难。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1175

ANSYS-CFX,计算时报错,内存参数报错,return code 1【终极解决方案】

ANSYS-CFX,计算时报错,内存参数报错,return code 1【终极解决方案】 在CFX计算时经常会遇到内存不足的错误报告,有的算例网格并不多也会出现这样的问题,本文就最近遇到的内存错误问题以及解决方法进行简单的总结,以供大家参考。 1 CFX-Solver Manager内存种类 打开Define Run,面板上的Partitioner、Solver、Interpolator选项中分别都有关于内存的设置选项。当出现内存不足错误时,应该设置哪一个选项的内存参数,要看是哪一部分的内存不足。 2 C

深海民工CFDer 3万+

树莓派Linux源码配置,内核编译以及内核更换

编译完成后,可以看到源码树目录多了vmlinux这个文件,如果编译失败则没有此文件,成功后,目标zImage镜像在arch/arm/boot目录下(此步ARM架构的芯片都是类似)(vmlinux是未压缩的liunx,zImage是压缩好的liunx)。我们工作的时候,需要进行驱动代码编写,紧接着对驱动代码进行编译,但驱动代码的编译需要一个提前编译好的内核,编译内核就必须配置。驱动代码的编译需要一个提前编译好的内核,所以需要先编译内核,而编译内核又必须提前完成相关的源码配置;

m0_51430584的博客 2170

【GIS效率手册】告别C盘爆满:三步重置ArcMap默认地理数据库路径

本文针对ArcMap用户C盘空间常被占满的问题,提供了三步重置默认地理数据库路径的详细教程。通过修改地图文档属性,将数据存储位置从C盘迁移至其他驱动器,不仅能有效释放系统盘空间,还能提升数据管理效率与安全性,是GIS数据规范化管理的关键一步。

g2h3i4j5的博客 542

树莓派Linux内核配置

Linux 树莓派 内核配置

weixin_54794458的博客 1671

Python实现课程时间表

用Python实现课程表功能

life is like a play 2040

汽车BMS技术分享及其HIL测试方案

在全球碳中和目标的战略驱动下,新能源汽车产业正以指数级速度重塑交通出行格局。动力电池作为电动汽车的"心脏",其性能与安全性不仅直接决定了车辆的续航里程、使用寿命等关键指标,更深刻影响着消费者对电动汽车的市场接受度。而电池管理系统(Battery Management System, BMS)是动力电池安全运行与性能释放的核心技术支撑。

Speedgoat的博客 2683

树莓派4内核源码编译和替换

树莓派4驱动开发入门遇到的问题驱动insmod错误检查虚拟机端的内核源码版本和树莓派的内核版本查看树莓派的内核查看下载到虚拟机的内核源码版本虚拟机编译内核源码过程内核源码获取交叉编译工具链编译步骤更换树莓派内核测试insmod 遇到的问题 驱动insmod错误 在电脑虚拟机下交叉编译树莓派4的内核模块,出现了以下错误。 pi@raspberrypi:~ $ sudo insmod hello.ko insmod: ERROR: could not insert module hello.ko: Inval

weixin_0619666的博客 2077

RK3568(buildroot)利用squashfs+overlay实现嵌入式系统高可靠存储方案

本文详细介绍了在RK3568嵌入式平台上,基于Buildroot系统,利用squashfs只读根文件系统与overlayfs可写层相结合的高可靠存储方案。该方案能有效防止设备意外断电导致的系统文件损坏,通过内核配置、启动脚本编写及镜像制作,实现系统核心的只读保护与用户数据的持久化分离,显著提升嵌入式设备的现场稳定性。

weixin_29189381的博客 547

树莓派更换国内镜像源

国内链接树莓派官方镜像实在是太慢,更换国内镜像源后速度飞一般的感觉

lms99251的博客 1881

RYU+mininet——RYU

1. 使用RYU做mininet的控制器 1.1 RYU介绍与安装 RYU是一款基于python的控制器,你可用Ryu实现各种想要实现的网络功能,它可以下发或接收流表进行各种路由运算。 建议使用高版本的Ubuntu系统安装ryu,否则会有各种错误,安装过程比较简单,如下: apt install gcc libffi-dev libssl-dev libxml2-dev libxslt1-...

qq_34415266的博客 1万+

C#实现OPC客户端与S7-1200 PLC通信:工控场景稳定通信的实战指南(附完整代码)

标准化优先:OPC UA是工业通信的标准,相比直接通信,更适合多设备集成的工控场景;稳定性第一:必须封装断线重连、异常处理、资源释放逻辑,满足7×24小时运行需求;效率优化:高频采集场景优先用批量读写,避免单个变量频繁请求;细节把控:节点ID、变量类型、端口配置等细节是新手最容易踩坑的地方,建议先用UA Expert验证。这套代码和方案已在多个工业项目中落地,从单台S7-1200到多台S7-1200/1500集群,都能稳定运行。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1033

更换树莓派内核

哞哞弟

weixin_59349642的博客 1002

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

树莓派镜像备份/内核编译和更换/EC200U上网

操作涉及树莓派linux内核替换,由于我的树莓板子里跑了ROS,以免环境破坏,所以先进行镜像备份。后边涉及树莓派内核编译和替换,外接ec200u上网

hbwang的博客 661

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

树莓派内核升级001

1、简介 因为树莓派官方系统为了支持前几代树莓派的硬件,所以树莓派官方系统都是相对比较老,为了更好的利用最新的硬件架构,就想着手动升级系统。 2、方法 1、直接在树莓派主机上编译,然后修改开机启动配置文件,换成新编译的系统。 2、 交叉编译,在其他的Linux系统上编译出树莓派系统的镜像,然后就和第一次刷进树莓派系统一样。 3、命令直接升级。 3、notes 1、树莓派系统GitHub,官网,有内核、固件、工具、文档、等等github链接 ,一般内核更新较快,固件支持更新较慢,木桶效应选择能升级到的版本,比

Tlwhisper的博客 688

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: JavaScript学习笔记(二)
下一篇: 树莓派4B安装并使用TPM模块
Hopeless Loop
博客等级 码龄6年 95粉丝 15原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值