树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核

目录

  • 一、树莓派Linux源码配置(适合树莓派)
    • 总体概述
    • 配置的三种方式
      • 1.照搬厂家的配置(使用这种方式)
      • 2.参考厂家的配置(感受一下)
      • 3.完全自主配置(需要一定工作经验)
  • 二、树莓派Linux内核编译
  • 三、树莓派挂载新内核
    • 总体概述
    • 1.打包zImage文件成kernel_new.img(用linux源码包里的工具)
    • 2.树莓派sd卡挂载到ubuntu上(两个分区:boot kernal/根文件)
    • 3.安装modules
    • 4.拷贝新kernel.img文件
    • 5.拷贝其他文件到fat
  • 四、在树莓派上运行
    • 1.用window配置sd卡文件方便观看启动过程
    • 2.sd卡插回树莓派
    • 3.打开secureCRT 串口方式登陆树莓派

一、树莓派Linux源码配置(适合树莓派)

总体概述

在这里插入图片描述

配置的三种方式

参照博文(一般厂家会给到这样的操作手册,没有就凉凉了,玩不了):http://nicekwell.net/blog/20171108/shu-mei-pai-nei-he-kai-fa-shuo-ming-xia-zai-dai-ma-bian-yi-ti-huan-nei-he.html

前提:交叉编译工具要先安装好,在我的博文树莓派内核开发准备第一节有讲到。因为内核配置全部在宿主机ubuntu下完成的,必须要有交叉编译工具。

1.照搬厂家的配置(使用这种方式)

在内核源码目录文件下搜索厂家配置文件(此步骤作为了解)
可以找到树莓派3、树莓派4使用的厂家配置文件bcm2709_defconfig

find . -name *_defconfig

在这里插入图片描述

  • 执行命令
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig

注意:这个命令要在路径/linux-rpi-4.14.y(存放的源码目录文件)下执行,否则提示 “make: *** 没有规则可制作目标“bcm2709_defconfig”。

在这里插入图片描述

  • 执行结果
    可以发现 厂家config 变成了 .config

在这里插入图片描述

2.参考厂家的配置(感受一下)

基于厂家的config,用make menuconfig一项项配置,通常需要自主增删一些驱动

首先要安装必要的库

  • 系统自带,一般都有
sudo apt-get install bc
  • 必须
sudo apt-get install libncurses5-dev libncursesw5-dev
  • 必须
sudo apt-get install zlib1g:i386
  • ↓ 若这一步提示“E: 无法定位软件包 lib32ncurses5”可以先留着不做
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5

执行menuconfig

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

可以看到以下界面

在这里插入图片描述
在这里插入图片描述

回车 selects submenus 进入子菜单带—>的
[ ]表示略过的,不参与编译
空格键切换状态

驱动的两种加载方式:

  • [*] built-in:表示编译进了内核,zImage包含了驱动。
  • [M] modularizes:表示以模块的方式生成驱动文件xxx.ko。系统启动后,通过命令inmosd xxx.ko临时加载(后面的驱动就是这么进行的)

3.完全自主配置(需要一定工作经验)

可以工作2-3年后在涉猎。

二、树莓派Linux内核编译

在这里插入图片描述

编译指令:

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

是否成功编译?

可以看到在内核的源码树目录下生成了vmlinux(没有压缩的linux)即为成功。
在这里插入图片描述

而我们真正想要的目标镜像是/arch/arm/boot/zImage
在这里插入图片描述

三、树莓派挂载新内核

总体概述

在这里插入图片描述

1.打包zImage文件成kernel_new.img(用linux源码包里的工具)

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

树莓派的镜像文件结尾就是.img,这个文件就是要放到sd卡中的文件

2.树莓派sd卡挂载到ubuntu上(两个分区:boot kernal/根文件)

树莓派断电,把SD卡插入读卡器后按照下图配置
在这里插入图片描述

查看内核信息,有设备接入的时候内核会打印出驱动层面的信息。

dmesg

接入成功!
在这里插入图片描述

sdb1,2分别是树莓派sd卡的两个分区
①一个fat分区。是boot相关的内容,kernel的img文件在此分区。
②一个是ext4分区,也就是系统的根目录分区。(cd /进入的就是系统的根目录)

这里我在我的ubuntu桌面底下(/Desktop)新建两个文件夹

mkdir data1
mkdir data2

然后分别关联到sd卡的两个分区中(必须挂载到文件夹才能看到里面内容)

sudo mount /dev/sdb1 data1
sudo mount /dev/sdb2 data2

查看data1,2分别存放的是什么
在这里插入图片描述
可以看到data1为fat分区(boot、kernal相关),data2为ext4分区(系统根目录相关),要对应好。

老陈这里的boot用的之前刷机刷好的,没有重新进行移植,下面直接讲了内核的移植。

3.安装modules

modules就是内核驱动相关,少了这一步类似网卡,wifi,usb,HDMI这些都用不了

注意:操作的是ext4分区,对应的就是data2

来到linux-rpi-1.14.y文件路径下操作

安装modules的指令是:

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

实际使用的时候要将“[ext4]”更改为自己data2的绝对路径 ,这里根据我自己的文件路径修改成:

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

可以看到很多的.ko文件,这与驱动相关。出现的提示make: arm-linux-gnueabihf-gcc: Command not found不用管它。

在这里插入图片描述

4.拷贝新kernel.img文件

注意查看原来镜像名字是kernel7.img

ls /home/zhugl/Desktop/data1

在这里插入图片描述
因为原来的这个kernel7.img将要被覆盖(树莓派镜像规定必须要定义成这个名字),为了防止刷机失败,或者拷贝过程中文件损坏,需要提前用别名备份这个文件。打开新的终端(ctrl alt t)(方便操作罢了),进入其存放路径(cd /home/zhugl/Desktop/data1)

sudo cp kernel7.img kernel7OLD.img

从源码树目录(linux-rpi-4.14.y)拷贝kernel_new.img(是由zImage打包而成)到data1并且命名为kernel7.img覆盖原来的文件

sudo cp kernel_new.img /home/zhugl/Desktop/data1/kernel7.img

检查拷贝是否有问题

md5sum显示文件的唯一编码号,若相同则为同一个文件

md5sum kernel_new.img
md5sum /home/zhugl/Desktop/data1/kernel7.img

在这里插入图片描述
编码号一样,拷贝正确。

5.拷贝其他文件到fat

都是从目录linux-rpi-4.14.y进行拷贝

这些配置文件是为了能够加载驱动以及一些其他的配置。

————————①

  • 更改前
cp arch/arm/boot/dts/.*dtb* [fat]/
  • 根据实际更改后
sudo cp arch/arm/boot/dts/.*dtb* /home/zhugl/Desktop/data1/

————————②

  • 更改前
cp arch/arm/boot/dts/overlays/.*dtb* [fat]/overlays/
  • 根据实际更改后
sudo cp arch/arm/boot/dts/overlays/.*dtb* /home/zhugl/Desktop/data1/overlays/

————————③

  • 更改前
    README有没有都行
cp arch/arm/boot/dts/overlays/README [fat]/overlays/
  • 根据实际更改后
sudo cp arch/arm/boot/dts/overlays/README /home/zhugl/Desktop/data1/overlays/

四、在树莓派上运行

1.用window配置sd卡文件方便观看启动过程

如果之前在做别的项目,例如串口编程时用于串口数据交互和传输会把这个配置信息删掉,这时需要添加回来,用来观察操作系统启动过程
在这里插入图片描述
点击选择断开连接sd卡,使其重新挂载在windows上。
在这里插入图片描述
打开sd卡中boot文件夹下的cmdline.txt

按照上图位置添加(直接在虚拟机上修改这个配置文件也可以)

console=ttyAMA0,115200

2.sd卡插回树莓派

sd卡插回树莓派,USB-TTL连接。注意树莓派要在断电下操作

3.打开secureCRT 串口方式登陆树莓派

树莓派重新上电,可以看到启动正常。

如何确定内核已经更换了呢?

查看内核版本号

uname -r

原来版本为4.14.98-v7
在这里插入图片描述
所以成功啦!

有意思的是,之前在上一个内核版本树莓派里编写的一些Demo文件都在!而且以前配置的SSH登录、固定IP地址配置都原样不动!所以内核新配置的那两个分区并没有改变以前的一些文件和配置,因为我们只是更新了kernal.img,Uboot和根文件系统都没改变。
在这里插入图片描述

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

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

相关文章

xshell连接linux出现乱码

今天用Xshell连接linux,查看一个脚本,里面有中文写的注解,出现了乱码,所以记录一下,以便下次用到,也可以帮助遇到同样问题的小伙伴。 以下是乱码的截图: 我们可以照着下面的方式更改编码&#x…

阡陌路-车行天下之汽车基础知识

汽车基础知识 1、什么是ABS   ABS是Anti-LockBrakeSystem的英文缩写,翻译过来可以叫做“刹车防抱死系统”。在没有ABS时,如果紧急刹车一般会使轮胎 抱死,由于抱死之后轮胎与地面是滑动摩擦,所以刹车的距离会变长。如果前轮锁死…

java版本号分段比较_Java实现比较版本号

涉及到客户端的系统中经常需要用到比较版本号的功能,但是比较版本号又不能完全按照字符串比较的方式去用compareTo之类的方法;这就需要我们总结版本号的通用规则,设计一个比较算法并封装成通用方法来使用:通常版本号如&#xff1a…

win10 重置串口

最近想起了玩玩51单片机,回味下,发现以前板子送人了,于是随便捡了一个下载器来给AT89S52下程序,下载器是通过串口和电脑通讯的, 可是要求串口端口号不能大于10,我的串口号都特别大,于是尝试到设备管理器里修…

ios 视频知识补充---分解LFLiveKit

视频:泛指将一系列的静态影像以电信号的方式捕捉、记录、处理、储存、传送、重现的各种技术。连续的静态图像变化每秒超过24帧(frame)以上时,由于视觉残留,人眼无法识别单独的静态图片,此时看上去就是平滑且…

快速排序详解以及java实现

快速排序作为一种高效的排序算法被广泛应用,SUN的JDK中的Arrays.sort 方法用的就是快排。 快排采用了经典的分治思想(divide and conquer): Divide:选取一个基元X(一般选取数组第一个元素)&…

机票预订系统活动图_软件工程(第五版)--习题及答案技术总结.docx

PAGE \* MERGEFORMAT43《软件工程》(第五版)习题参考答案第1章 一、判断题1、()软件的维护与硬件维护本质上是相同的。 2、(√)软件在运行和使用中也存在退化问题。 3、()软件危机的产生主要是因为程序设计人员使用了不适当的程序设计语言。 4、(√)软件同其他事物一样&#xf…

android jni ——Field Method -- Accessing Field

现在我们知道了怎样使用native code访问简单的数据类型和引用参考类型(string,array),下面我们来介绍怎样让jni代码去访问java中的成员变量和成员函数,然后可以再jni中回调java中的方法。 ---------------------------…

树状数组的建树 单点修改 单点查询 区间修改 区间查询

单点修改 单点查询 用普通数组就能写出来 单点修改 区间查询 用线段树 树状数组&#xff1b; 区间修改 区间查询 用线段树 树状数组&#xff1b; 区间修改 单点查询 用线段树 树状数组&#xff1b; 建树 #include<bits/stdc.h> using namespace std; …

bert 中文 代码 谷歌_如何用最强模型BERT做NLP迁移学习?

作者 | 台湾大学网红教授李宏毅的三名爱徒来源 | 井森堡&#xff0c;不定期更新机器学习技术文并附上质量佳且可读性高的代码。编辑 | Jane谷歌此前发布的NLP模型BERT&#xff0c;在知乎、Reddit上都引起了轰动。其模型效果极好&#xff0c;BERT论文的作者在论文里做的几个实验…

安装ubuntu20.04(安装vim、gcc、VMtools、中文输入法、汉化、修改IP、无法连网问题)

目录ubuntu安装包获取ubuntu的安装安装网络配置命令ifconfig连接网络(解决ubuntu无法连网问题)如何修改IP地址安装VMtools解决VMware Tools选项灰色VMtools安装安装中文&#xff0c;汉化添加中文输入法调整分辨率安装新版的Vim安装gccubuntu安装包获取 xunlei中直接搜索下载 …

arm-2014.05 编译三星内核错误 “not support ARM mode ‘smc 0’ ”

&#xff08;1&#xff09;arch/arm/mach-exynos/include/mach/smc.h文件&#xff1a; 在第54行和第69下面添加&#xff1a; __asm__ volatile (".arch_extension sec\n""smc 0\n": "r"(reg0), "r"(reg1), "r"(reg2), &…

从servlet中获取spring的WebApplicationContext

需要做一个参数初始化类&#xff0c;当web应用被加载时从数据库里取出相关的参数设置&#xff0c;并把这些参数放置到application里&#xff0c;jsp页面可以从中取出。1.在web.xml中配置&#xff1a; <servlet><servlet-name>Dispatcher</servlet-name><s…

python频率_Python中的频率分析

我试图使用Python来检索现场音频输入的主频率。目前&#xff0c;我正在试验使用音频流我的笔记本内置麦克风&#xff0c;但当测试以下代码时&#xff0c;我得到了非常差的结果。# Read from Mic Input and find the freqsimport pyaudioimport numpy as npimport bgeimport wav…

树莓派基于Linux内核驱动开发详解

目录一、驱动认知1.1 为什么要学习写驱动1.2 文件名与设备号1.3 open函数打通上层到底层硬件的详细过程二、基于框架编写驱动代码2.1 编写上层应用代码2.2 修改内核驱动框架代码2.3 部分代码解读2.3.1 static的作用2.3.2 结构体成员变量赋值方式2.3.3 结构体file_operations(最…

Spring AOP(三)--XML方式实现

本文介绍通过XML方式实现Spring AOP&#xff0c;在上一篇中已经介绍了通过注解&#xff0b;java配置的方式&#xff0c;这篇文章主要是看XML中怎么配置&#xff0c;直接上代码了&#xff1a; 一、创建一个连接点 1⃣️定义接口 注意⚠️&#xff1a;可以定义接口&#xff0c;也…

3.X内核下设备树–platform设备驱动

1。历史的车轮总是向前&#xff0c;技术更替。在linus 同学发出那句 WFK 后内核进入了设备树时代&#xff08;站在驱动工程师角度&#xff09;。 前几天我已经被mach-imx 中的文件折磨的夜不能眠。我终于在一个清晨&#xff0c;喝完一杯咖啡后决定放弃蹩脚的传统device描述方式…

六核cpu安装SQL Server 2005时报错,提示启动服务失败

2019独角兽企业重金招聘Python工程师标准>>> 新买的IBM3650M4的服务器上安装SQL server2005 安装到一半时&#xff0c;报"提示&#xff1a;SQL Server 服务无法启动。"错。 一开始以为是操作系统的问题&#xff0c;先重装了一遍&#xff0c;还是不行&…

postgis数据库优化_PostgreSQL批量导入性能优化

现在很多企业都将数据库逐渐由Mysql转向了更加强大而且开源的PostgreSQL数据库。在数据迁移过程中&#xff0c;PostgreSQL数据库导入大量数据时候非常缓慢&#xff0c;本文我们就来说说PostgreSQL数据库批量导入数据时的优化方法和策略。概述考虑PostgreSQL数据库批量导入数据时…

智能家居 (1) ——智能家居整体功能框架

目录 智能家居整体功能框架图硬件部分清单往期文章智能家居整体功能框架图 可作为大学生毕业设计内容,亦可作求职面试话术使用 使用的硬件平台:树莓派3B(型号),CortexA53(架构),博通BCM2837(芯片) 软件平台:Linux,内核版本3.14 本项目实现的功能是通过手机app、…