树莓派4.14内核替换

2023-05-16

原文来自青木大哥
https://blog.csdn.net/weixin_45309916/article/details/107525503

为什么要进行树莓派的源码配置呢?
是为了驱动代码的编写,驱动代码的编译需要一个提前编译好的内核,编译内核就必须配置,配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核

1.获取树莓派源码,安装好交叉编译工具
源码及工具: https://github.com/raspberrypi/
交叉编译工具的具体安装https://blog.csdn.net/qq_46777053/article/details/110221159
编译工具安装好后,所以的make命令都要指明一些环境变量

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7

ARCH=arm 指定为RAM框架。指明当前要编译arm,虽然树莓派是64位的,这里仍然选择arm,而不是arm64。
CROSS_COMPILE 指明交叉工具链名称。
KERNEL 指明kernel类型,树莓派1设置为kernel,树莓派2、3设置为kernel7。

2.配置.config
linux源码中有很多工程:
树莓派1的工程是bcmrpi_defconfig;
树莓派2、3的工程是bcm2709_defconfig。

方法一:(1)cp 厂家.config .config
比如: 厂家配linux内核源码,比如说买了树莓派,树莓派linux内核源码
在源码目录下执行

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig

make bcm2709_defconfig 为主要核心命令

方法二:一项项的配置,此方法需要安装ncurse库
安装必要的库

sudo apt-get install bc
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install zlib1g:i386
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5

执行以下语句进行配置

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

进入配置页面
在这里插入图片描述
上下左右键进行操作
Enter进入下一个子菜单(末尾带箭头的会有子菜单)
" M " 模块方式生成驱动文件xxx.ko 系统启动后,通过命令inmosd xxx.ko 加载
" * " 编译进内核 zImage包含了驱动
对需要的驱动进行筛选,将其配置为空格,达到内核裁剪的目的

方法三:完全自己来

3.编译

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs

make -j4 zImage modules dtbs 核心主要命令
-j4 采用四核处理器来编译
zImage 编译生成内核镜像
modules 编译生成驱动模块(树莓派独有的)
dtbs 编译生成配置文件等等 (树莓派独有的)

编译成功后,看到源码树目录多了vmlinux(没有压缩的Linux),失败则无此文件,成功后,目标zImage镜像在arch/arm/boot底下

对zImage进行打包,运用内核源码树目录下的scripts文件在的脚本文件进行打包,打包生成kernel_new.img,

./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img

4.挂载树莓派SD卡
dmesg 命令是查看内核信息,有设备接入的时候,内核会打印驱动层面的内容,通过此查看SD卡是否接入ubuntu系统电脑
出现内核打印以下信息,说明以及接入

sdb:sdb1 sdb2 

把树莓派的sd卡插入ubuntu系统电脑,树莓派的sd卡有两个分区:
一个fat分区,是boot相关的内容,kernel的img文件就放在这个分区里;
一个是ext4分区,也就是系统的根目录分区。
fat分区可以不用root权限操作,ext4分区需要root权限操作。
(1)创建两个文件夹

mkdir data1 data2

(2)挂载sdb1和sdb2 到 data1 data2

sudo mount /dev/sdb1 data1   一个fat分区,是boot相关的内容,kernel的img
sudo mount /dev/sdb2 data2   一个是ext4分区,也就是系统的根目录分区。

然后就能查看SD中的数据,也能对SD中的数据进行操作

5.安装modules( 设备驱动文件: hdmi usb wifi io 等等)
在linux内核源码树目录下执行

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/xxx/data2 modules_install

INSTALL_MOD_PATH=/home/xxx/data2 data2的绝对路径
操作ext4分区,需要root权限,前边加上sudo

6.安装更新 kernel.img (注意镜像名字是kernel7.img)
先备份kernel7.img ,避免刷机失败树莓派无法启动
cd /home/xxx/data1
cp kernel7.img kernel7OLD.img
然后将在Linux源码树目录下的kernel_new.img 拷贝到 /home/xxx/data1
将kernel7.img覆盖

cp kernel_new.img  /home/xxx/data1/kernel7.img

7.拷贝配置文件

	cp arch/arm/boot/dts/.*dtb* /home/xxx/data1
	cp arch/arm/boot/dts/overlays/.*dtb* /home/xxx/data1/overlays/
	cp arch/arm/boot/dts/overlays/README  /home/xxx/data1/overlays/

8.断开SD开的连接 把SD开的连接接到电脑上
1.修改codline.txt文件

dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

2.修改config.tex文件**
在文件的末尾加上(如果有这句,就不需要加),目的是断开蓝牙占用串口

dtoverlay=pi3-miniuart-bt

3.通过串口登录树莓派
通过串口登录树莓派,目的是看操作系统能否启动
uname -r 查看内核版本
原先内核
在这里插入图片描述
更换内核后
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树莓派4.14内核替换 的相关文章

  • ROS--URDF集成Gazebo仿真小车和rviz结合

    ROS URDF集成Gazebo仿真小车 实现流程 需要编写封装惯性矩阵算法的 xacro 文件 为机器人模型中的每一个 link 添加 collision 和 inertial 标签 xff0c 并且重置颜色属性 在 launch 文件中
  • 使用D435i深度相机运行ORB-SLAM3

    下载安装链接 下载ORB SLAM3地址 xff1a git clone https github com UZ SLAMLab ORB SLAM3 git eigen3多版本安装 xff1a https blog csdn net wei
  • keil5使用一个父工程打开多个子工程文件

    1 首先工程文件需要在同样的文件夹里 2 打开keil5 xff0c 选择Project New Multi Project Workspace 3 将工程文件建立在刚刚的总文件夹里面 xff0c 命名保存 4 弹出此页面 xff08 Cr
  • ​Android动态加载so!这一篇就够了!

    作者 xff1a Pika 链接 xff1a https juejin cn post 7107958280097366030 对于一个普通的android应用来说 xff0c so库的占比通常都是巨高不下的 xff0c 因为我们无可避免的
  • HTTP是什么

    HTTP是什么 HTTP是什么 HTTP协议是Hyper Text Transfer Protocol xff08 超文本传输协议 xff09 的缩写 是用于从万维网 xff08 WWW World Wide Web xff09 服务器传输
  • error: array has incomplete element type ‘char []‘

    原代码 xff1a void explain input char int char a 报错 xff1a error array has incomplete element type 39 char 39 原因 xff1a 可以用二维数
  • STM32串口接收十六进制数转为十进制数(包含负数)

    外部设备传输给STM32单片机十六进制数 例如0x09c4 代表2500 0xff38 代表 200 xff08 并不是65336 xff0c 因为这是有符号的 xff09 串口接收处理函数 接收到 5A A5 06 83 55 00 01
  • 无人机-3无人机ROS应用与开发

    一 ROS是什么 二 为什么要学习ROS 三 怎么学习ROS https www cnblogs com masbay p 10745170 html TF坐标系指机器人在现实世界会有坐标的变换 xff0c ROS已经将其算成固定的程序 x
  • ROS入门-4.安装ROS系统(ubuntu20.04版本安装ros的noetic版本)

    ubuntu20 04版本安装ros的noetic版本 1 添加软件源2 添加密钥3 更新4 安装ROS5 初始化rosdep6 设置环境变量7 测试ROS安装是否成功 1 添加软件源 2 添加密钥 3 更新 4 安装ROS 5 初始化ro
  • 数学建模-12.预测模型

    灰色预测 灰色系统 GM 1 1 模型 xff1a Grey Model GM 1 1 原理介绍 呢么 xff0c 准指数规律的检验 xff1f 发展系数 a 与预测情形的探究 发展系数越小预测的越精确 GM 1 1 模型的评价 在使用GM
  • 数学建模-数学规划模型

    数学规划模型 一 概述 1 什么是数学规划 xff1f 运筹学的一个分支 xff0c 用来研究在给定条件下 即约束条件 xff0c 如何按照某一衡量指标 xff08 目标函数 xff09 来寻求计划 管理工作中的最优方案 即求目标函数在一定
  • 机器学习西瓜书学习记录-第四章 决策树

    第4章 决策树 4 1基本流程 决策树 xff0c 一类常见机器学习方法 xff0c 希望从给定训练集学得一个模型用以对新示例进行分类 一般 xff0c 一棵决策树包含一个根结点 若干个内部结点和若干个叶结点 xff1b 叶结点对应于决策结
  • 机器学习西瓜书学习记录-第五章 神经网络

    第5章 神经网络 5 1神经元模型 神经网络中最基本的成分是神经元模型 M P神经元模型 xff0c 又称 阈值逻辑单元 在模型中 xff0c 神经元接收到来自n个其他神经元传递过来的输入信号 xff0c 这些输入信号通过带权重的连接进行传
  • 机器学习西瓜书学习记录-第六章 支持向量机

    第6章 支持向量机 移步b站学习 学习贴
  • SurfaceFlinger模块

    SurfaceFlinger是一个系统服务 xff0c 作用就是接受不同layer的buffer数据进行合成 xff0c 然后发送到显示设备进行显示 SurfaceFlinger进程是什么时候起来的 xff1f 在之前的Android低版本
  • STM32-串口通信实验

    一 通信接口背景知识 1 通信的两种方式 xff1a 并行通信 传输原理 数据各个位同时传输 优点 速度快缺点 占用引脚资源多 串行通信 传输原理 数据按位顺序传输 优点 占用引脚资源少缺点 速度相对较慢 2 串行通信 按照数据传送的方向
  • UDP介绍,编程流程

    介绍 xff1a 面向无连接的用户数据报协议 xff0c 不需要建立任何连接 xff0c 目的主机接收后不需要确认 UDP特点 xff1a 相比TCP速度快一些简单的应用程序直接使用 不需要加密对于海量数据不采用UDP广播和多播必须采用UD
  • 数据结构-线性表的链式存储(包含代码实现)

    线性表的链式表示和实现 链式存储结构 结点在存储器中的位置是任意的 xff0c 即逻辑上相邻的数据元素在物理上不一定相邻线性表的链式存储结构又称为非顺序映像或链式映像 用一组物理位置任意的存储单元来存放线性表的数据元素这组存储单元既可以是连
  • Android6.0以上高危权限动态申请

    1 在项目的Manifest xml中添加静态权限 拨打电话 lt uses permission android name 61 34 android permission CALL PHONE 34 gt 发送短信 lt uses pe
  • Linux入学—共享文件夹(保姆教程)

    序言 自从上学期上完课以来就没有用过Linux xff0c 最近因为学习传感器数据上传云端的需要 xff0c 安装了Linux xff0c 在开始装jdk的时候需要下载jdk的压缩包 xff0c 需要通过windows上传到Ubuntu 之

随机推荐

  • Ubuntu下安装java环境及idea

    前言 一 JDK的安装 二 配置环境 1 在 系统中配置java环境 三 idea社区版的安装 前言 提示 xff1a 这里可以添加本文要记录的大概内容 xff1a 由于自己的学习需要 xff0c 这里需要用到在Linux系统下的Java
  • stm32f103 光敏传感器BH1750 实现串口回显

    在制作智能花盆的过程中 xff0c 使用了光敏传感器BH1750 因为在网上找了很多都是关于51的 xff0c 32方面的比较少 xff0c 所以这里记录一下BH750的驱动代码 链接 xff1a https pan baidu com s
  • STM32中HAL库使用-串口接收(一)

    1 中断接收 1 1先看中断接收的流程 xff08 以 USART2 为例 xff09 在启动文件中找到中断向量 USART2 IRQHandler 找到 USART2 IRQHandler 的函数定义 可以看到这里又转到另一个函数里去了
  • STM32中HAL库使用-串口发送(二)

    2 中断发送 2 1发送中断的触发流程 由于在STM32中usart2的入口中断只有一个 xff1a 就是上图的中断向量表中红框标出来的 其他的所有中断其实都是从这里出发的 xff0c 我们再和捋接收一样捋一遍发送 首先是USART2 IR
  • Ubuntu20.04下编译安装ORBSLAM2_with_pointcloud_map总结

    与此物大战六个小时 xff0c 终于解决所有问题 xff0c 写此短文记录一下 一 在github上下载源码后 xff0c 解压缩 xff0c 如下 进行g2o with orbslam2的编译 1 报错信息 xff1a ORBSLAM2
  • Android使用ASM修改函数

    目录 参考文章 Android 编译插桩 xff08 一 xff09 xff1a ASM https github com yxhuangCH CSLearn blob master android Android 20 E7 BC 96
  • ORB_SLAM2配置——基于Ubuntu20.04+ROS+gazebo仿真

    一 引言 ORB SLAM2 xff0c 它是基于单目 双目或RGB D相机的一个完整的SLAM系统 xff0c 其中包括地图重用 回环检测和重定位功能 这个系统可以适用于多种环境 xff0c 无论是室内小型手持设备 xff0c 还是工厂环
  • opencv 打开双目摄像头只能采集一个摄像头的问题,及左右目图像分割成两幅图

    一 opencv 打开双目摄像头只能采集一个摄像头的问题 本人采用单USB接口的双目摄像头 xff0c 总是只打开左摄像头的图 xff0c 经摸索后发现主要就是分辨率的问题 xff0c 如果分辨率设置正确 xff0c 便可以打开左右目合成图
  • 基于opencv(c++)和matlab的usb双目相机标定

    本人由于实际需要入手了一款双目免驱usb摄像头 xff0c 因为需要做深度估计 xff0c 故需要标定内参 xff0c 双目相机标定主要是为了获得摄像头的内参 f 1 dx 1 dy cx cy 畸变参数 k1 k2 k3 p1 p1 和外
  • 解决在编译各类改版orbslam时的undefined reference to ****************************问题

    如上面这个问题 xff0c 可以参考这个链接 xff1a 参考链接 参考上面的链接 xff0c 我作出的修改具体为 xff08 1 xff09 移动所缺少的文件 xff08 如本例的libopencv core so 4 2 0 xff09
  • 贝叶斯滤波与卡尔曼滤波(一)

    一 绪论 贝叶斯滤波 xff1a 通过概率统计的方法 xff08 贝叶斯公式 xff09 xff0c 对随机变量进行处理 xff0c 来减小他的不确定度 这里所指的随机变量和教材中所说的变量并不是一回事 xff0c 贝叶斯滤波中所提到的随机
  • 学习ROS-Academy-for-Beginners-noetic,修改记录

    一 编译安装ROS Academy for Beginners noetic 可以参考我之前的博客ROS Academy for Beginers noetic安装教程 之后可以看到里面提供了很多例程 xff0c 包括 软件包 内容 rob
  • STM32的C与汇编语言混合编程

    目录 一 在keil5里面利用C语言调用汇编函数 1 建立新工程 2 编辑代码 C语言代码编辑 xff1a 汇编语言编辑 3 编译调试 二 改写汇编程序 1 C程序改写 2 汇编程序改写 3 编译调试 三 在汇编程序中调用C语言中的函数 一
  • 网络数据传输时的大小端问题

    socket网络字节序以及大端序小端序 不同CPU中 xff0c 4字节整数1在内存空间的存储方式是不同的 4字节整数1可用2进制表示如下 xff1a 00000000 00000000 00000000 00000001 有些CPU以上面
  • linux知识点——CMakeLists.txt中调用自己编写的so库

    文章目录 1 问题2 解决2 1 cmake文件方法2 2 暴力链接库方法 3 例子3 1 生成libposelib so3 2 调用so库3 3 find package原理 参考 xff1a https blog csdn net qq
  • jetson tx2刷机教程 (成功安装ubuntu18.04+Jetpack4.6.2+CUDA10.2+CUDNN8.2)

    TX2 刷机需要准备一台ubuntu系统的电脑 xff0c 没有ubuntu系统电脑在Windows电脑中安装虚拟机也可 本文教程直接使用的是ubuntu系统的电脑 主机端 xff08 电脑端 xff09 环境配置 在主机上安装sdkman
  • 新能源汽车的三十年黄金赛道,Android程序员认准车载就对了!

    前言 中汽协预计 xff0c 2023年中国 汽车市场总销量为2760万辆 xff0c 同比增长3 其中 xff0c 国内乘用车累计销量预计为2380万辆 xff0c 同比增长1 3 xff1b 商用车累计销量预计为380万辆 xff0c
  • STM32-USART串口初始化配置

    一 串行通信的基本概念 1 同步通信和异步通信 通信 xff0c 最少要两个对象 xff0c 一个收 xff0c 一个发同步通信 xff1a 通信双方根据同步信号进行通信的方式 异步通信 xff1a 数据传输速度匹配依赖于通信双方有自己独立
  • 51单片机实现类似于Arduino中micros()、millis()函数功能并用于接收ppm信号

    最近想要给小车添加航模遥控器遥控功能 xff0c 毕竟航模遥控器拿在手里还是很有质感 xff0c 手感很不错的 选择使用ppm信号 xff0c ppm信号相关参考 xff1a PPM相关 Arduino中micros 函数返回一个单位为无符
  • 树莓派4.14内核替换

    原文来自青木大哥 https blog csdn net weixin 45309916 article details 107525503 为什么要进行树莓派的源码配置呢 xff1f 是为了驱动代码的编写 xff0c 驱动代码的编译需要一