• 【学习记录】从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 
    
    • 1

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

    sudo cat /proc/version
    
    • 1

    在这里插入图片描述

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

    sudo apt-cache search linux-source
    
    • 1

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

    sudo apt-get install linux-source-6.2.0
    
    • 1

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

    cd /usr/src/linux-source-6.2.0
    
    • 1

        解压源码。

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

        进入解压后的文件夹。

    cd linux-source-6.2.0
    
    • 1

        配置内核。

    sudo make menuconfig
    
    • 1

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

    sudo apt-get install ncurses-dev
    
    • 1

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

    sudo apt-get install flex
    
    • 1

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

    sudo apt-get install bison
    
    • 1

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

    sudo make -j8
    
    • 1

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

    sudo apt-get install libelf-dev
    
    • 1

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

    sudo apt-get install libssl-dev
    
    • 1

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

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

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

  • 相关阅读:
    【图卷积神经网络】1-入门篇:为什么使用图神经网络(下)
    【离散数学】图论
    C++使用Tensorflow2.6训练好的模型进行预测
    基于kubenetes的kubespere安装
    CSS特效015:7个小球转圈圈加载效果
    Python易错知识点整理(待更新)
    第九章 JDBC
    Node.js阶段学习(一)
    OkHttp报unexcepted end of stream on...错误分析
    32 | 基于LoadRunner实现企业级服务器端性能测试的实践(上)
  • 原文地址:https://blog.csdn.net/u012749085/article/details/134293799