Linux Kernel

[转帖]Linux内核之vmlinux与vmlinuz

六月ゝ 毕业季﹏ 提交于 2020-04-21 12:05:59
Linux内核之vmlinux与vmlinuz https: // www.cnblogs.com/ldxsuanfa/p/9952120.html 因为是初次系统的学习Linux内核,过程中遇到了一些常常出现的名词。似曾相识,但对他们的含义又不是非常清楚。因此,将搜索到的内容进行一下汇总。 1.vmlinux vmlinux是一个包括linux kernel的静态链接的可运行文件。文件类型是linux接受的可运行文件格式之中的一个(ELF、COFF或a.out)。 2.vmlinuz vmlinuz是可引导的,压缩的linux内核,“vm”代表的“virtual memory”。 vmlinuz是vmlinux经过gzip和objcopy(*)制作出来的压缩文件。vmlinuz不仅是一个压缩文件,并且在文件的开头部分内嵌有gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。 vmlinuz是一个统称。有两种详细的表现形式:zImage和bzImage( big zImage )。 zImage和bzImage的差别在于本身的大小和载入到内存的地址不同。zImage是0~640KB,bzImage是1M以上。假设内核比較小。那么能够採用zImage 或bzImage之中的一个,两种方式引导的系统运行时是同样的。大的内核採用bzImage

升级 Ubuntu Linux 内核的几种不同方法

筅森魡賤 提交于 2020-04-19 10:59:10
这个指南里介绍了 7 种为 Ubuntu 升级 Linux 内核的不同方法。这 7 种方法里,有 5 种需要重启系统来使新内核生效,其他两种则不用。升级之前, 强烈建议你将重要数据进行备份! 这里提到的所有方法只在 Ubuntu 中测试过。我们并不确定这些方法是不是也能适用于其他 Ubuntu 的特色发行版(如: Xubuntu)和衍生发行版(如:Linux Mint)。 第一部分:需要重启的内核升级 以下方法需要你重启系统以便新的内核生效。以下所有方法都建议在个人系统或测试系统中进行。重要的事儿再说一遍,请备份好你 Ubuntu 中的重要数据、配置文件和其他重要的东西。 方法 1 - 使用 dpkg 升级 Linux 内核(手动方式) 这个方法可以帮助你从 kernel.ubuntu.com 网站手动下载可用的最新 Linux 内核。如果你打算安装最新版(而不是稳定版或者正式发布版),那这种方法对你会很有用。从以上链接下载 Linux 内核版本。编写这个指南的时候,最新的可用版本是 5.0-rc1 ,最新的稳定版是 v4.20 。 点击你所选择的 Linux 内核版本链接,找到你对应的架构(“Build for XXX”)的那部分。然后下载符合以下格式的两个文件(其中 X.Y.Z 是最高版本号): linux-image- X.Y.Z -generic-*.deb linux

为什么tcp的TIME_WAIT状态要维持2MSL

社会主义新天地 提交于 2020-04-12 17:28:07
本文主要分析为什么TIME_WAIT状态的持续时间是2MSL而不是1MSL,3MSL或其它的时长,而不会详细描述为什么需要TIME_WAIT状态。 阅读本文需要的预备知识: 了解TCP协议的状态变迁; 了解TCP拆链的四次挥手过程; 了解为什么需要TIME_WAIT状态。 正文 其实这个问题在《TCP/IP详解》以及《UNIX网络编程》这两本书中都有提及,但这两本书上的描述都比较简洁并不是特别容易理解,记得在第一次看《UNIX网络编程》时,我曾经反复阅读相关段落并花了不少时间来想这个问题,但并没有搞得很清楚,始终是懂非懂的样子,直至后来有机会参与TCP/IP协议栈的开发后才真正got到这个问题的关键点。 根据第三版《UNIX网络编程 卷1》2.7节,TIME_WAIT状态的主要目的有两个: 优雅的关闭TCP连接,也就是尽量保证被动关闭的一端收到它自己发出去的FIN报文的ACK确认报文; 处理延迟的重复报文,这主要是为了避免前后两个使用相同四元组的连接中的前一个连接的报文干扰后一个连接。 很明显,要实现上述两个目标,TIME_WAIT状态需要持续一段时间,但这段时间应该是多长呢? 如果只考虑上述第一个目标,则TIME_WAIT状态需要持续的时间应该参考对端的RTO(重传超时时间)以及MSL(报文在网络中的最大生存时间)来计算而不是仅仅按MSL来计算

深入理解 Linux 的 RCU 机制

醉酒当歌 提交于 2020-04-12 15:36:39
欢迎大家前往 腾讯云社区 ,获取更多腾讯海量技术实践干货哦~ 作者: 梁康 RCU(Read-Copy Update),是 Linux 中比较重要的一种同步机制。顾名思义就是“读,拷贝更新”,再直白点是“随意读,但更新数据的时候,需要先复制一份副本,在副本上完成修改,再一次性地替换旧数据”。这是 Linux 内核实现的一种针对“读多写少”的共享数据的同步机制。 不同于其他的同步机制,它允许多个读者同时访问共享数据,而且读者的性能不会受影响(“随意读”),读者与写者之间也不需要同步机制(但需要“复制后再写”),但如果存在多个写者时,在写者把更新后的“副本”覆盖到原数据时,写者与写者之间需要利用其他同步机制保证同步。 RCU 的一个典型的应用场景是链表,在 Linux kernel 中还专门提供了一个头文件(include/linux/rculist.h),提供了利用 RCU 机制对链表进行增删查改操作的接口。本文将通过一个例子,利用 rculist.h 提供的接口对链表进行增删查改的操作,来讲述 RCU 的原理,以及介绍 Linux kernel 中相关的 API(基于 Linux v3.4.0 的源码)。 增加链表项 Linux kernel 中利用 RCU 往链表增加项的源码如下: #define list_next_rcu(list) (*((struct list_head

Linus Torvalds 宣布新版Linux系统内核发布

╄→尐↘猪︶ㄣ 提交于 2020-04-11 13:15:31
在新冠病毒爆发期间,Linus Torvalds 宣布了 Linux 5.6 的第七个每周候选版本,即 Linux Kernel 5.6-rc7 的发布。作为一个小更新,rc7 并未带来较大的变化。 Linus Torvalds 在发布公告中评论称,尽管 Linux 5.6-rc7 可能经历了一段奇怪的时期,但 Linux 5.6 内核的开发却看起来很正常。 “我们周围的世界可能正在经历陌生的时代,但至少到目前为止,内核开发看起来很正常。与往常一样,Linux Kernet 5.6-rc7 的更新主要集中在驱动程序上,包括 gpu、mmc、staging、iio、usb、音频,针对 VM 的修复和 Arch 的一些更新/文档/工具(主要是 turbostat)等。” Torvalds 表示, “没有什么真正脱颖而出的,它们都很小。我将保持乐观,并说这是因为我们可以正常地平静释放病毒,但是显然这可能有部分是因为每个人都被病毒的困扰分散了注意力。但是在内核方面,我还没有看到任何令人担忧的事情。” 来源: oschina 链接: https://my.oschina.net/linuxmeng/blog/3229113

Linux内存初始化(一)

烂漫一生 提交于 2020-04-06 01:49:08
一、前言 一直以来,我都非常着迷于两种电影拍摄手法:一种是慢镜头,将每一个细节全方位的展现给观众。另外一种就是快镜头,多半是反应一个时代的变迁,从非常长的时间段中,截取几个典型的snapshot,合成在十几秒的镜头中,可以让观众很快的了解一个事物的发展脉络。对应到技术层面,慢镜头有点类似情景分析,把每一行代码都详细的进行解析,了解技术的细节。快镜头类似数据流分析,勾勒一个过程中,数据结构的演化。本文采用了快镜头的方法,对内存初始化部分进行描述,不纠缠于具体函数的代码实现,只是希望能给大家一个概略性的印象(有兴趣的同学可以自行研究代码)。BTW,在本文中我们都是基于ARM64来描述体系结构相关的内容。 二、启动之前 在详细描述linux kernel对内存的初始化过程之前,我们必须首先了解kernel在执行第一条语句之前所面临的处境。这时候的内存状况可以参考下图: bootloader有自己的方法来了解系统中memory的布局,然后,它会将绿色的kernel image和蓝色dtb image copy到了指定的内存位置上。kernel image最好是位于main memory起始地址偏移TEXT_OFFSET的位置,当然,TEXT_OFFSET需要和kernel协商好。kernel image是否一定位于起始的main memory(memory address最低)呢?也不一定

Linux Kernel 4.14 LTSI正式推出

廉价感情. 提交于 2020-03-15 02:55:46
导读 Linux 基金会的LTSI(长期支持计划)小组今天在Twitter上证实,未来2 - 3年支持的下一个LTS Linux内核版本将是Linux 4.14。 长期支持计划(LTSI)项目旨在为其产品中使用Linux内核的硬件供应商提供至少2 - 3年的支持,这是消费者设备的典型生命周期,旨在消除其中的碎片。设备供应商和GNU/Linux发行版使用的各种Linux内核版本。 它还使设备供应商更容易上游,更容易进入主Linux内核分支。在Linux 4.9内核系列(2017年9月21日作为LTSI内核发布)推出一年之后,Linux 4.14.75 LTS内核现在是硬件供应商最新,最先进的LTSI内核。 “谢谢大家,发送补丁和测试。另外,对Geert作为次级维护者的大力支持!我还要感谢Greg [Kroah-Hartman] [...]最终与最新的LTS同步[Linux内核] 4.14 .75刚刚今天发布,“Tsugikazu Shibata说。 “我希望这个版本能够长期用于您的产品和/或服务。” 更多基于Linux的设备将运行最新的Linux内核 为设备供应商提供更新的Linux内核分支对所有消费者来说都是一个好消息,而不仅仅是开源社区。 Linux内核目前用于所有Android设备以及Google的Chrome OS设备,因此对于他们来说,运行市场上最新的

安全建议:将系统升级到Linux 5.4稳定版内核,很重要!

◇◆丶佛笑我妖孽 提交于 2020-02-27 02:30:35
Greg Kroah-Hartman 在邮件公告中称, Linux Kernel 5.3 支持到期后,将不再收到关键安全问题或 bug 的维护更新,感兴趣的朋友可翻阅 5.3.y 的 Git Tree 。 Linux 内核开发人员 Greg Kroah-Hartman 宣布了 Linux 5.3 内核系列的第 18 个维护更新(5.3.18)。该版本共更改了 59 个文件,插入 369 项 / 移除 329 项。此外开发者指出,这将是 Linux 5.3 内核系列的最后一个维护更新。随着 Linux Kernel 5.3 抵达 EoL,官方建议用户及时更新至 Linux Kernel 5.4,以获得全面的支持与保障。 Greg Kroah-Hartman 在邮件公告中称,Linux Kernel 5.3 支持到期后,将不再收到关键安全问题或 bug 的维护更新,感兴趣的朋友可翻阅 5.3.y 的 Git Tree 。 无论是普通 Linux 用户、还是发行版供应商,再次都强烈建议大家将 OS 升级到最新的 Linux 5.4 内核系列。若当前暂时无法实现,也请至少更新至 5.3.18 版本。 来源: oschina 链接: https://my.oschina.net/linuxmeng/blog/3170740

为什么要在C语言中这么频繁地对结构进行typedef?

 ̄綄美尐妖づ 提交于 2020-02-26 06:24:16
我看过很多程序,其中包括以下结构 typedef struct { int i; char k; } elem; elem user; 为什么经常需要它? 有任何特定原因或适用范围? #1楼 Linux内核编码样式 第5章给出了使用 typedef 优缺点(主要是缺点)。 请不要使用“ vps_t”之类的东西。 对结构和指针使用typedef是 错误的 。 当你看到一个 vps_t a; 在源代码中是什么意思? 相反,如果说 struct virtual_container *a; 您实际上可以说出“ a”是什么。 许多人认为typedef是“帮助可读性”。 不是这样 它们仅对以下有用: (a)完全不透明的对象(使用typedef主动 隐藏 该对象是什么)。 例如:“ pte_t”等不透明对象,您只能使用适当的访问器函数来访问。 注意! 不透明和“访问器功能”本身不好。 之所以将它们用于pte_t等之类,是因为那里确实存在绝对 零的 可访问信息。 (b)清除整数类型,其中抽象 有助于 避免混淆,无论是“ int”还是“ long”。 u8 / u16 / u32是完美的typedef,尽管它们比这里更适合(d)类。 注意! 再次-需要有一个 原因 。 如果某事是“无符号的长”,则没有理由这样做 typedef unsigned long myflags_t; 但是

解读容器 2019:把“以应用为中心”进行到底

好久不见. 提交于 2020-01-06 14:25:07
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 作者 | 张磊 阿里云高级技术专家、CNCF 官方大使,Kubernetes 项目资深成员和联合维护者 在下一个十年交替之际,你是否知道,这个看似波澜不惊的云原生技术生态,又在孕育和经历着哪些全新的变革呢? 前言 在这一年,这个生态具有标志性意义的 KubeCon,史无前例的吸引到了一万两千人涌入圣地亚哥,整个会议的赞助商列表,多到一张十余米长的巨幅海报才堪堪放下。 在这一年,Kubernetes 终于成为了广受认可的基础设施领域工业标准,而这个标准的确立,则以 AWS 的重量级投入画上了圆满的句号。 在这一年,在社区头部参与者的持续推进下,“规模”与“性能”终于成为了 Kubernetes 项目的重要关键词,这不仅真正意义上打通了 Kubernetes 在企业生产环境中大规模落地的最后一公里,也让 Kubernetes 第一次成为了 “双11” 等顶级互联网规模化场景中实实在在的技术主角。 在下一个十年交替之际,你是否知道,这个看似波澜不惊的云原生技术生态,又在孕育和经历着哪些全新的变革呢? 规模:Kubernetes 项目的新名片 如果要提名 2019 年的云原生技术演进的重要节点,那么“规模”一定是其中最当仁不让的关键词。 出于设计理念上的侧重点考虑,Kubernetes 项目在过去乃至到 2019