Linux内核简介及编译教程

博主去年双11购入AMD Vega显卡(为了黑苹果免驱以及硬解),发现Linux下无法驱动Vega显卡,4K显示器分辨率被锁定为1920x2160的奇葩分辨率,无法接受。于是Google了一下发现当时的内核(Linux 4.12)并不支持AMD Vega显卡,于是打算编译内核升级到最新版本,毕竟Linux的舒适使用对博主十分重要。现在分享一下Linux Kernel的编译教程。
注意:由于时间久远,博主的Linux已经升级Ubuntu 18.04,自带内核版本为Linux 4.15,所以演示平台为Ubuntu 18.04,编译的内核版本为Linux 4.18.5。另外,本文中部分图片来源网络。因为经典体系架构图现画比较麻烦。

Linux内核简介

Linux Kernel Map

image

Linux 系统体系结构

如下图所示,Linux体系结构,从大的方面可以分为用户空间(User Space)和内核空间(Kernel Space)两部分。

image
  • 用户空间中包含了C库,用户的应用程序。在某些体系结构图中还包含了shell,当然shell脚本也是Linux体系中不可缺少的一部分。
  • 内核空间包括硬件平台、平台依赖代码、内核、系统调用接口。
  • 在任何一个现代操作系统中,都是分层的。为什么需要分层呢?

从程序员的角度分析,将linux底层和应用分开,做应用的做应用,做底层的做底层,各干各的。经济学的基本原理是,分工产生效率。

从安全性的角度分析,是为了保护内核。现代CPU通常都实现了不同的工作模式。

以ARM为例:ARM实现了7种工作模式,不同模式下CPU可以执行的指令或者访问的寄存器不同:(1)用户模式 usr (2)系统模式 sys(3)管理模式 svc(4)快速中断 fiq(5)外部中断 irq(6)数据访问终止 abt(7)未定义指令异常。如果任何一个上层应用都可以调用寄存器,那样肯定是无法稳定执行的。而且因为出现了这个问题,出现了一个新的学科“现代操作系统”,如果大家感兴趣可以看一下“现代操作系统”相关文章或者书籍。

以X86为例:X86实现了4个不同级别的权限,Ring0—Ring3 ;Ring0下可以执行特权指令,可以访问IO设备;Ring3则有很多的限制。如果分析一下Android的,这方面做的更加“丧心病狂”,Android所有的APK应用程序,都是在Java虚拟机上面运行,应用程序更加远离底层。
另外,用户空间和内核空间是程序执行的两种不同状态,我们可以通过“系统调用”和“硬件中断”来完成用户空间到内核空间的转移。

Linux Kernel体系结构

如下图所示,是Linux内核结构图。

image
SCI层(System Call Interface)

这一层是给应用用户空间提供一套标准的系统调用函数来访问Linux。前面分析Linux体系结构的时候,介绍过任何一类现代操作系统都不会允许上层应用直接访问底层,在Linux中,内核提供了一套标准接口,上层应用就可以通过这一套标准接口来访问底层。

PM(Procees Management)

这一部分包括具体创建进程(fork、exec),停止进程(kill、exit),并控制他们之间的通信(signal等)。还包括进程调度,控制活动进程如何共享CPU。这一部分是Linux已经做好的,在写驱动的时候,只需要调用对应的函数即可实现这些功能,例如创建进程、进程通信等等。

MM(Memory Management)

内存管理的主要作用是控制多个进程安全的共享内存区域。

VFS(Virtual File Systems)

虚拟文件系统,隐藏各种文件系统的具体细节,为文件操作提供统一的接口。在Linux中“一切皆文件”,这些文件就是通过VFS来实现的。Linux提供了一个大的通用模型,使这个模型包含了所有文件系统功能的集合。如下图所示,是一个虚拟文件系统的结构图。

image
DD(Device Drivers)

设备驱动,Linux驱动一般分为网络设备、块设备、字符设备、杂项设备,需要我们编写的只有字符设备,杂项设备是不容易归类的一种驱动,杂项设备和字符设备有很多重合的地方。

PD(Physical Devices)

这一部分提供丰富的网络协议支持。

Linux Kernel源码

官网

<b>www.kernel.org</b>

目录结构

  • arch:根据cpu体系结构不同而分的代码
  • block:部分块设备驱动程序
  • crypto:加密,压缩,CRC校验算法
  • documentation:内核文档
  • drivers:设备驱动程序
  • fs(虚拟文件系统vfs):文件系统
  • include:内核所需的头文件,(与平台无关的头文件在include/linux中)
  • lib:库文件代码(与平台相关的)
  • mm:实现内存管理,与硬件体系结构无关的(与硬件体系结构相关的在arch中)
  • net:网络协议的代码
  • samples:一些内核编程的范例
  • scripts:配置内核的脚本
  • security:SElinux的模块
  • sound:音频设备的驱动程序
  • usr:cpio命令实现,用于制作根文件系统的命令(文件系统与内核放到一块的命令)
  • virt:内核虚拟机

Linux Kernel编译

下载Linux Kernel源码并拷贝到/usr/src目录

输入如下命令即可

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.18.5.tar.xz && cp -f linux-4.18.5.tar.xz /usr/src

解压Linux Kernel

输入如下命令即可

cd /usr/src && tar -xvf linux-4.18.5.tar.xz && cd linux-4.18.5

Ubuntu 18.04下,要执行以下命令安装软件包

sudo apt install fortune

配置编译参数

执行以下命令,会弹出一个带有GUI的配置界面,一般情况下默认参数就好,光标移动到Save保存即可,如图:

make menuconfig
image

编译内核

make -j12

<b>注意:-j参数后面加本机CPU线程数可以加快编译速度,博主的8700K是6核心12线程,所以-j12。</b>

image

安装内核

make modules_install
make install

更新grub引导

update-grub2

至此升级内核成功,重启电脑。

确认升级是否成功

重启后,执行如下命令查看内核版本,和编译版本相同即为成功

uname -r
image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容

  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,843评论 0 5
  • Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。 内核、shell和文件系统一起形成了基本...
    请爱护小动物阅读 2,564评论 0 22
  • Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本...
    偷风筝的人_阅读 3,251评论 1 17
  • 转载自:http://blog.csdn.net/hguisu/article/details/6122513原作...
    miaoiao阅读 1,512评论 0 7
  • 我吻过夕阳的余辉,将爱意注入她的背影。 突然那背影与远方的影子重叠,消失在日落的余辉下。 渐行渐远的背影,让我的心...
    想当作家的追梦少年阅读 429评论 1 6