作为现在程序员必备的Linux内核(让你十分钟快速了解)

谈谈Linux内核的实时性优化 前面列举的这些优化措施实施起来很简单,但对于我们自身来说更要理解为什么要这么做。深入去分析Linux内核的机制,实际的去阅读内核的模块源码,才会在实时性或者Linux内核的学习道路上收获更多。比如阅读内核源码才会知道tasklet和workqueue的应用场景的不同,尽管它们都是“中断下半部”之一,但是它们在内核当中执行的优先级还是有很大区别。只有阅读内核源码,才会知道tasklet和hrtimer也是基于软中断的,而且这个软中断也有优先级之分。 阅读详情

前言:在程序员成长过程中,相对于硬技能的提升,软技能往往被忽略,但要往更高处走,软技能启着至关重要的作用。作为从业十多年的大龄程序中的角度,解读那些有利于个人成长的点,连点成线,连线成面,伴你向上生长。

Linux内核代码的庞大令不少人“望而却步”,究其原因可以总结为以下几点:

1、认为内核源码“高不可攀”。其实内核源码分析的难度不在于源码本身,而在于如何使用更合适的分析代码的方式和手段。内核的庞大致使我们不能按照分析一般的demo程序那样从主函数开始按部就班的分析,我们需要一种从中间介入的手段对内核源码“各个击破”。

2、需要丰富的理论基础。内核的地位的特殊性决定着内核的执行效率必须足够高才可以响应目前计算机应用的实时性要求,为此Linux内核使用C语言和汇编的混合编程。

如何正确的阅读源码呢?

首先我们来说一下操作系统。百度百科说它是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统。在Linux中则被称为“内核”。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。

所以,如果需要阅读内核首先要做到三件事:

1、需要对C语言十分精通。也就是说需要做到对C语言的编译过程了然于心。如果达不到要求,推荐读一下《C程序设计语言(第2版·新版)典藏版》——C语言的设计者之一Dennis M.Ritchie 和著名的计算机科学家 Brian W.Kernighan合著的介绍C语言的权威经典著作,我们现在见到的大量论述C语言程序设计的教材和专著均以此书为蓝本。原著第1版中介绍的C语言成为后来广泛使用的C语言版本——标准C的基础。人们熟知的“Hello,World”程序就是由本书首次引入的,现在,这一程序已经成为所有程序设计语言入门的第一课。

2、对汇编语言有一定了解,至少熟悉AT&T的基本汇编语法,了解伪指令和指令的差异。这里推荐《编译原理(原书第2版)》。本书是编译领域无可替代的经典著作,被广大计算机专业人士誉为“龙书”的最新版本。自本书出版以来,被世界各地的著名高等院校和研究机构(包括美国哥伦比亚大学、斯坦福大学、哈佛大学、普林斯顿大学、贝尔实验室)作为本科生和研究生的编译原理课程的教材。该书对我国计算机教育领域也具有重大影响。

3、对操作系统本身有一定了解,理解四个基本概念:Process/Thread(线程/进程)、VMS(虚拟内存系统)、VFS(虚拟文件系统)、I/O。这里我们可以读一下《操作系统概念(原书第9版)》。本书是操作系统领域的经典著作,从第1版至今全程记录了操作系统的发展历史,被国内外众多高校选作教材。全书共六部分,不仅详细讲解了进程管理、内存管理、存储管理、保护与安全等概念,而且涵盖重要的理论结果和案例研究,并且给出了供读者深入学习的推荐读物。这一版新增了多核系统和移动计算的内容,每一章都融入了新的技术进展,并且更新了习题和编程项目。

有了准备工作之后,我们来看一下阅读Linux内核代码有哪些准备步骤:

1、选择处理器。这里选择ARM或者x86(选择一种即可),关于二者的区别这里不做介绍。需要了解六大CPU机制:寄存器机制、多级缓存机制、分段机制、分页机制、中断机制、多核同步机制。

2、选择一个版本的内核源码,截止目前最新版本为v5.11.7。

3、下载选定版本的内核源码,并按照所选的CPU架构裁剪源码(删掉其他架构的源码)。

4、配置好编译流程。

好了,到这里已经可以阅读内核了,不过还是给出几点建议,希望对你有用:

1、用 SourceInsight辅助普通IDE阅读内核源码,方便阅读。

2、早期,我们可以在内核源码的任意地方,打印输出调试信息,辅助学习;熟了之后,自己写一个内核模块,可以通过/proc/kallsyms找到任意内核符号的地址,从而可以随时读取任意的内核数据,辅助学习。

在已定位好的源码文件中,分析每个变量、宏、函数、结构体等代码元素的大致含义和功能,增加简单注释。接着只有沉下心来,弄清每个关键的难点,才能保证以后碰到类似的难点不会再被困住。

 

 

Ubuntu更换Linux内核版本 Ubuntu14.04.5默认Linux内核版本号是4.4.0-31,这几天为了换一个低版本的内核,在网上查了蛮多帖子,最后虽然有点小问题(切换内核版本不是很方便),但总算是勉强更换成功。试了几个方法不行后,按照 https://blog.youkuaiyun.com/xin_yu_xin/article/details/42184899 这篇帖子的方法成功更换。博主的步骤基本没问题,我是一步一步对照着进行的... 阅读详情

相关推荐

为你的WSL 2编译一个最新的Linux内核吧!

随着Win 10 2004版本的正式推送,很多人也都用上了最新的WSL 2,这使得Win 10成了最好的Linux发行版(雾)。WSL 2相比WSL 1,最大的改变就是使用了真正的Linux内核,而不仅仅是一个适配层。我们可以通过命令uname -r查看这个内核的版本,通过正式推送获得的WSL 2的内核版本应当是4.19.84。这个版本比较老,让我们为WSL 2编译一个最新的稳定版吧

Ziyang的博客 5654

10分钟学会像大佬一样阅读Linux内核

    Linux内核代码的庞大令不少人“望而却步”,究其原因可以总结为以下几点:     1、认为内核源码“高不可攀”。其实内核源码分析的难度不在于源码本身,而在于如何使用更合适的分析代码的方式和手段。内核的庞大致使我们不能按照分析一般的demo程序那样从主函数开始按部就班的分析,我们需要一种从中间介入的手段对内核源码“各个击破”。     2、需要丰富的理论基础。内核的地位的特殊性决定

北京麟卓 1万+

深入解析Mifare Classic Crypto1认证流程与密钥交换机制

本文深入解析Mifare Classic Crypto1认证流程与密钥交换机制,详细介绍了Crypto1加密算法的工作原理、认证初始化阶段、随机数交换与密钥流生成过程,以及双向验证步骤。文章还分析了Mifare Classic的安全漏洞,包括随机数生成缺陷和密钥流恢复攻击,并提供了Proxmark3实战演示和防护建议。

c6d7e8f9g的博客 898

linux 之 内核实时性

单内核方案:主线软实时内核,打PREEMPT_RT补丁,使内核成为硬实时内核-双内核方案:主线普通内核+实时内核,例如:RT-linux ,RTAI,Xenomai。实时性:实时分为硬实时和软实时,两者主要的区别主要就是就绪运行时间确定性。然后,主线Linux是软实时系统,加入实时补丁后将其改造为硬实时系统。可抢占性:实现实时内核很重要的特点是可抢占性,就绪的高优先级的任务能够抢占低优先级任务。在2.6版本之后引入了抢占模型,支持任务抢占。

z20230508的博客 4378

STM32CubeMX和华为LiteOS Studio开发STM32

传统的STM32的开发通常使用Keil/IAR这类开发软件,随着物联网时代的到来,传统嵌入式的发展不断向物联网方向靠拢,而Keil/IAR这类开发软件无法满足IoT一站式的开发,华为LiteOS Studio结合STM32CubeMX可以快速,高效地进行物联网开发,本文提供一种开发思路及环境的配置方法。...

weixin_45680600的博客 2833

在工作台 LS-DYNA 中检索和变换反作用力分量

在结构仿真中,通常需要由施加的位移或速度边界条件产生的反作用力。此外,通常需要根据用户定义的坐标系解析反作用力分量。在本文中,详细介绍了在Workbench (WB) LS-DYNA 中,相对于用户定义的坐标系检索和变换反作用力分量的过程。

jkh920184196的博客 885

LINUX - 实时LINUX内核(PREEMPT_RT)的编译安装以及测试

实时性是指调度的时候,任务响应时间。windows一般是15ms,最大的问题是不能保证。比如平均值是1ms,但是随着系统负载的变化,有时甚至达到100ms,在这工业上是无法使用的。工业上一些应用要求必须有更高的时间精度,比如,一个电力监测系统必须在10ms内运行一次任务对电力运行状况进行监测,一旦时间不准,调度不到该程序运行,则无法保证对电力故障的及时响应。实时性补丁能够较好地满足我们的需求(1ms),实现较强的实时性。............

szembed的博客 3031

补丁1.0:使用Eviews做ADF检验

补丁1.0:使用Eviews做ADF检验

Jet4505的博客 1961

Linux-RT特点与简单应用

Linux-RT是指Linux Real-Time(实时)的简称,它是针对实时性能优化的Linux内核版本。传统的Linux内核并不是专为实时性设计的,因此在一些对实时性要求较高的应用场景下,可能无法满足实时性要求。Linux-RT通过对Linux内核进行调整和优化,以提供更可预测、更低延迟的实时性能。Linux-RT的主要特点和优势包括:实时性能: Linux-RT对内核进行了调整和优化,使其具有更可预测、更低延迟的实时性能。

qq_42241500的博客 3849

通信算法之249: DJI波形物理层

D-J-I的Lightbridge波形、Ocusync1波形、Ocusync2波形、Ocusync3波形,

leegang12的专栏 1440

头歌OpenGauss数据库-G.视图的使用

OpenGauss数据库-G.视图的使用

python一生之敌的博客 1383

十分钟带你了解!用户进程缓冲区和内核缓冲区

用户进程缓冲区和内核缓冲区 1. 用户进程和系统进程 用户进程:运行在操作系统上的进程,都运行在用户空间 系统空间:操作系统运行的空间 2. 内核态和用户态(kernel mode和user mode) (1)内核态可以访问系统资源,比如: ps:上面所说的这些系统资源,在用户进程中是无法被直接访问的,只能通过操作系统来访问,所以也把操作系统提供的这些功能成为:“系统调用”。 比如下图,展示一个用户通过shell控制计算机所经过的数据流向:文件读写和终端控制,都是通过内核进行的。 提供这些限制的基础

fhp123的博客 5209

CTK Plugin Framework插件框架学习1--Qt编译CTK

【代码】Qt编译CTK。

贝勒里恩的博客 7432

【干货】教你在十分钟内编译一个Linux内核,并在虚拟机里运行!

这篇文章将会简单的介绍如何在Linux系统上面,编译一个5.19的内核,然后在QEMU虚拟机中运行。

龙进的博客 4403

YOLOv11缝合改进Conv | SAConv在YOLOv11中的应用可切换空洞卷积与性能提升(附代码)

在本篇文章中,我们将深入探讨如何通过引入**SAConv**(Switchable Atrous Convolution,可切换空洞卷积)来优化YOLOv11网络结构,特别是在卷积操作方面的创新。我们会解析SAConv的核心原理和架构设计。

一键难忘的博客 953

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

编译Linux内核(上)--编译基于x86平台的Linux内核的过程

编译Linux内核。   第一步:下载源码并存入Linux目录,我是放到了/usr/src目录下,别的目录也可以。一般下载下来的源码都是文件名为"linux-$版本号.tar.bz2"的数据包格式,比如"linux-2.6.15.5.tar.bz2”。   第二步:将数据包解压。这里一定要注意,解压这个过程必须在linux内完成,不要在windows下解压,如果在windows下解压,编译内核的时...

liangxiaoxi7的博客 3856

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

lv12 linux 内核移植 10

内核是一个操作系统的核心,提供了操作系统最基本的功能,是操作系统工作的基础,决定着整个系统的性能和稳定性操作系统是在内核的基础上添加了各种工具集、桌面管理器、库、shell、应用程序等常用shell命令都在bin目录下,即是可执行文件,属于ubuntu系统不属于内核开发板虽然没有ubuntu操作系统,但是也可以使用这些命令,都放在根文件系统下面。

m0_60718520的博客 3330

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

[ linux ]内核编译过程及教程

【linux】内核编译过程及教程

已转行谢谢 2794

Linux内核模块开发技术指南:十分钟完成第一个内核模块

本文介绍了Linux内核模块开发的基本流程。首先展示了一个最简单的内核模块源码hello.c,包含加载和卸载函数,使用printk打印调试信息。接着说明Makefile的编写方法,需指定内核源码路径和模块名。最后演示编译运行过程:执行make生成.ko文件,用insmod加载模块,通过dmesg查看printk打印的"Hello,Linux Kernel"信息。该示例完整展示了内核模块从编写、编译到加载运行的整个流程。

ych4444的博客 605

linux内核基于x86,编译Linux内核(上)--编译基于x86平台的Linux内核的过程

转载自:http://blog.youkuaiyun.com/newthinker_wei/article/details/8014766编译内核。第一步:下载源码并存入Linux目录,我是放到了/usr/src目录下,别的目录也可以。一般下载下来的源码都是文件名为"linux-$版本号.tar.bz2"的数据包格式,比如"linux-2.6.15.5.tar.bz2”。第二步:将数据包解压。这里一定要注意,...

weixin_34025386的博客 673

【硬核】手摸手教你修改编译安装linux内核

阅读须知:这一篇文章写于我当时联创夏令营时做的一个任务,大概就是需要我们修改linux内核的网络协议栈,然后达到发送特定的网络包可以知道这台电脑是否被后门(安装了我们修改的linux内核)或者在这台电脑上面执行shell命令等。之后为了避免答辩的时候卡壳,所以写了一份提纲,也就是这篇文章啦,同样,不打算做修改,毕竟该有的步骤都有了。 查看当前的内核版本 uname -r 然后到官网去找一个内核版本进行下载 传送门 我这是第二次安装,选了一个稍微低一点的版本,第一次选的高版本默认配置编译出来的东西19个G

汪阿少的博客 6966

【学习笔记】编译Linux内核(上)--编译基于x86平台的Linux内核的过程

编译Linux内核。       第一步:下载源码并存入Linux目录,我是放到了/usr/src目录下,别的目录也可以。一般下载下来的源码都是文件名为"linux-$版本号.tar.bz2"的数据包格式,比如"linux-2.6.15.5.tar.bz2”。       第二步:将数据包解压。这里一定要注意,解压这个过程必须在linux内完成,不要在windows下解压,如果在w

NewThinker_wei 的专栏 3778

Ubuntu20.04编译Linux内核

Ubuntu20.04编译Linxu内核教程

qq_43509129的博客 6688

十分钟掌握 Kconfig 配置系统

Kconfig十分钟入门指南 本文介绍了Linux内核和嵌入式开发中广泛使用的Kconfig配置系统。Kconfig提供层次化菜单结构,支持布尔、三态、字符串等多种数据类型,通过depends on和select管理配置依赖关系。文章详细讲解了主菜单定义、配置项类型、依赖关系、菜单组织和条件菜单等核心语法,并提供了驱动配置、安全设置等实战示例。Kconfig可生成.config配置文件和autoconf.h头文件,是管理复杂构建选项的强大工具,适合内核开发者和嵌入式工程师掌握使用。

weixin_43149888的博客 1608

使用 VSCode + qemu 搭建 Linux 内核调试环境

Posted on2019-10-24byhowardlau 目录[隐藏] 1编译调试版 Linux 内核 1.1Ubuntu 1.2CentOS 1.3Fedora 2制作 initramfs 3启动内核并调试 4配置 VSCode 4.1.vscode/c_cpp_properties.json 4.2.vscode/tasks.json 4.3.vscode/launch.json 4.4.vscode/settings.json ...

eydwyz的专栏 3059
下一篇: 如何编写一个Linux内核模块,这次手把手教你【建议小白收藏】
書生途66
博客等级 码龄5年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值