Linux内核学习(包含Linux 2.6内核编译安装流程)

这篇具有很好参考价值的文章主要介绍了Linux内核学习(包含Linux 2.6内核编译安装流程)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、获取内核源码

Linux内核官方网站为:http://www.kernel.org

或者使用git将源码clone下来(我这里使用的版本为2.6):

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

clone下来的源码目录结构如下: 

linux 内核源码编译,Linux内核设计与实现,linux,学习

其中比较重要的目录的官方描述如下:

linux 内核源码编译,Linux内核设计与实现,linux,学习

对应的中文描述如下:

linux 内核源码编译,Linux内核设计与实现,linux,学习

linux 内核源码编译,Linux内核设计与实现,linux,学习

二、编译安装(环境为腾讯云的CentOS7.6,x86)

1、安装所需依赖

#安装开发工具包组
yum -y groupinstall "development tools"
#make menuconfig 文本界面窗口依赖包
yum install -y ncurses-devel

2、升级GCC版本

由于centos7.6初始gcc版本为4.8.5,而编译内核需要的最低版本为5.1.0,所以需要安装高于5.1.0版本的gcc。

yum install centos-release-scl
yum install devtoolset-7-gcc*

设置devtoolset-7 为默认的gcc编译器 :

scl enable devtoolset-7 bash
source /opt/rh/devtoolset-7/enable

再用gcc -v指令查看gcc版本可以看到已经升级到7.3.1了: 

linux 内核源码编译,Linux内核设计与实现,linux,学习

3、内核配置

查看当前内核版本:

linux 内核源码编译,Linux内核设计与实现,linux,学习

配置内核: 

#进入到解压或者clone下来的源码目录
cd linux-2.6
#使用文本菜单的方式配置内核
make menuconfig

执行后会出现如下窗口,可以根据自己的需要选择适当的配置项,如果没有特别的需求,按默认值配置即可,配置程序结束将在源码主目录生成一个.config文件,用来保存这些配置。 这里我们按照默认值来做,直接save -> exit:

linux 内核源码编译,Linux内核设计与实现,linux,学习

出来后使用ls -al发现目录下生成了一个.config隐藏文件:linux 内核源码编译,Linux内核设计与实现,linux,学习

 4、内核编译

执行make来编译内核,这一步会编译很久,大概三四小时左右。

#如果是多核的,可以用make -jn来加快编译速度,n为你系统的核数
make

执行完的结果如下图: 

linux 内核源码编译,Linux内核设计与实现,linux,学习

5、安装模块

安装编译好的内核模块:

make modules_install

执行完的结果如下图:  

linux 内核源码编译,Linux内核设计与实现,linux,学习

安装完毕后可以到/lib/modules目录下查看:

linux 内核源码编译,Linux内核设计与实现,linux,学习

这里安装的内核变成了6.2.0+,这里我也不太清楚为啥,希望有大佬能解答一下。

6、安装内核

执行make install命令调用内核目录中的install.sh的shell脚本完成安装任务。 

make install

执行完的结果如下图:  

linux 内核源码编译,Linux内核设计与实现,linux,学习  

7、修改默认内核启动项

查看系统可用内核:

cat /boot/grub2/grub.cfg | grep menuentry

可以看到第一个就是我们编译安装好的内核:

linux 内核源码编译,Linux内核设计与实现,linux,学习

修改开机默认使用的内核,其中下面代码中的新内核的值为menuentry后单引号的内容,即CentOS Linux (6.2.0+) 7 (Core):

grub2-set-default '新内核'

或者使用 grub2-set-default 0 设置默认使用的内核为第一个内核,因为新安装的内核默认排在第一位。

8、重启系统

reboot

使用uname -r指令查看当前内核版本,可以看到版本内核变成6.2.0+了:

 linux 内核源码编译,Linux内核设计与实现,linux,学习

三、内核开发的特点

1、内核编程时既不能访问C库也不能访问标准C头文件

       内核不能链接使用标准C函数库,对于内核来说,完整的C库太大而且太低效了。但你先别急,大部分常用的C库函数都在内核中得到了实现,比如string的实现位于lib/string.c中,只需要包含<linux/string.h>内核头文件,就可以使用。

2、没有内存保护机制

       内核编程时缺乏像用户空间那样的内存保护机制,如果一个用户程序试图进行一次非法的内存访问,内核就会发现这个错误,并结束整个进程。而当内核自己非法访问了内存,那么后果就很难控制了。此外,内核中的内存不分页,也就是说每用掉一个字节,物理内存就减少一个字节,所以往内核中加入新功能时需要仔细考虑。

3、不要轻易在内核中使用浮点数

       在用户空间的进程进行浮点数操作时,内核会完成从整数操作到浮点操作的模式转换,内核会先捕获陷阱(catch a trap),然后着手与操作模式的转变。与用户空间不同,内核本身没那么容易陷入(cannot easily trap itself)。所以最好不要在内核中使用浮点操作。

三、参考书籍

《Linux Kernel Development, 3rd Edition》文章来源地址https://www.toymoban.com/news/detail-723848.html

到了这里,关于Linux内核学习(包含Linux 2.6内核编译安装流程)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux--2.6内核调度和环境变量

    📘北尘_ :个人主页 🌎个人专栏 :《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 上图是Linux2.6内核中进程队列的数据结构,之间关系也已经给大家画出来,方便大家理解 如果有多个CPU就要考虑进程个数的负载均衡问题 普通

    2024年02月05日
    浏览(56)
  • Linux内核的编译、安装、调试

    Linux内核下载The Linux Kernel Archives 打开 .config 更改 CONFIG_SYSTEM_TRUSTED_KEYS 和 CONFIG_SYSTEM_REVOCATION_KEYS 更改 CONFIG_DEBUG_INFO_BTF 注释掉CONFIG_X86_X32 首先安装模块 这里加上 INSTALL_MOD_STRIP=1 是为了避免内核启动时卡在 loading initial ramdisk 安装内核 更改引导 更改 grub 修改文件 更新 重启 在

    2024年02月11日
    浏览(44)
  • ARM & Linux 基础学习 / 配置交叉编译工具链 / 编译 Linux 应用和驱动 / 编译内核

    编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料(如 百问网的《嵌入式Linux应用开发完全手册》,在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO:开发板资料》或《2.2 全系列Linux教程:在线视频与配套资料》里面可以下载到),还有参考 菜

    2024年02月04日
    浏览(47)
  • Jetson系列开发板/Linux安装OpenCV,编译CUDA模块,流程详解

    本文主要介绍 Jetson Oring Nano,Jetson Nano, Jetson TX2这三块开发板上 OpenCV 的卸载安装及编译(支持 CUDA模块); 解决了一些出现的问题。 如果已安装jtop,可以直接使用jtop查看,命令如下。 按数字6查看INFO页面(某些开发板是7INFO),可以看到: 从官网拉下来的 OpenCV (已编译)是

    2024年02月09日
    浏览(42)
  • 【linux内核】Debian内核编译

    列出 Debian 内各种版本的核心软件包 apt安装软件包 编译内核源码 安装内核 更新grub 参考: 8.10. 编译内核 (debian.org) Debian编译内核教程 - 时光旅行的懒猫 - 博客园 (cnblogs.com) 内核编译方法-tony_ayuan-ChinaUnix博客

    2024年02月17日
    浏览(46)
  • linux内核分析编译体验

    linux-2.6.22.6 下载地址 https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/ linux-2.6.22.6_jz2440.patch下载地址 https://download.csdn.net/download/zjq_5586288/10438800?utm_source=bbsseo cd /home/li/kernel_learn/linux-2.6.22.6 patch -p1 …/linux-2.6.22.6_jz2440.patch 三种方式 (1)make menuconfig (2)使用默认配置(defconfig)在上面

    2023年04月11日
    浏览(36)
  • 树莓派Linux内核编译

    树莓派内核源代码保存在GitHub上github.com/raspberrypi/linux,可以看做是Linux主线内核代码的一个分支。树莓派内核源代码是从Linux主线的长期维护的稳定版本加上树莓派特有的改动形成的。树莓派的内核更新可以通过apt命令自动更新到最新的稳定版本。但是如果你需要使用到最新

    2024年02月08日
    浏览(40)
  • 编译Linux 2.6.34内核

    《Linux内核设计与实现(第三版)》中所用的内核版本为2.6.34,这个版本太旧了,在高版本系统中编译各种不支持,所以选了Ubuntu 14.04进行编译。 编译环境 :Ubuntu 14.04 GCC版本:4.8.4 编译的内核版本:Linux 2.6.34 内核源码下载:https://mirrors.edge.kernel.org/pub/linux/kernel/ 解压源码l

    2024年02月10日
    浏览(40)
  • 编译tiny4412 Linux 内核

    工作环境 Ubuntu 22 交叉编译器 4.5.1 解压Linux内核源码,进入目录 将官方配置完好的defconfig文件作为配置文件 由于内核版本较低,需要下载低版本的gcc,选择下载gcc-9与g+±9 将gcc g++版本都切换为9 切换后可以通过 gcc -v 查看是否切换成功 进入Linux目录,执行make编译 出现错误 C

    2024年02月11日
    浏览(43)
  • Linux内核sync流程

    进程写文件时, 文件并没有真正写到存储设备, 而是写到了page cache中。 文件系统会定期把脏页写到存储设备, 进程也可以调用 sync  这样的调用把脏页写回存储设设备。 backing_dev_info 要理解这个结构体, 得从它需要解决什么问题说起。早期版本的Linux采用pdflush线程将“脏

    2024年02月08日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包