【学习记录】从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学习之旅——驱动模块编译与加载
【学习记录】从0开始的Linux学习之旅——应用开发(helloworld)

猜你喜欢

转载自blog.csdn.net/u012749085/article/details/134293799