第七期-Linux内核编程环境(1)

作者:罗宇哲,中国科学院软件研究所智能软件研究中心

在上一期中,我们介绍了Linux内核的源码结构,这一期我们介绍Linux内核编程环境,首先介绍的是Linux内核的编译方法。

一、Linux内核编译方法

本期中我们以Linux 4.19.94版内核来介绍内核编译的方法和流程。

首先,运行命令:

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.94.tar.xz

下载Linux内核4.19.94版的压缩包。https://cdn.kernel.org这个网站建立了Linux内核源码的档案馆,保存了Linux内核的主线版本和长期维护版本的最新源码以及更改历史等有用信息。

然后,运行命令:

tar xf linux-4.19.94.tar.xz

解压压缩包,得到内核目录linux-4.19.94。

进入内核目录,我们可以看到如下目录结构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dqPAFYE8-1585907431989)(media/a471e31100a528bed417ae2f532b4838.png)]
关于各个文件和文件夹的主要功能在上几期中已经介绍过了。其中Kconfig这个文件主要用来配置内核,它就是各种配置界面的源文件,内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.config1
在这里插入图片描述

Linux提供了不同的配置选择界面,通过使用配置选择界面可以选择是否将某一模块编译入内核以及是否将代码编译为在需要时可动态插入到内核的代码。有config、menuconfig、xconfig和oldconfig等,推荐使用menuconfig。其中make config 提供基于文本的最为传统的配置界面;make menuconfig提供基于文本菜单的配置界面,需要安装ncurse ;make xconfig提供基于QT的图形配置界面,要求安装QT软件包;make oldconfig以现有的.config文件为基础来更新当前配置2。运行make menuconfig命令,可以得到如下图形选择界面:
在这里插入图片描述

在这个界面中展示了许多选项和子目录,选中子目录按回车可以进入子目录菜单。进入子目录后一般有三种选项,选项的含义为:

  1. < * >或[*]:表示将该功能编译进内核;

  2. [ ]:表示不将该功能编译进内核;

  3. [M]:表示将该功能编译成在需要时动态插入到内核的代码。用户根据需要进行配置3

改完之后退出保存修改。Makefile 可以说是编译代码的文件,它根据make
menuconfig生成的.config宏和编译工具及内核源码来生成zImage二进制的镜像4

然后运行命令:

sudo make -j8

sudo make -j8 modules_install

sudo make -j8 install

上面三步分别完成了内核的编译、内核模块的编译安装和内核的安装,-j8表示用8个线程编译,可以加快编译速度,不同的机器可能支持不同的最佳编译线程数目。

安装完之后可以打开/boot/grub/grub.cfg搜索4.19.94,如果安装成功可以看到启动项中包含了linux-4.19.94启动项:
在这里插入图片描述

安装完成之后重启系统,输入uname -a,如果内核版本为4.19.94就说明成功了。
在这里插入图片描述

在内核代码中可以通过以下方法来打印DEBUG日志信息。

`printk(KERNDEBUG “%s %s %d\n”, __ FILE __ , __ FUNCTION __ , __ LINE__ )

其中KERNDEBUG为日志级别,常用的日志级别有KERNINFO(提示信息)、KERNNOTICE(正常但重要的信息)、KERNWARNING(警告信息)和KERNERR(错误信息等)5。双引号之间的信息为打印的信息,而_FILE __ 、_ FUNCTION __ 、_ LINE__则用来对代码进行跟踪调试,以显示代码所在的文件名、函数名和行数。

二、结语

本期我们介绍了Linux内核的编译方法,下一期中我们将通过一个实例介绍如何向内核中增加一个新的模块。
在这里插入图片描述


  1. https://blog.csdn.net/u011425939/article/details/80472324 ↩︎

  2. http://www.mamicode.com/info-detail-1414999.html ↩︎

  3. https://blog.csdn.net/lonnox/article/details/79506142 ↩︎

  4. https://blog.csdn.net/tiger15605353603/article/details/81323848 ↩︎

  5. https://blog.csdn.net/yuan892173701/article/details/7788208 ↩︎

发布了20 篇原创文章 · 获赞 0 · 访问量 256

猜你喜欢

转载自blog.csdn.net/liucw900716/article/details/105298132