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

【学习记录】从0开始的Linux学习之旅——编译linux内核

一、学习背景

    从接触嵌入式至今,除了安装过双系统接触了一丢丢linux外,linux在我眼中向来是个传说。而如今得到了一块树莓派,于是决心把linux搞起来。

二、概念学习

    Linux操作系统通常是基于Linux内核,并结合GNU项目中的工具和应用程序而成。Linux操作系统支持多用户、多任务和多线程,具有强大的网络功能和良好的兼容性。
    Kernel,也就是Linux的内核,它负责管理系统的硬件资源、提供基本的系统功能,并作为用户空间和硬件之间的桥梁。包括资源管理、设备驱动、系统调度、文件系统管理、网络支持等功能,所以它属于宏内核。与之对应的微内核则是只管好中断、调度等一些简单功能。
    U-Boot(Universal Boot Loader)实际上就是一种引导加载程序(bootloader)。引导加载程序是用于引导计算机系统启动的软件,它负责在系统上电后初始化硬件、加载操作系统内核到内存中并启动它。因此,U-Boot就是一种特定类型的引导加载程序,主要用于嵌入式系统中。

三、准备工作

  • 系统准备
  1. 安装VMware,这里安装的是17.0 Pro版本,注册码网上搜的。
  2. 到ubuntu官网下载一个ubuntu桌面系统镜像,这里下载的是22.04版本。
  3. 在VMware里新建一个虚拟机,安装刚下载的ubuntu系统,这里安装的是英文版。
  • 环境准备
  1. 安装git,方便下载一些开源的代码。
  2. 安装vim,虽然系统自带的vi也可以编辑文档,但vim看起来舒服一点。
  3. 安装vscode,方便查看linux内核那大量代码。

四、内核编译

    首先输入以下指令更新下当前软件包。

sudo apt update 

    获取内核版本号,为了确认内核版本号一致。

sudo cat /proc/version

在这里插入图片描述

    接着查看当前linux可下载的内核版本有哪些,下载与当前系统版本相同的内核版本源码。

sudo apt-cache search linux-source

在这里插入图片描述
    这里我们选择6.2.0。

sudo apt-get install linux-source-6.2.0

    进入内核源码对应的文件夹。

cd /usr/src/linux-source-6.2.0

    解压源码。

sudo tar xvf linux-source-6.2.0.tar.bz2

    进入解压后的文件夹。

cd linux-source-6.2.0

    配置内核。

sudo make menuconfig

    报了个错,查了下,是少了个ncurses设备驱动。
在这里插入图片描述
    执行以下命令安装ncurses。

sudo apt-get install ncurses-dev

    继续报错,那就继续处理,查了下是缺少flex。
在这里插入图片描述
    那就执行下面命令安装flex。

sudo apt-get install flex

    继续报错,根据上面的报错信息,应该也是装个bison就可以。
在这里插入图片描述

sudo apt-get install bison

    装完就可以进入配置页面了,直接退出,不需要修改设置。
在这里插入图片描述
    接下来直接编译内核。

sudo make -j8

    继续疯狂报错,还是一样,一个个问题逐个击破。
在这里插入图片描述
    第一个"fatal error: libelf.h: No such file or directory"是缺少一个libelf包,安装一下。

sudo apt-get install libelf-dev

    第二个"fatal error: openssl/opensslv.h:no such file or directory",同理,是缺少一个libssl包,安排上。

sudo apt-get install libssl-dev

    继续往下翻,连续三个都是缺少gelf.h,查了下,同样是因为缺少libelf包引起的,那就不用重复安装了。
在这里插入图片描述
    装完上面两个包,重新编译,继续报错。
在这里插入图片描述
在这里插入图片描述
    查了下,需要修改配置文件,找到把“CONFIG_SYSTEM_TRUSTED_KEYS”,把后面的debian/canonical-certs.pem去掉,研究了下,这个是debian系统的一些认证功能,可以去掉。

CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_TRUSTED_KEYS=""

    直接查文件有点难顶,翻到一万多行才翻到。
在这里插入图片描述
    删掉后重新编译,等一个小时以上(具体多长时间不知道,编译了一个小时还没完就睡觉去了),终于通过了。
在这里插入图片描述

相关文章:

【学习记录】从0开始的Linux学习之旅——编译linux内核

一、学习背景 从接触嵌入式至今,除了安装过双系统接触了一丢丢linux外,linux在我眼中向来是个传说。而如今得到了一块树莓派,于是决心把linux搞起来。 二、概念学习 Linux操作系统通常是基于Linux内核,并结合GNU项目中的工具和应…...

uni-app - 日期 · 时间选择器

目录 1.基本介绍 2.案例介绍 ①注意事项: ②效果展示 3.代码展示 ①view部分 ②js部分 ③css样式 1.基本介绍 从底部弹起的滚动选择器。支持五种选择器,通过mode来区分,分别是普通选择器,多列选择器,时间选择器&a…...

使用USB转JTAG芯片CH347在Vivado下调试

简介 高速USB转接芯片CH347是一款集成480Mbps高速USB接口、JTAG接口、SPI接口、I2C接口、异步UART串口、GPIO接口等多种硬件接口的转换芯片。 通过XVC协议,将CH347应用于Vivado下,简单尝试可以成功,源码如下,希望可以一起共建&a…...

硬技能之上的软技巧(三)

在硬技能的基础上,如何运用软技巧来进一步提升个人能力和职业发展。在之前的讨论中,我们提到了硬技能和软技巧的基本概念,以及如何运用软技巧来提升个人能力和职业发展。本篇文章将进一步探讨软技巧中的一些重要方面,包括自我管理…...

mysql 查询

-- 多表查询select * from tb_dept,tb_emp; 内来链接 -- 内连接 -- A 查询员工的姓名 , 及所属的部门名称 (隐式内连接实现)select tb_emp.name,tb_dept.name from tb_emp,tb_dept where tb_emp.idtb_emp.id;-- 推荐使用select a.name,b.n…...

2311rust过程宏的示例

原文 Rust2018中的过程宏 在Rust2018版本中,我最喜欢的功能是过程宏.在Rust中,过程宏有着悠久而传奇的历史(并继续拥有传奇的未来!) 因为2018年版极大改善了定义和使用它们的体验. 什么是过程宏 过程宏是,在编译时用一段语法,生成新语法的函数.Rust2018中的过程宏有三个风格…...

数据分析:数据预处理流程及方法

数据预处理是数据分析过程中至关重要的一步,它涉及到清洗、转换和整理原始数据,以便更好地适应分析模型或算法。以下是一些常见的数据预处理方法和规则: 数据清洗: 处理缺失值:检测并处理数据中的缺失值,可…...

uniapp 防抖节流封装和使用

防抖(debounce):定义一个时间,延迟n秒执行,n秒内再次调用,会重新计时,计时结束后才会再次执行 主要运用场景: 输入框实时搜索:在用户输入内容的过程中,使用防抖可以减少频繁的查询…...

springcloud alibaba学习视频

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台...

【MySQL】一些内置函数(时间函数、字符串函数、数学函数等,学会了有妙用)

内置函数 前言正式开始时间函数显示当前日期、时间、日期时间的日期计算相差多少天示例创建一张表,记录生日 留言表 字符串函数charsetconcatinstr(string, substring)ucase和lcaseleft(string, length)length求字符串长度replace(str, search_str, replace_str)tri…...

QtC++与QColumnView详解

介绍 在 Qt 中,QColumnView 是用于显示多列数据的控件,它提供了一种多列列表视图的方式,类似于文件资源管理器中的详细视图。QColumnView 是基于模型/视图架构的,通常与 QFileSystemModel 或自定义模型一起使用。 以下是关于 QC…...

微信小程序配置企业微信的在线客服

配置企业微信后台 代码实现 <button tap"openCustomerServiceChat">打开企业微信客服</button>methods: {openCustomerServiceChat(){wx.openCustomerServiceChat({extInfo: {url: 你刚才的客服地址},corpId: 企业微信的id,showMessageCard: true,});} …...

深入理解Java AQS:从原理到源码分析

目录 AQS的设计原理1、队列节点 Node 和 FIFO队列结构2、state 的作用3、公平锁与非公平锁 AQS 源码解析1、Node节点2、acquire(int)3、release(int)4、自旋&#xff08;Spin&#xff09;5、公平性与 FIFO 基于AQS实现的几种同步器1、ReentrantLock&#xff1a;可重入独占锁2、…...

【数据结构(四)】栈(1)

文章目录 1. 关于栈的一个实际应用2. 栈的介绍3. 栈的应用场景4. 栈的简单应用4.1. 思路分析4.2. 代码实现 5. 栈的进阶应用(实现综合计算器)5.1. 栈实现一位数计算(中缀表达式)5.1.1. 思路分析5.1.2. 代码实现 5.2. 栈实现多位数计算(中缀表达式)5.2.1. 解决思路5.2.2. 代码实…...

实验(四):指令部件实验

一、实验内容与目的 实验要求&#xff1a; 利用CP226实验仪上的小键盘将程序输入主存储器EM&#xff0c;通过指令的执行实现微程序控制器的程序控制。 实验目的&#xff1a; 1.掌握模型机的操作码测试过程&#xff1b; 2.掌握模型机微程序控制器的基本结构以及程序控制的基本原…...

【Android11】在内置的Tvsettings的界面中显示以太网Mac地址

【Android11】在内置的Tvsettings的界面中显示以太网Mac地址 了解Preference必要信息步骤&#xff1a;1. 在设置页面的xml文件中增加一个Preference &#xff0c;这是要显示出来的设置项2. 在strings.xml文件中增加我们在第一步新设置的值3. 为新加的设置项增加一个新的XXXPref…...

在Oracle 11g 数据库上设置透明数据加密(TDE)

本文回答2个问题&#xff1a; 11g下简明的TDE设置过程由于11g不支持在线TDE&#xff0c;介绍2中11g下的加密表空间的迁移方法 设置表空间TDE之前 表空间没有加密时&#xff0c;很容易探测到明文数据&#xff1a; create tablespace unsectbs datafile unsectbs.dbf size 10…...

互动直播 之 视频帧原始数据管理

目录 一、视频帧管理 1、存储图片数据的数据结构 1.1)、图片数据首地址...

基于tcp协议及数据库sqlite3的云词典项目

这个小项目是一个网络编程学习过程中一个阶段性检测项目&#xff0c;过程中可以有效检测我们对于服务器客户端搭建的能力&#xff0c;以及一些bug查找能力。项目的一个简单讲解我发在了b站上&#xff0c;没啥心得&#xff0c;多练就好。 https://t.bilibili.com/86524470252640…...

C/C++内存管理(1):C/C++内存分布,C++内存管理方式

一、C/C内存分布 1.1 1.2 二、C内存管理方式 C可以通过操作符new和delete进行动态内存管理。 2.1 new和delete操作内置类型 int main() {int* p1 new int;// 注意区分p2和p3int* p2 new int(10);// 对*p2进行初始化 10int* p3 new int[10];// p3 指向一块40个字节的int类…...

地磁暴如何影响卫星电机控制与轨道动力学:SpaceX星链卫星损失事件深度解析

1. 项目概述&#xff1a;当太阳风暴成为卫星的“隐形杀手” 2022年2月&#xff0c;SpaceX经历了一次代价高昂的教训。他们刚刚发射的一批49颗星链&#xff08;Starlink&#xff09;卫星&#xff0c;在进入预定轨道的初期&#xff0c;遭遇了一场突如其来的地磁暴。结果&#xff…...

Arduino PLC IDE入门:用五种工业语言实现计数器

1. 项目概述&#xff1a;当Arduino遇见工业标准如果你是从Arduino IDE玩过来的开发者&#xff0c;第一次打开Arduino PLC IDE&#xff0c;可能会有点懵。左边是熟悉的项目树&#xff0c;右边却多了些“梯形图”、“功能块”的标签页&#xff0c;这感觉就像习惯了开手动挡轿车&a…...

从零搭建一个低成本CWDM网络:手把手教你用ADOP光模块搞定企业分支互联

从零搭建一个低成本CWDM网络&#xff1a;手把手教你用ADOP光模块搞定企业分支互联 当企业需要连接分散在不同地理位置的办公点时&#xff0c;传统专线方案的高昂成本往往令人望而却步。而CWDM技术以其经济实惠的特性&#xff0c;成为中小企业分支互联的理想选择。本文将带你一步…...

5月19日Fitbit应用更名Google Health,功能升级、隐私有保障,高级版费用调整

Fitbit应用重大改版周四&#xff0c;于2021年完成对Fitbit收购的谷歌宣布&#xff0c;Fitbit应用程序即将迎来重大改版&#xff0c;甚至连名字都将改变&#xff0c;它将于5月19日更名为Google Health。谷歌产品管理总监泰勒赫尔格伦&#xff08;Taylor Helgren&#xff09;对CN…...

So-VITS-SVC语音克隆实战:从模型仓库到高质量声音转换

1. 项目概述&#xff1a;从模型仓库到语音克隆的实践指南最近在语音合成和AI声音克隆的圈子里&#xff0c;一个名为sekift/so-vits-models的仓库引起了我的注意。乍一看&#xff0c;这只是一个托管在代码托管平台上的模型文件集合&#xff0c;但深入探究后你会发现&#xff0c;…...

深蓝词库转换:彻底告别跨平台输入习惯迁移困扰

深蓝词库转换&#xff1a;彻底告别跨平台输入习惯迁移困扰 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 你是否曾因为更换操作系统或输入法而不得不放弃多年积累的…...

PCEP-30-02认证一次过!我的60天备考计划与实战笔记(附免费资源)

PCEP-30-02认证60天通关秘籍&#xff1a;从零基础到满分的实战路线图 1. 为什么选择PCEP认证作为Python入门第一步&#xff1f; 在编程学习的海洋里&#xff0c;Python无疑是最友好的起点之一。而PCEP&#xff08;Certified Entry-Level Python Programmer&#xff09;认证作…...

3步搞定百度网盘高速下载:Python解析工具实战指南

3步搞定百度网盘高速下载&#xff1a;Python解析工具实战指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 面对百度网盘下载限速的困扰&#xff0c;技术爱好者们一直在寻找…...

XXMI-Launcher全面解析:跨游戏模组管理平台实战指南

XXMI-Launcher全面解析&#xff1a;跨游戏模组管理平台实战指南 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher XXMI-Launcher是一款专为热门游戏打造的模组管理平台&#xff0c…...

AI智能体结构化工作空间模板:用文件系统解决记忆与角色漂移难题

1. 项目概述&#xff1a;一个为AI智能体设计的结构化工作空间模板 如果你正在尝试构建一个多智能体系统&#xff0c;或者哪怕只是一个需要长期记忆和稳定身份的单一AI助手&#xff0c;你很可能已经遇到了一个核心难题&#xff1a; 如何让AI在多次会话中保持连贯的“人格”和“…...