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

news/2025/2/20 11:47:26/

参考文章
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.ppmy.cn/news/991918.html

相关文章

41. linux通过yum安装postgresql

文章目录 1.下载安装包2.关闭内置PostgreSQL模块:3.安装postgresql服务:4.初始化postgresql数据库:5.设置开机自启动:6.启动postgresql数据库7.查看postgresql进程8.通过netstat命令或者lsof 监听默认端口54329.使用find命令查找了一下postgresql.conf的配置位置10.修改postgre…

Java在线OJ项目(三)、前后端交互API模块

Java在线OJ项目(三)、前后端交互API模块 1. 客户端向服务器请求所有题目 或者 单个题目前端获取所有题目获取一个题目 后端 2. 后端读取前端提交的代码,进行编译运行,返回结果前端提交代码后端处理 1. 客户端向服务器请求所有题目…

Flowable-中间事件-消息中间捕获事件

定义 消息中间事件指在流程中将一个消息事件作为独立的节点来运行。它是一种捕获事件,当流程 执行到消息中间事件时就会中断在这里,一直等待被触发,直接到该事件接收到相应的消息后,流 程沿后继路线继续执行。消息事件是一种引用…

数据库力扣刷题(组合两个表)

知识点 一个概念:架构,架构是指用于存储数据库对象的一个命名空间。用于管理数据库对象子集,这样极大的方便地方便并简化了管理数据库对象。 175.组合两个表 题目描述:编写一个SQL查询来报告 Person 表中每个人的姓、名、城市和州…

《Python入门到精通》元组 Tuple 详解,元组常用函数

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 「元组」使用小括号()包裹,「元素」之间使用逗号,间隔。元组与列表相…

通过String字符生成base64编码在生成图片

* base64转图片 //对字节数组字符串进行Base64解码并生成图片 * param base64str base64码 * return // param savePath 图片路径private static final String savePath"image_ver\\verifyCode"; 判断是否为base64编码 public static void mainDD…

力扣每日一题--2050. 并行课程 III(拓补排序例题)

题目传送门 题目描述: 给你一个整数 n ,表示有 n 节课,课程编号从 1 到 n 。同时给你一个二维整数数组 relations ,其中 r e l a t i o n s [ j ] [ p r e v C o u r s e j , n e x t C o u r s e j ] relations[j] [prevCours…

超全整理,Jmeter性能测试-常用Jmeter第三方插件详解(超细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Jmeter作为一个开…