用Ubuntu交叉编译Linux内核源码并部署到树莓派4B上

news2025/1/19 17:08:02

参考文章
1. 配置交叉编译环境
之前在ubuntu上配置过了,直接跳过

2.获取Linux内核源码

Linux内核源码链接

  • 到链接里面选择自己合适版本的内核源码下载下来,然后传到ubuntu中进行解压
    在这里插入图片描述

3.Linux内核源码的配置

参考文章

			厂家配linux内核源码,比如说买了树莓派,树莓派linux内核源码
		第一种方式:
			cp 厂家.config .config
		第二种方式:
			make menuconfig 一项项配置,通常是基于厂家的config来配置
		第三种方式:
			完全自己来

我使用的是第一种根据厂家提供的.config文件来进行配置

1)内核配置:
首先要进入到Linux内核源码的目录里面
获取bcm2711_defconfig的配置到 .config里。

树莓派4b配置的是bcm2711_defconfig
树莓派3b则是bcm2709_defconfig

执行

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

在这里插入图片描述

2)驱动的配置

  • 安装必要的库:
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
  • 执行menuconfig
 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig

然后会弹出这样的一个框图
在这里插入图片描述
可以进行内核驱动的一些相关配置
如果没有什么改的,可以不用执行这一步

4.编译和打包内核源码
1)编译

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

在这里插入图片描述
然后编译出错,是工具不行,直接安装最新工具

sudo apt install libssl-dev

然后编译成功了
*注意:编译成功后,看到源码树目录多了vmlinux,失败则无此文件
成功后,目标zImage镜像arch/arm/boot底下
*
在这里插入图片描述
在这里插入图片描述

2)打包zImage成树莓派可用的xxx.img
参考文章

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

在这里出现了bug

提示:ash: ./scripts/mkknlimg: No such file or directory
没有打包工具mkknlimg,尝试了很多方法都不行,后来发现打包工具mkknlimg被淘汰了
方法1:重新下载一个老版本的源码Linux-rpi-4.14.y.zip,unzip解压,在文件夹scripts里找到打包工具mkknlimg,将该打包工具拷贝到现在源码的scripts目录下
在这里插入图片描述

方法2:下载tool_master工具包找到imagetool-uncompressed.py

sudo ./imagetool-uncompressed.py 内核源码目录的绝对路径/arch/arm/boot/zImage

打包成功后,在源码目录下课以找到kernel_new.img这个文件
在这里插入图片描述

5.挂载树莓派sd卡,并安装编译好的内核源码到sd卡

1)先建立两个空文件夹,方便挂载sd卡

mkdir data1 data2

dmesg查看内核打印信息如出现 sdb1 sdb2,则继续下列操作
挂载U盘

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

以下用[fat]表示boot挂载的路径,[ext4]表示ext4挂载的路径。

2)安装modules, 设备驱动文件

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=[ext4] modules_install

操作ext4分区,需要root权限。

3)安装更新 kernel.img 文件,注意镜像名字是kernel7.img
更新之前先备份,防止更换内核后树莓派启动失败,找不回原先的内核

```bash
cd [fat]
cp kernel7.img kernel7old.img

前面已经用 mkknlimg 工具打包了kernel_new.img文件了,把它复制到boot分区并配置使用即可

cp kernel_new.img [fat]/

然后编辑 [fat]/config.txt 文件,在最后加入一行:

kernel=kernel_new.img

也可以把编译新生成的拷贝到[fat]/中,起名kernel7.img

cp kernel_new.img [fat]/kernel7.img

这种的话直接不用修改[fat]/config.txt 文件

4)复制其他相关文件

sudo cp arch/arm/boot/dts/*.dtb [fat]/
sudo cp arch/arm/boot/dts/overlays/*.dtb* [fat]/overlays/
sudo cp arch/arm/boot/dts/overlays/README [fat]/overlays/

6.将sd卡插回树莓派用串口登录的方式查看树莓派的内核输出日志是否正常以及能否正常登录
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/813578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据可视化库pyecharts简单入门

文章目录 0. 介绍1. 快速开始1.1 安装1.1.1 pip安装1.1.2 源码安装 1.2 快速上手1.2.1 柱状图1.2.2 链式调用1.2.3 使用options选项配置参数(一切皆options)1.2.4 渲染成图片文件1.2.5 使用主题1.2.6 地图 2. 全局配置项2.1 使用指南2.2 常用全局配置项2…

直呼牛逼!阿里最新 SpringBoot 进阶笔记涵盖了 SpringBoot 所有骚操作

相信从事 Java 开发的朋友都听说过 SSM 框架,老点的甚至经历过 SSH,说起来有点恐怖,比如我就是经历过 SSH 那个时代未流。当然无论是 SSM 还是 SSH 都不是今天的重点,今天要说的是 Spring Boot,一个令人眼前一亮的框架…

Intellij IDEA有什么奇技淫巧?

IDEA全称 IntelliJIDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、创新的GUI设计等方面的功能可以说是超常的。 idea下载…

【大数据趋势】7月30日 汇率,恒指期货的大数据趋势概率分析。

1. 数据源头之一 : 汇率变化 从程序模拟趋势来看,美元在持续弱势状态,周线上正在构建一个新的下跌趋势,而且正在反抽过程中,即将完成,如果没有外部干预,会顺势往下。从月线来看,高点逐步降低&a…

【论文笔记】神经网络压缩调研

神经网络压缩调研 背景现有的深度模型压缩方法NetWork Prunning 网络剪枝设计结构化矩阵知识蒸馏权值共享Parameter Quantization(参数量化)量化和二进制化伪量化Architecture Design(Depth Separable Convolution)分解卷积 背景 …

【Linux】进程轻松入门

目录 一, 冯* 诺依曼体系结构 1,存储结构 ​编辑 二, 操作系统 1,概念 2,设计OS的目的 3,定位 4,如何理解 "管理" 5, 总结 三,进程 1. 概念 那么…

【C语言所有操作符详解2】

目录 条件操作符 逗号表达式 下标引用、函数调用和结构成员 [ ] 下标引用操作符 ( ) 函数调用操作符 访问一个结构的成员 表达式求值 隐式类型转换 隐式类型转换 整型提升 整型提升的意义: 如何进行整型提升呢? 算术转换 操作符的属性 操作符优先级 …

Redis系列一:介绍

介绍 The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker. 相关资源 Redis 官网:https://redis.io/ 源码地址:https://github.com/redis/redis Redis 在线测试&#…

RS232转ETHERCAT连接ethercat通讯过程描述

我们将为大家介绍一款强大的设备——捷米JM-ECT-RS485/232通讯网关。这是一款自主研发的ETHERCAT从站功能的网关,它能够将ETHERCAT网络和RS485或RS232设备无缝连接。 这款网关在ETHERCAT总线和RS485或RS232总线中均能发挥主站或从站的作用。它的最大特点就是解决了…

企业情报管理系统

软件简介 基于 SpringBoot 的权限管理系统,易读易懂、界面简洁美观。 核心技术采用 Spring、MyBatis、Shiro 没有任何其它重度依赖。直接运行即可。 平台简介 企业情报管理系统,主要包括情报分析、文章情报、报告情报、数据情报、数据管理、AI管理、平…

动态规划 丑数(三指针 谁先创造谁先功德++)

无语这是medium题目吗 先放暴力解法 反正超时 无法ac本题 2, 3, 5 这前 3 个丑数一定要乘以其它的丑数, 所得的结果才是新的丑数 合并过程中重复解的处理 nums2, nums3, nums5 中是存在重复的解的, 例如 nums2[2] 32, nums3[1] 23 都计算出了 6 这个结…

200+行代码写一个简易的Qt界面贪吃蛇

照例先演示一下: 一个简单的Qt贪吃蛇,所有的图片都是我自己画的(得意)。 大致的运行逻辑和之前那个200行写一个C小黑窗贪吃蛇差不多,因此在写这个项目的时候,大多情况是在想怎么通过Qt给展现出来。 背景图…

【Minio中间件】上传图片并Vue回显

流程: 目录 1.文件服务器Minio的安装 1.1 下载Minio安装后,新建1个data文件夹。并在该安装目录cmd 敲命令。注意不要进错目录。依次输入 1.2 登录Minio网页端 1.3 先建1个桶(buckets),点击create a bucket 2. Spr…

使用docker部署springboot微服务项目

文章目录 1. 环境准备1. 准备好所用jar包项目2.编写相应的Dockerfile文件3.构建镜像4. 运行镜像5. 测试服务是否OK6.端口说明7.进入容器内8. 操作容器的常用命令 1. 环境准备 检查docker是否已安装 [rootlocalhost /]# docker -v Docker version 1.13.1, build 7d71120/1.13.…

LabVIEW开发航天器动力学与控制仿真系统

LabVIEW开发航天器动力学与控制仿真系统 计算机仿真是工程设计和验证的非常有用的工具。它节省了大量的时间、金钱和精力。航天器动力学与控制仿真系统由LabVIEW程序开发,它是模拟航天器等动态系统的有用工具。还可轻松与硬件连接并输出真实信号。 项目采用系统工…

《Kali渗透基础》11. 无线渗透(一)

kali渗透 1:无线技术特点2:IEEE 802.11 标准2.1:无线网络分层2.2:IEEE2.3:日常使用标准2.3.1:802.112.3.2:802.11b2.3.3:802.11a2.3.4:802.11g2.3.5:802.11n …

一维(1D)CNN模型下轴承故障诊断(Python,TensorFlow框架下,很容易改为其它模型,解压缩后可以直接运行,无需修改任何目录)

1.数据集 使用凯斯西储大学轴承数据集,一共有4种负载下采集的数据,每种负载下有10种 故障状态:三种不同尺寸下的内圈故障、三种不同尺寸下的外圈故障、三种不同尺寸下的滚动体故障和一种正常状态。 2.模型(1DCNN) 使…

【Git】git reset 版本回退 git rm

前言 在日常开发时,我们经常会需要撤销之前的一些修改内容或者回退到之前的某一个版本,这时候reset命令就派上用场了 git reset 用法1——所有文件回退到某个版本 1、使用git reflog查看要回退的commit对象 2、使用git reset [-- hard/soft /mixed] …

26 用lsqnonlin求解最小二乘问题(matlab程序)

1.简述 函数语法 x lsqnonlin(fun,x0) 函数用于: 解决非线性最小二乘(非线性数据拟合)问题 解决非线性最小二乘曲线拟合问题的形式 变量x的约束上下限为ub和lb, x lsqnonlin(fun,x0)从x0点开始,找到fun中描述的函数的最小平方和。函数fu…

【前端知识】React 基础巩固(三十九)——React-Router的基本使用

React 基础巩固(三十九)——React-Router的基本使用 一、Router的基本使用 Router中包含了对路径改变的监听,并且会将相应的路径传递给子组件。 Router包括两个API: BrowserRouter使用history模式 HashRouter使用hash模式(路径后面带有#号…