当前位置: 首页 > news >正文

嵌入式Linux学习-编译内核源码

嵌入式Linux学习-编译内核源码

1.给虚拟机添加新硬盘
2.打开虚拟机,创建分区,一开始输入了fdisk之后一直输入n,最后w保存

sudo fdisk /dev/sdb

3.把分区写进硬盘

sudo partprobe /dev/sdb
sudo partprobe /dev/sdb

4.格式化分区并挂载

mkfs.ext4 /dev/sdb1 #格式化
mkdir /sdb #创建挂载点
mount /dev/sdb1 /sdb #挂载
#设置自动挂载
vi /etc/fstab
# 添加如下信息:
/dev/sdb1   /sdb     ext4   defaults  0  0

5.下载内核源码并上传
用uname -r命令,可以看到示例输出如下:
5.15.0-76-generic,其格式通常为版本.次版本.修订版本-发行版后缀(如 5.15.0-76-generic)
下载主次版本一致的内核源码
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.tar.xz
如果虚拟机网速较慢,可以将上述链接复制到自己电脑的浏览器上下载。
然后上传到刚刚创建的分区、解压。

6.内核环境配置

make mrproper #内核源码在编译之前需要对源代码树进行清理,第一编译使用make mrproper 命令进行清理
sudo apt install libncurses-dev
#复制本机的内核配置文件到新内核目录
cp /boot/config-5.15.0-134-generic .config
#执行
make menuconfig 

在这里插入图片描述
在这里可以选择禁止自己不需要的模块,也可以使能需要的模块,比方说无线网卡驱动,或者选择使用ext3还是ext4文件系统。ext3(Third Extended Filesystem)
在这里插入图片描述
在这里选择M还是*的区别如下:

特性*(Built-in)M(Module)
编译位置直接嵌入内核镜像生成独立的 .ko 模块文件
加载方式开机时自动加载手动加载或按需自动加载
内核体积影响增加内核大小保持内核精简
适用场景关键功能(如文件系统、核心驱动)非必需功能(如外设驱动、调试工具)
运行时灵活性不可卸载可动态加载/卸载
在该界面可以进行内核裁剪,在满足功能需求的前提下,让内核尽可能轻量化。如果不确定某个选项的作用,可通过 查看描述,或暂时设为模块(M)观察影响。

我这里给它打上补丁
从以下网址下载对应版本的实时补丁
https://cdn.kernel.org/pub/linux/kernel/projects/rt/5.15/older/

cd /path/to/linux-5.15
sudo bash -c 'for patch in patches/000*.patch; do patch -p1 < "$patch"; done'

在这个地方有冲突
在这里插入图片描述
cat查看一下,然后修改下图所示689行的代码
在这里插入图片描述
需要按照提示将.net/sched/sch_ets.c的相应代码改掉。

7.编译

sudo make -j4

可能会报错如下

/sdb/linux-5.15/tools/objtool/include/objtool/elf.h:10:10: fatal error: gelf.h: No such file or directory10 | #include <gelf.h>

执行以下代码即可

sudo apt install libelf-dev
#编译
sudo make modules_install
sudo make install

编译完成,可以reboot进入自己编译的系统了
在这里插入图片描述

在这里插入图片描述
问题记录:
reboot完没有看到自己编译的系统,可能需要确保GRUB包含自定义的内核。
GRUB是什么?
GRUB 是一个用于加载和管理系统启动的完整程序。它是 Linux 发行版中最常见的引导程序(bootloader)。

sudo update-grub

输出如下
在这里插入图片描述

总结流程大致为:下载内核源码->配置内核(打补丁?)->编译->安装内核模块->安装->更新bootloader

启动,长按shift,找到自己编译的系统
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/621012.html

相关文章:

  • 17 ABP Framework 项目模板
  • 微信公众号推送文字消息与模板消息
  • ActionChains 鼠标操作笔记
  • 恐鬼症 单机+联机(Phasmophobia)免安装中文版
  • SQL181 第二快/慢用时之差大于试卷时长一半的试卷
  • 【昇腾】VirtualBox虚拟机下搭建Ubuntu 22.04环境给TF卡制卡报读写IO错误的问题处理_20250814
  • 自动化测试|持续集成Git使用详解
  • elasticsearch冷热数据读写分离!
  • 快速搭建python HTTP Server测试环境
  • gitlab的ci/cd变量如何批量添加
  • STL算法【常用的算数生成算法】
  • 分享10个ai生成ppt网站(附ai生成ppt入口)
  • 力扣top100(day03-02)--图论
  • 回流(Reflow)与重绘(Repaint):浏览器渲染性能优化核心
  • SpringMVC请求与响应
  • 【Linux】库制作与原理
  • PyTorch回忆(三)U-net
  • java 学习 贪心 + 若依 + 一些任务工作
  • FTP服务器搭建(Linux)
  • opencv:傅里叶变换有什么用?怎么写傅里叶变换?
  • 软件著作权产生与登记关键点
  • 从单机到分布式:用飞算JavaAI构建可扩展的TCP多人聊天系统
  • 算法基础 第3章 数据结构
  • 数学建模-非线性规划模型
  • 深入理解提示词工程:从入门到精通的AI对话艺术
  • Mybatis实现页面增删改查
  • 数仓分层架构设计全解析:从理论到实践的深度思考
  • 一台联想 ThinkCentre M7100z一体机开机黑屏无显示维修记录
  • 【跨越 6G 安全、防御与智能协作:从APT检测到多模态通信再到AI代理语言革命】
  • 解决“Win7共享文件夹其他电脑网络无法发现共享电脑名称”的问题