当前位置: 首页 > 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=""

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

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

相关文章:

  • uni-app - 日期 · 时间选择器
  • 使用USB转JTAG芯片CH347在Vivado下调试
  • 硬技能之上的软技巧(三)
  • mysql 查询
  • 2311rust过程宏的示例
  • 数据分析:数据预处理流程及方法
  • uniapp 防抖节流封装和使用
  • springcloud alibaba学习视频
  • 【MySQL】一些内置函数(时间函数、字符串函数、数学函数等,学会了有妙用)
  • QtC++与QColumnView详解
  • 微信小程序配置企业微信的在线客服
  • 深入理解Java AQS:从原理到源码分析
  • 【数据结构(四)】栈(1)
  • 实验(四):指令部件实验
  • 【Android11】在内置的Tvsettings的界面中显示以太网Mac地址
  • 在Oracle 11g 数据库上设置透明数据加密(TDE)
  • 互动直播 之 视频帧原始数据管理
  • 基于tcp协议及数据库sqlite3的云词典项目
  • C/C++内存管理(1):C/C++内存分布,C++内存管理方式
  • 11 redis中分布式锁的实现
  • 循环链表3
  • 如何修改百科内容?百度百科内容怎么修改?
  • mysql8.0英文OCP考试第131-140题
  • MySQL数据库——存储过程-条件处理程序(通过SQLSTATE指定具体的状态码,通过SQLSTATE的代码简写方式 NOT FOUND)
  • 信号的处理时机(内核态,用户态,如何/为什么相互转换,内核空间,cpu寄存器),信号的处理流程详细介绍+抽象图解
  • 【JavaEE】Spring的创建和使用(保姆级手把手图解)
  • MyBatis:关联查询
  • 第十二章 控制值的转换
  • SQL并集、交集、差集使用
  • 【双指针】盛水最多的容器