当前位置:首页 > Linux
  • Linux Kernel 5.9.1 及更早版本发现数据泄露

    Linux Kernel 5.9.1 及更早版本发现数据泄露

    Linux内核最近发现了一系列错误,这些错误允许攻击者在没有经验证据的情况下获得访问机密数据和现有帐户的权限。 以下是漏洞详情: 漏洞详情 1.CVE-2020-26088 严重程度:高 net / nfc / rawsock.c中的NFC套接字创建中缺少CAP_NET_RAW检查,本地攻击者可以绕过安全机制来使用其创建原始套接字,获取特权,从而未经授权访问机密数据和现有账户。 2.CVE-2020-25645 严重程度:高 当IPsec配置为对GENEVE隧道使用的特定UDP端口的通信进行加密时,两个Geneve端点之间的通信可能不会被加密,从而允许两个端点之间的任何人读取未加密的通信。此漏洞的主要威胁是对数据保密性。 3.CVE-2020-27673 严重程度:高 该漏洞可能导致拒绝服务。每当一个事件被内核接受时,另一个事件就可以通过同一个事件进来通道。这个如果新事件以高速率传入,则可能导致事件处理循环长时间运行。在极端情况下,这可能导致内核完全挂起,导致dom0受到影响时主机出现DoS(拒绝服务)。 4.CVE-2020-27675 严重程度:高 Linux内核事件通道处理代码不会针对被并行删除的同一事件通道来保护事件的处理。 这可能导致访问已释放的内存区域或在事件处理代码中取消对空指针的引用,从而导致系统行为错误甚至崩溃。 5.CVE-2020-25643 严重程度:高 在HDLC_PPP模块中发现了一个漏洞。ppp_cp_parse_cr函数中不正确的输入验证会导致内存损坏和读取溢出,这可能导致系统崩溃或导致拒绝服务。此漏洞带来的最大威胁是对数据机密性和完整性以及系统可用性的威胁。 受影响产品和版本 此漏洞影响Linux Kernel 5.9.1及更早版本(Linux发行版4.6内核以上)Linux 发行版: RedHat RHEL 8, Ubuntu Bionic(18.04)及更高版本, Debian 9和10, CentOS 8, Fedora等基于这些内核的Linux发行版都会受到影响 解决方案 linuxkernel-5.9.1的升级或更新可以弥补这一点。

    时间:2020-10-27 关键词: Linux kernel 漏洞

  • Linux内核社区接受了SM2国密算法被

    Linux内核社区接受了SM2国密算法被

    制定了大量的密码管理方案和方案,并制定了大量的密码管理方案和规范。 随着近年来外部的国际贸易冲突和技术封锁,内部互联网的快速发展,IoT 领域的崛起,以及金融领域的变革愈演愈烈。摆脱对国外技术和产品的过度依赖,建设行业网络安全环境,增强我国行业信息系统的安全可信显得尤为必要和迫切。 密码算法是保障信息安全的核心技术,尤其是最关键的银行业核心领域长期以来都是沿用 3DES、SHA-1、RSA 等国际通用的密码算法体系及相关标准。  2010 年底,国家密码管理局公布了我国自主研制的“椭圆曲线公钥密码算法”(SM2 算法)。为保障重要经济系统密码应用安全,国家密码管理局于 2011 年发布了《关于做好公钥密码算法升级工作的通知》,明确要求“自 2011 年 3 月 1 日起,在建和拟建公钥密码基础设施电子认证系统和密钥管理系统应使用国密算法。自 2011 年 7 月 1 日起,投入运行并使用公钥密码的信息系统,应使用 SM2 算法。” 自 2012 年以来,国家密码管理局以《中华人民共和国密码行业标准》的方式,陆续公布了 SM2/SM3/SM4 等密码算法标准及其应用规范。其中“SM”代表“商密”,即用于商用的、不涉及国家秘密的密码技术。 这其中值得我们关注的主要是以下公开的算法: SM2:基于椭圆曲线密码(ECC)的公钥密码算法标准,提供数字签名,密钥交换,公钥加密,用于替换 RSA/ECDSA/ECDH 等国际算法 SM3:消息摘要算法,哈希结果为 256 位,用于替换 MD5/SHA1/SHA256 等国际算法 SM4:对称加密算法,密钥长度和分组长度均为 128 位,主要用于无线局域网标准,用于替换 DES/AES 等算法 国密证书:这里的国密证书指的是使用国密算法(SM2-with-SM3)的标准 X509 格式证书,证书使用 SM3 作为哈希算法,使用 SM2 作为数字签名算法 国密 SSL:采用国密算法,符合国密标准的安全传输协议,也就是 SSL/TLS 协议的国密版本。 SM2进阶Linux内核之路 目前 Linux 内核已经较好的支持了 SM3 和 SM4 算法,这得益于无线局域网标准的广泛使用。但 SM2 算法和国密证书迟迟没有得到支持,也就无法基于国密来建立全栈可信和内核中的完整性验证,因此在内核中支持这一套体系也变得迫切起来。整个规划是:在内核中支持 SM2 算法和国密证书,在内部业务率先应用起来后,最终推进到社区。 整个流程下来,诸多不顺,权且记录下来。 第一回 有了规划,接下来就是考虑如何实施。但凡密码学算法,都会先考虑是否可以从 openssl 做移植。幸运的是,openssl 对 SM2/3/4 支持得非常好,椭圆曲线算法的实现久经考验,非常成熟,而且最新版本也完整支持了国密证书。 不幸的是,openssl 的各个模块之间耦合度很高,要实现 SM2 和国密证书,需要移植 openssl 架构和基础设施代码,包括 BIGNUM、ECC、X509 等。这个工作量无疑是巨大的,即便实现了,这种方式也很难被社区接受,再三考虑权衡后,果断放弃了这条"捷径"。 第二回 发现了一个令人惊喜的事实:内核中已经有了一个椭圆算法的基础实现(crypto/ecc.c),何不尝试基于这个算法来做呢?于是参照 SM2 规范开始编码,但结果有点遗憾,这个椭圆算法在 SM2 上居然失效了,连最基本的点乘结果都是错的!纳尼?剧本不应该是这样的。于是发邮件咨询该算法的一个资深开发者,很快就得到了下面的回复(感叹天下还是好心人多):  Shamir's trick algo is probably generic, but it's ecc_point_double_jacobian()that is curve specific. Algorithms are chosen that are fit curves I (and previous coders) used.You need to check their properties carefully if you going to use them. Some variants of used algos, that may fit other curves, are in referencedpapers (in comments). 总结原因:这个算法是经过高度优化的算法,是精确适配过 NIST 和 ECRDSA 椭圆曲线参数的,并不一定适合国内的 SM2 曲线参数,看来这条路是走不通了......  ......哭泣中,别理我。 ......擦干眼泪,看成败,人生豪迈,不过是从头再来......  第三回 经过反复探索,发现内核中 RSA 算法是基于一个 mpi(高精度整数)库实现的,这个库来源于 libgcrypt(这是知名隐私保护软件 GnuPG 的底层算法实现)。内核中已经实现了一个早期版本的 mpi,当时就是为了实现 RSA 引入的。 现在的 libgcrypt 已经有了完整的椭圆曲线基础算法,于是抱着试试看的心态基于 libgcrypt 测试 SM2 算法曲线,苍天保佑,这次的惊喜没有变成惊吓,实验结果与 SM2 规范一致。 第四回 libgcrypt 中的 ECC 算法是个通用的算法,实现耦合度低。于是有了一个想法,可以尝试先在 libgcrypt 中实现 SM2,小试牛刀之后再把这一套东西全部移植到内核,进一步推进到社区,看起来这也是能被社区接受的方式。 有了计划后,索性摆个安逸的造型,庄严肃穆地将双手放在键盘上,让思维随着手指自然流淌,接下来的开发调试就比较顺利了,很快便有了公钥算法的四件套:加密,解密,签名,验签。 一鼓作气把这些实现提交到了 libgcrypt 社区,经过两轮的审核再修改之后,最终 SM2 算法作为 ECC 的一个子算法被社区接受,这里要感谢 libgcrypt 的维护者之一的 NIIBE Yutaka,耐心友好,对中国传统文化也很了解。整体过程比较顺利,表过不提。附上相关提交: 第五回 趁热打铁,由于内核中的 lib/mpi 库是一个较老的版本并且是为 RSA 服务的,相对于 libgcrypt 中的 mpi,是一个阉割的版本,需要移植缺失的函数以及 ECC 算法,这没什么技术难度,却也是一个精细活,工作量也不小。 在实践中,把实现 SM2 的过程中所缺失的东西都移植过来,很快便有了相应的 SM2 算法和国密证书的实现。再经过几轮打磨,并做了充分的测试后,就有了最初的这组补丁: https://lkml.org/lkml/2020/2/16/43  第六回 中国古语曰过,一鼓作气,再而衰,三而竭,事情的进展再次遇到阻碍。Linux 内核比不得专用的密码学库,对于这么一个不怎么知名的算法,社区并没有表现出什么兴趣,甚至鲜有人问津,最终以没有实际应用场景而被拒绝。事情当然不能就这么结束,考虑到代码量大,维护者审核意愿低,果断裁剪掉了 SM2 的加解密和签名,只保留了支持国密证书必要的验签功能,后来陆陆续续又做了一些小修小补,同时给 IMA 的上游做了国密算法的增强以便将国密功能在 IMA 场景的应用作为实际案例。 同时,随着跟相关开发者和维护者不断的软si磨chan硬lan泡da,不断地发送新的补丁,最后甚至都摸透了维护者习惯性的回复时间和补丁的合入规律,持续地缓慢推进 SM2 进入社区的步伐。这期间没有波澜壮阔的故事,也没有狗血的剧情,balabalabala......,省略while (1) {...} 循环。 第七回 年过中秋月过半, 历时半年多时间,SM2 早已不是那个最熟悉的娃,不知不觉补丁也更新到了 v7 版本。中秋月圆之夜向来都是有大事要发生的。是夜,一个盖世英雄,头顶锅盖,腰缠海带,脚踩七彩祥云飞过来了,SM2 终于等到了它的至尊宝。言归正传,这个版本的补丁最终被社区接受,目前已经合并到了 Linux 主线的 5.10-rc1: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?qt=author&q=Tianjia+Zhang  如不出意外会在 5.10 内核版本中正式发布。 libgcrypt 全面支持国密算法 后来有幸在某个机缘巧合之下,在 libgcrypt 中实现了 SM4。作为国密开发过程的一个附属产物,目前 libgcrypt 已经全面支持了国密算法 SM2/3/4,这些实现都会在下一个版本 1.9.0 正式发布。其中 SM3 由相关同事在 2017 年开发。 ima-evm-utils 支持 SM2-with-SM3 国密签名 内核已经支持了 SM2 和国密证书,作为 IMA 完整性签名的用户态工具,ima-evm-utils 对国密的支持当然不能落下,附上相关的提交: https://sourceforge.net/p/linux-ima/ima-evm-utils/ci/ceecb28d3b5267c7d32c6e9401923c94f5786cfb/log/?path=  已知问题 当下 SM2 还有一些问题需要注意: SM2 X509 证书中没有为 SM2 公钥算法定义独立的 OID 标识,目前是识别 OID_id_ecPublicKey 标识默认当作 SM2 SM2 规范没有为推荐的椭圆曲线参数定义 OID 标识,这也导致 SM2 算法仅有一个默认的椭圆曲线参数 SM2 规范中对消息签名时,除了要计算消息自身的 SM3。同时 SM2 椭圆曲线参数和公钥都要参与到 SM3 的计算中来,SM2 私钥签名是对最终的哈希结果做签名,这一规范定义是有点另类,这是与国际通用算法的一个主要差异:  正常情况下,X509 证书解析与算法都被实现为独立的模块。正是由于 SM2 的这个规范会导致实现上的强耦合:X509 证书验证时需要计算证书中 tbs 的 SM3 哈希,这个哈希同样需要椭圆曲线参数以及公钥数据,而这些数据是一次完整 SM2 验签过程中的临时数据,目前的内核中并没有提供这样的回调机制(当然这是 SM2 的特殊情况),这就把 X509 证书解析与 SM2 算法强绑到了一起,没法解耦。 这也导致了应用该功能的一点限制,SM2 只能支持内建编译(Y),而不支持编译成模块(M),让 X509 在编译时就知道已经支持 SM2,才能正常验签国密证书。从实现上看,也有一些动态加载 SM2 模块获取获取函数指针的方法,相比于框架层的支持,都不是很友好。 IMA 签名在计算文件哈希的时候,内核是直接计算文件哈希的,这块并没有针对是否使用 SM2 签名而做特殊处理(指上图中的增加 Za 值)。当下内核做的 IMA 国密签名验证的支持,同时也支持了 ima-evm-utils 的国密 sm2+sm3 签名(依赖最新的 openssl),目前这块都是直接计算文件哈希,没有加 Za 值,这也是当下最优的方案。 需要说明的一点是,Za 是国密签名以及验签里要求的,只是签名验签的流程里需要,但是国密这个流程跟目前主流的算法是相悖的,如果要支持,内核和 ima-evm-utils 工具都需要较大修改,内核要涉及到架构修改,社区也不愿意接受,所以目前就按主流方式支持了 sm2+sm3 的 IMA 签名。 总而言之,言而总之两条: 要支持国密证书验证,SM2 要么不编译,要么必须内建编译,不支持编译成模块。当然了,SM2 作为一个非对称算法,只签名一个哈希或者基于国密的 IMA 验证,并没有这个限制。IMA 签名工具 ima-evm-utils 以及内核计算文件 SM3 哈希所用的国密算法没有加 Za,这个是与规范的一点差异。 - THE END - #Linux#加密 中国的责任

    时间:2020-10-26 关键词: 算法 sm2 Linux

  • 从串口驱动到Linux驱动模型

    点击上方「嵌入式大杂烩」,「星标公众号」第一时间查看嵌入式笔记! 原文:https://www.jianshu.com/p/3a9013b9569c 作者:Linkerist 大家好,我是ZhengN,本次给大家分享一篇长文。文章比较长,也比较老,但是也可以从中理清一些概念、知识点。下转原文: 本文通过对Linux下串口驱动的分析。由最上层的C库。到操作系统系统调用层的封装。再到tty子系统的核心。再到一系列线路规程。再到最底层的硬件操作。 对Linux中的tty子系统进行简要的说明。从理论到实践。以便读者能对OS原理有更深入的了解和更具体的掌握。 在具体分析之前。我们必须对串口。驱动。和Linux操作系统有一定的了解。这一阶段我们有三个问题需要解决: 1.什么是Linux操作系统。 2.什么是Linux设备驱动。 3.关于串口的种种。 要了解这些概念。如下我介绍了一点这方面的知识。不过遗憾的是对一些概念有着不可避免的向前引用。 这个过程中我会尽量忽略次要因素。以在本次调研中最主要目的为主线。如果读者您对这些概念已经有很深入的理解。可以直接阅读后面的代码分析: 1、什么是Linux操作系统 ? Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。 它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。 Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。 Linux具备惊人的可移植性。可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。 严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。 在这几个简要的段落中。有不少新的名词被引入了进来。下面我对几个重要的概念进行描述。 A、关于类UNIX系统 类Unix系统(英文:Unix-like)指各种传统的Unix系统(比如FreeBSD、OpenBSD、SUN公司的Solaris)以及各种与传统Unix类似的系统(例如Minix、Linux、QNX等)。 它们虽然有的是自由软件,有的是商业软件,但都相当程度地继承了原始UNIX的特性,有许多相似处,并且都在一定程度上遵守POSIX规范。 这个在一些经典的操作系统教科书中已经作了说明。我们仅需知道。它和我们熟知的Windows系列操作系统一样。都是一种现代操作系统。对底层的计算机资源进行抽象。对上层用户提供调用接口。完成计算机应该完成的功能。 B、关于可移植性 可移植性指与软件从某一环境转移到另一环境下的难易程度。为获得较高的可移植性,在设计过程中常采用通用的程序设计语言和运行支撑环境。尽量不用与系统的底层相关性强的语言。 可移植性是软件质量之一,良好的可移植性可以提高软件的生命周期。代码的可移植性主题是软件;可移植性是软件产品的一种能力属性,其行为表现为一种程度,而表现出来的程度与环境密切相关。 一个操作系统的可移植性往往表现在它能在运行在不同的体系结构上。感性的理解就是可以支持的设备有很多。比如前文所说的,Linux可以运行在大型服务器上。各种平板电脑上。 前段时间有黑客成功的把Linux移植到一个佳能照相机上。并且在这个照相机上运行了一些主流的软件。可以说。只要有足够可以利用的硬件资源。就可以把Linux移植到这个硬件平台上去。这个资源的最低要求往往很低。这可以与对硬件资源要求很高的Windows有一个鲜明的对比。举个例子就是。当Windows 10的升级提示从你计算机的右下角弹出时。 你可以不假思索的点击‘马上升级’吗?我想大多数人对这个问题的答案是否定的。为什么?因为大多数情况下。升级之后就会变得更卡。延迟更大。一些无用而庞大的软件疯狂的占用你有限的计算机资源。而如果你选择的是Linux。你几乎可以任意的在计算机上安装软件。运行程序(如果你的内存不是太小。且硬盘交换分区足够的话)。 Linux核心已经将有限的硬件资源发挥到了极致。开源软件良好的模块化设计在各个层次上充分利用了程序的局部性原理。(当然这是在损失了一定易用性的前提下的。)。不好意思我扯远了。这些不是本文的重点。。 由于笔者没有土豪到有很多计算机。所以选择了一款比较便宜的ARM9开发板作为开发平台。它的CPU是三星公司生产的S3C2440。核心是ARM920T。 C、关于Linux的基本思想 Linux的基本思想有两点: 第一. 一切都是文件。系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近 第二. 每个软件都有确定的用途。。 D、关于Linux的特点 完全免费 Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的操作系统所做不到的。 正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变,这让Linux吸收了无数程序员的精华,不断壮大。 完全兼容POSIX1.0标准 这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。 许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。 多用户、多任务 Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。 良好的界面 Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。 支持多种平台 Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。2001年1月份发布的Linux 2.4版内核已经能够完全支持Intel 64位芯片架构。同时Linux也支持多处理器技术。多个处理器同时工作,使系统性能大大提高。 文件类型 普通文件(regular file):就是一般存取的文件,由ls-al显示出来的属性中,第一个属性为 [-],例如 [-rwxrwxrwx]。另外,依照文件的内容,又大致可以分为: 1、纯文本文件(ASCII):这是Unix系统中最多的一种文件类型,之所以称为纯文本文件,是因为内容可以直接读到的数据,例如数字、字母等等。设置文件几乎都属于这种文件类型。举例来说,使用命令“cat ~/.bashrc”就可以看到该文件的内容(cat是将文件内容读出来)。 2、二进制文件(binary):系统其实仅认识且可以执行二进制文件(binary file)。Linux中的可执行文件(脚本,文本方式的批处理文件不算)就是这种格式的。举例来说,命令cat就是一个二进制文件。 3、数据格式的文件(data):有些程序在运行过程中,会读取某些特定格式的文件,那些特定格式的文件可以称为数据文件(data file)。举例来说,Linux在用户登入时,都会将登录数据记录在 /var/log/wtmp文件内,该文件是一个数据文件,它能通过last命令读出来。但使用cat时,会读出乱码。因为它是属于一种特殊格式的文件。 4、目录文件(directory):就是目录,第一个属性为[d],例如 [drwxrwxrwx]。 连接文件(link):类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]。 5、设备与设备文件(device):与系统外设及存储等相关的一些文件,通常都集中在 /dev目录。通常又分为两种: 块设备文件:就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为 [b]。 字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]。 6、套接字(sockets):这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型。 7、管道(FIFO,pipe):FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p] 文件结构 /:根目录,所有的目录、文件、设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者。 /bin:bin 就是二进制(binary)英文缩写。在一般的系统当中,都可以在这个目录下找到linux常用的命令。系统所需要的那些命令位于此目录。 /boot:Linux的内核及引导系统程序所需要的文件目录,比如 vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录。 /cdrom:这个目录在刚刚安装系统的时候是空的。可以将光驱文件系统挂在这个目录下。例如:mount /dev/cdrom /cdrom /dev:dev 是设备(device)的英文缩写。这个目录对所有的用户都十分重要。因为在这个目录中包含了所有linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序。这一点和常用的windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。 /etc:etc这个目录是linux系统中最重要的目录之一。在这个目录下存放了系统管理时要用到的各种配置文件和子目录。要用到的网络配置文件,文件系统,x系统配置文件,设备配置信息,设置用户信息等都在这个目录下。 /home:如果建立一个用户,用户名是"xx",那么在/home目录下就有一个对应的/home/xx路径,用来存放用户的主目录。 /lib:lib是库(library)英文缩写。这个目录是用来存放系统动态连接共享库的。几乎所有的应用程序都会用到这个目录下的共享库。因此,千万不要轻易对这个目录进行什么操作,一旦发生问题,系统就不能工作了。 /lost+found:在ext2或ext3文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或移到文件到原来的位置上。 /mnt:这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom等目录。可以参看/etc/fstab的定义。 /media:有些linux的发行版使用这个目录来挂载那些usb接口的移动硬盘(包括U盘)、CD/DVD驱动器等等。 /opt:这里主要存放那些可选的程序。 /proc:可以在这个目录下获取系统信息。这些信息是在内存中,由系统自己产生的。 /root:Linux超级权限用户root的家目录。 /sbin:这个目录是用来存放系统管理员的系统管理程序。大多是涉及系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin目录是相似的,凡是目录sbin中包含的都是root权限才能执行的。 /selinux :对SElinux的一些配置文件目录,SElinux可以让linux更加安全。 /srv 服务启动后,所需访问的数据目录,举个例子来说,www服务启动读取的网页数据就可以放在/srv/www中 /tmp:临时文件目录,用来存放不同程序执行时产生的临时文件。有时用户运行程序的时候,会产生临时文件。/tmp就用来存放临时文件的。/var/tmp目录和这个目录相似。 /usr:这是linux系统中占用硬盘空间最大的目录。用户的很多应用程序和文件都存放在这个目录下。在这个目录下,可以找到那些不适合放在/bin或/etc目录下的额外的工具 /usr/local:这里主要存放那些手动安装的软件,即不是通过“新立得”或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面、。 /usr/share :系统共用的东西存放地,比如/usr/share/fonts 是字体目录,/usr/share/doc和/usr/share/man帮助文件。 /var:这个目录的内容是经常变动的,看名字就知道,可以理解为vary的缩写,/var下有/var/log 这是用来存放系统日志的目录。/var/ www目录是定义Apache服务器站点存放目录;/var/lib 用来存放一些库文件,比如MySQL的,以及MySQL数据库的的存放地。 如上。相信读者已经对Linux操作系统有了一个概观。对于一些具体命令。笔者决定需要用到的时候再做说明。现在我们来看看第二个概念: 2、什么是Linux设备驱动 设备驱动最通俗的解释就是驱使硬件设备行动。驱动与底层硬件直接打交道,按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的轮询、中断处理、DMA通信,进行物理内存向虚拟内存的映射等,最终让通信设备能收发数据,让显示设备能显示文字和画面,让存储设备能记录文件和数据。 Linux设备驱动是对底层硬件资源的抽象。对上层的操作系统其他服务提供一个良好的接口。让其他服务可以把一个特定的硬件。或是一种机制当做一个文件使用。使用通用的系统调用进行调用。 3、关于串口的种种 众所周知。我们现在的计算机上面有很多接口。如USB。网口。并口等。串口总线是其中的一个。串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。 串行接口 (Serial Interface) 是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。 串行通讯的特点是:数据位的传送,按位顺序进行,最少只需一根传输线即可完成;成本低但传送速度慢。串行通讯的距离可以从几米到几千米;根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。 串口通信的两种最基本的方式:同步串行通信方式和异步串行通信方式。 同步串行是指SPI(SerialPeripheral interface)的缩写,顾名思义就是串行外围设备接口。SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息,TRM450是SPI接口。 异步串行是指UART(UniversalAsynchronous Receiver/Transmitter),通用异步接收/发送。UART是一个并行输入成为串行输出的芯片,通常集成在主板上。UART包含TTL电平的串口和RS232电平的串口。 TTL电平是3.3V的,而RS232是负逻辑电平,它定义+5~+12V为低电平,而-12~-5V为高电平,MDS2710、MDS SD4、EL805等是RS232接口,EL806有TTL接口。 串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS485等。 RS-232 也称标准串口,最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。 它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。传统的RS-232-C接口标准有22根线,采用标准25芯D型插头座(DB25),后来使用简化为9芯D型插座(DB9),现在应用中25芯插头座已很少采用。 RS-232采取不平衡传输方式,即所谓单端通讯。由于其发送电平与接收电平的差仅为2V至3V左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约15米,最高速率为20kb/s。RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为3~7kΩ。所以RS-232适合本地设备之间的通信。 RS-422 标准全称是“平衡电压数字接口电路的电气特性”,它定义了接口电路的特性。典型的RS-422是四线接口。实际上还有一根信号地线,共5根线。其DB9连接器引脚定义。由于接收器采用高输入阻抗和发送驱动器比RS232更强的驱动能力,故允许在相同传输线上连接多个接收节点,最多可接10个节点。 即一个主设备(Master),其余为从设备(Slave),从设备之间不能通信,所以RS-422支持点对多的双向通信。接收器输入阻抗为4k,故发端最大负载能力是10×4k+100Ω(终接电阻)。 RS-422四线接口由于采用单独的发送和接收通道,因此不必控制数据方向,各装置之间任何必须的信号交换均可以按软件方式(XON/XOFF握手)或硬件方式(一对单独的双绞线)实现。 RS-422的最大传输距离为1219米,最大传输速率为10Mb/s。其平衡双绞线的长度与传输速率成反比,在100kb/s速率以下,才可能达到最大传输距离。只有在很短的距离下才能获得最高速率传输。一般100米长的双绞线上所能获得的最大传输速率仅为1Mb/s。 RS-485 是从RS-422基础上发展而来的,所以RS-485许多电气规定与RS-422相仿。如都采用平衡传输方式、都需要在传输线上接终接电阻等。RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信,而采用四线连接时,与RS-422一样只能实现点对多的通信,即只能有一个主(Master)设备,其余为从设备,但它比RS-422有改进,无论四线还是二线连接方式总线上可多接到32个设备。 RS-485与RS-422的不同还在于其共模输出电压是不同的,RS-485是-7V至+12V之间,而RS-422在-7V至+7V之间,RS-485接收器最小输入阻抗为12kΩ、RS-422是4kΩ;由于RS-485满足所有RS-422的规范,所以RS-485的驱动器可以在RS-422网络中应用。 RS-485与RS-422一样,其最大传输距离约为1219米,最大传输速率为10Mb/s。平衡双绞线的长度与传输速率成反比,在100kb/s速率以下,才可能使用规定最长的电缆长度。只有在很短的距离下才能获得最高速率传输。一般100米长双绞线最大传输速率仅为1Mb/s。 笔者采用的RS-232串口通信协议。下面对其通信接线方法做简要说明。目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(

    时间:2020-10-26 关键词: 嵌入式 编程 Linux

  • Linux 5.8 内核,全局主题切换,全新组件上线

    Linux 5.8 内核,全局主题切换,全新组件上线

    10月23日,Yuqilin团队宣布ubuntukylin开源版本20.10正式发布。 20.10 是优麒麟发布的第 16 个版本,提供 9 个月的技术支持,与 Ubuntu 20.10、Lubuntu 20.10、Xubuntu 20.10、Ubuntu Mate 20.10 等开源发行版全球同步发布。 ▲ 图源:优麒麟开源操作系统,下同 IT之家了解到,此次发布的优麒麟 20.10 版本默认搭载最新 Linux 5.8 内核和 UKUI 3.0 桌面环境。拥有全新布局的任务栏和侧边栏,新增麒麟扫描、麒麟刻录、麒麟截图、麒麟应用安装器等应用软件,并且支持触屏手势功能和系统组件的全局主题切换,同时修复了开始菜单、文件管理器、控制面板等大量问题。 任务栏 支持深浅双色主题和圆角布局的任务栏,将快速启动栏与应用程序启动区域合二为一。 侧边栏 采用全新模块化架构设计的侧边栏,新增丰富可扩展的系统插件。 麒麟扫描 底层基于 SANE 标准库开发,支持绝大多数的扫描仪设备,拥有查找和连接扫描设备基础特点,以及一键美化、智能纠偏和文字识别等功能。 麒麟刻录 基于 k3b 二次开发,支持光盘的刻录、擦除、续刻及光盘内容 md5 校验等。 麒麟截图 麒麟截图在传统截图功能基础上增加了绘制矩形、圆形,添加模糊、标注和字体,以及固定图片到桌面上等功能。 麒麟应用安装 麒麟应用安装器支持快速安装软件,以及 deb 包的双击安装和一键卸载。 触屏手势功能 支持多指触屏手势功能,包括双指滑动、多指缩放等手势。 全局主题切换 开始菜单、任务栏、侧边栏等组件及自研应用软件均支持系统默认、深色、浅色三套主题切换。 优麒麟 Ubuntu 20.10 使用最新 5.8 版本内核,带来了许多功能增强和更多的设备支持。 部分重要更新: 内核并发处理器 (KCSAN) 内核事件通知机制 支持块层内联加密 私有 procfs 挂载 BPF iterator 机制 gcc 升级至 10.2.0 qt 升级至 5.14.2 python 升级至 3.8.6 用户可以使用镜像站或官网请访问www.ubuntukylin.com/downloads/Please注意,yukirin版本20.04的用户不建议更新到20.10,新用户也不建议更新到20.10到20.10更新跟踪函数传输到20.04更新源。

    时间:2020-10-24 关键词: 主题 优麒麟 Linux

  • V4L2的管道驱动程序是如何被Xilinx Linux 理解的

    V4L2的管道驱动程序是如何被Xilinx Linux 理解的

    Xilinx提供了完整的V4L2的驱动程序,Xilinx V4L2 driver。处于最顶层的驱动程序是V4L2框架的视频管道(Video pipeline)驱动程序,也叫桥驱动程序(bridge driver),主要代码在文件xilinx-vipp.c中。在V4L2框架中,整个视频管道(Video pipeline)可以通过媒体设备(/dev/media)配置,流媒体可以通过视频设备(/dev/video)控制。这两种设备,都是在视频管道(Video pipeline)驱动程序里创建的。所以,理解V4L2的管道(pipeline)驱动程序是理解Xilinx所有Video IP 在Linux下工作情况的基础。 3. 文件 3.1. C文件 Xilinx的V4L2的管道(pipeline)驱动程序在下面四个文件中。 1. drivers/media/platform/xilinx/xilinx-vipp.c 2. drivers/media/platform/xilinx/xilinx-vipp.h 3. drivers/media/platform/xilinx/xilinx-dma.c 4. drivers/media/platform/xilinx/xilinx-dma.h 3.2.设备树(devicetree) 设备树(devicetree)里含有整个视频管道(video pipeline)的配置,对应的文档在Documentation/devicetree/bindings/media/xilinx/xlnx,video.txt。 下面是一个设备树(devicetree)的例子。 axi_video_cap { compatible = "xlnx,axi-video"; dmas = , ; dma-names = "port0", "port1"; ports { #address-cells = ; #size-cells = ; port@0 { reg = ; direction = "input"; vcap0_in0: endpoint { remote-endpoint = ; }; }; port@1 { reg = ; direction = "input"; vcap0_in1: endpoint { remote-endpoint = ; }; }; }; }; 3.3. 函数调用关系图 xvipp 函数调用关系图 4.主要函数 4.1. 函数xvip_composite_probe() 函数xvip_composite_probe是整个驱动的入口,主要工作是初始化驱动的数据结构xvip_composite_device里的通用数据,包括lock、list(entities和dmas),再调用了xvip_composite_v4l2_init()和xvip_graph_init(),最后调用platform_set_drvdata设置平台设备platform_device里的当前设备的数据指针。 4.2. 函数xvip_composite_v4l2_init() 函数xvip_composite_v4l2_init做的事情比较简单,只是初始化了struct media_device,设置了设备版本和model名称、dev/mdev指针,就调用了v4l2_device_register()注册V4L2设备。 xvip_composite_v4l2_init的关键代码如下: xdev->media_dev.dev = xdev->dev; strlcpy(xdev->media_dev.model, "Xilinx Video Composite Device", sizeof(xdev->media_dev.model)); xdev->media_dev.hw_revision = 0; media_device_init(&xdev->media_dev); xdev->v4l2_dev.mdev = &xdev->media_dev; ret = v4l2_device_register(xdev->dev, &xdev->v4l2_dev); 4.3. 函数xvip_graph_init 函数xvip_graph_init是最重要的函数,函数调用层次也最深。它首先调用xvip_graph_dma_init根据设备树(devicetree)里的port信息初始化DMA通道,创建一个DMA的列表;再调用xvip_graph_parse在设备树(devicetree)里分析子设备节点,根据设备树里"remote-endpoint"属性创建一个Entity的列表;最后调用v4l2_async_notifier_register注册异步处理函数。系统发现各个子设备(subdev)后,调用异步处理函数xvip_graph_notify_bound获取子设备信息。所有子设备(subdev)都被发现后,调用xvip_graph_notify_complete,为每个entity创建Link和V4L2子设备,并注册media设备。 xvip_graph_init的关键代码如下: /* Init the DMA channels. */ ret = xvip_graph_dma_init(xdev); /* Parse the graph to extract a list of subdevice DT nodes. */ ret = xvip_graph_parse(xdev); /* Register the subdevices notifier. */ num_subdevs = xdev->num_subdevs; subdevs = devm_kcalloc(xdev->dev, num_subdevs, sizeof(*subdevs), GFP_KERNEL); xdev->notifier.subdevs = subdevs; xdev->notifier.num_subdevs = num_subdevs; xdev->notifier.ops = &xvip_graph_notify_ops; ret = v4l2_async_notifier_register(&xdev->v4l2_dev, &xdev->notifier); 4.4. 函数xvip_graph_dma_init xvip_graph_dma_init()自身比较简单,先找到第一个"ports"子节点,再找其中的所有"port"节点,并为每个"port"子节点执行xvip_graph_dma_init_one(),从而将每个"port"子节点对应的DMA添加到链表dmas中。 xvip_graph_dma_init的关键代码如下: ports = of_get_child_by_name(xdev->dev->of_node, "ports"); for_each_child_of_node(ports, port) { ret = xvip_graph_dma_init_one(xdev, port); } 4.5. 函数xvip_graph_dma_init_one xvip_graph_dma_init_one()根据设备树(devicetree)的"port"子节点的配置,找到DMA,并添加到链表"xdev->dmas"中。 xvip_graph_dma_init_one先读取"port"子节点的属性"direction"和"reg"属性。Devicetre的"port"节点中,要含有属性“direction”和"reg"属性;如果没有属性“direction”,会返回错误;如果没有"reg"属性,代码会继续,但是功能会出错。属性"direction"的值是"input"或者"output"。 xvip_graph_dma_init_one还为每个port分配struct xvip_dma,再执行xvip_dma_init()。 接下来,xvip_graph_dma_init_one把struct xvip_dma加入到队列xdev->dmas。 xvip_graph_dma_init_one还根据"direction"的值是"input"或者"output",以及xvip_is_mplane的设置,选择buffer类型。 xvip_graph_dma_init_one的关键代码如下: // Read direction and reg properties ret = of_property_read_string(node, "direction", &direction); of_property_read_u32(node, "reg", &index); dma = devm_kzalloc(xdev->dev, sizeof(*dma), GFP_KERNEL); ret = xvip_dma_init(xdev, dma, type, index); list_add_tail(&dma->list, &xdev->dmas); 4.6. 函数xvip_dma_init xvip_dma_init是核心的函数,完成了最关键的任务:初始化buffer队列、申请DMA设备、注册Video设备。 函数xvip_dma_init()先初始化struct xvip_dma的数据成员,包括dma->lock、dma->pipe.lock、dma->queued_bufs、dma->queued_lock;再根据buffer类型,初始化v4l2_format里的像数点格式,struct v4l2_pix_format pix 或者struct v4l2_pix_format_mplane pix_mp。接下来设置pad.flags为MEDIA_PAD_FL_SINK或者MEDIA_PAD_FL_SOURCE,调用media_entity_pads_init初始化初始化media entity。 函数xvip_dma_init()然后继续初始化video_device的各种成员和操作函数,包括fops、v4l2_dev、queue、vfl_type、vfl_dir、lock、和ioctl_ops。video_device的fops被设置为xvip_dma_fops,ioctl_ops被设置为xvip_dma_ioctl_ops。 函数xvip_dma_init()再接着初始化buffer队列struct vb2_queue queue,其中ops被设置为xvip_dma_queue_qops,mem_ops被设置为vb2_dma_contig_memops,执行vb2_queue_init。 函数xvip_dma_init()再接着执行dma_request_chan申请DMA设备,这是一个复杂和核心的函数。dma_request_chan()的第二个参数是DMA通道的名称,名字是格式是"port%u",比如"port0",也就是设备树的属性"dma-names"里的字符串。其中of_dma_request_slave_channel()调用的of_find_property(np, "dmas", NULL),通过属性"dmas",取得了dma。of_property_count_strings()计算属性"dma-names"里的字符串个数,也就是DMA的个数。然后根据DMA的个数,为每一个DMA执行of_dma_match_channel()。of_dma_match_channel (dev->of_node, "port%u", )取出"dma-names"的字符串,再和"port%u"对比,这是检查名字是否对应,如果一致,就用对应的DMA,取得struct of_phandle_args dma_spec,再把struct of_phandle_args dma_spec转换为struct of_dma *ofdma。of_dma_xlate接下来转换为struct dma_chan。of_dma_request_slave_channel使用了字符串"dmas"。of_dma_match_channel()使用了字符串"dmas"和"dma-names"。所以Xilinx-vipp.c实现的"xlnx,video"设备的设备树里的"dmas"和"dma-names","port0"是必须有的固定字符串,不能更改;只有dmas后面的DMA phandle才可以更改。 函数xvip_dma_init()最后执行video_register_device注册Video设备。 4.7. 函数xvip_graph_parse 函数xvip_graph_parse先调用xvip_graph_parse_one,找到直接的remote_port;然后再为每一个找到的remote_port执行一次xvip_graph_parse_one。 4.8. 函数xvip_graph_parse_one xvip_graph_parse_one()里先调用of_graph_get_next_endpoint(node, ep)取得下一个endpoint,然后再调用of_graph_get_remote_port_parent(ep) 得到remote_port的父节点。of_graph_get_next_endpoint(node, ep)会先尝试找子节点ports,再找到子节点port,然后再在子节点port里找endpoint;读取路径是 { ports { port {endpoint } } },其中ports是可选的。endpoint是port的子节点,不管其内部的属性名称,所以也可以用属性名称remote-endpoint。of_graph_get_remote_port_parent(ep)通过调用of_graph_get_remote_endpoint()得到remote_port,再调用of_graph_get_port_parent()得到父节点。of_graph_get_remote_endpoint()里读取了设备树里的"remote-endpoint"属性。 xvip_graph_parse_one()再调用xvip_graph_find_entity(),在xdev->entities里检查是否已经包含对应的entity,如果已经包含,则跳过后续处理;如果没没有,则找到的remote_port的父节点,存放到链表xdev->entities,并执行操作xdev->num_subdevs++。 最后xdev->entities里包含了所有entity。后来xvip_graph_notify_complet会根据xdev->entities,为每个entity创建一个设备。 4.9. 函数xvip_graph_notify_bound 系统发现子设备(subdev)后,调用异步处理函数xvip_graph_notify_bound获取子设备信息。xvip_graph_notify_bound根据设备树节点,匹配实体(entity)和子设备(subdev);匹配成功后,再把子设备(subdev)的指针保存到实体(entity)。 xvip_graph_notify_bound的关键代码如下: entity->entity = &subdev->entity; entity->subdev = subdev; 4.10. 函数xvip_graph_notify_complete 系统所有子设备(subdev)都被发现后,Linux会调用xvip_graph_notify_complete。xvip_graph_notify_complete调用xvip_graph_build_one为每个entity创建Link;调用xvip_graph_build_dma做Create links for DMA channels;并为每个实体(entity)注册V4L2子设备v4l2_device_register_subdev_nodes ;最后调用media_device_register注册media设备。 4.11. 函数xvip_graph_build_one 函数xvip_graph_build_dma在每个entity及其远端模块之间创建Link。 函数xvip_graph_build_one先调用函数of_graph_get_next_endpoint从设备的设备树里找到下一个endpoint(struct device_node)。与之前描述一样,of_graph_get_next_endpoint的读取路径是 { ports { port {endpoint} } },endpoint是port的子节点,不管其内部的属性名称,所以也可以用属性名称remote-endpoint。函数xvip_graph_build_dma接着调用v4l2_fwnode_parse_link,得到对应的link(struct v4l2_fwnode_link)。接着根据link中的端口号(local_port)取得pad信息,判断出是否是目的端(sink)端口;如果是目的端(sink)端口,则忽略。另外还忽略DMA,它由xvip_graph_build_dma处理。接下来再调用函数xvip_graph_find_entity,根据link中的远端节点(remote_node),得到远端的entity。最后调用media_create_pad_link,当前entity作为源端(source),远端entity作为目的端(sink)的media_entity和media_pad,创建媒体pad的链接(link) 4.12. 函数xvip_graph_build_dma 函数xvip_graph_build_dma为DMA模块及其远端模块之间创建Link。 函数xvip_graph_build_dma先调用函数of_graph_get_next_endpoint从设备的设备树里找到下一个endpoint(struct device_node)。函数xvip_graph_build_dma接着调用v4l2_fwnode_parse_link,得到对应的link(struct v4l2_fwnode_link),根据link中的端口号(local_port),找到对应的DMA(struct xvip_dma)。接下来再调用函数xvip_graph_find_entity,根据link中的远端节点(remote_node),得到远端的entity。然后设置源端(source)/目的端(sink)的media_entity和media_pad,最后调用media_create_pad_link创建媒体pad的链接(link)。 4.13. 函数xvip_graph_find_dma 函数xvip_graph_build_dma根据指定的port号,在xdev->dmas里找DMA,如果找到,就返回对应的的struct xvip_dma的指针。 4.14. 函数xvip_graph_find_entity 函数xvip_graph_find_entity根据指定的设备节点(struct device_node),在xdev->entities里找entity,如果找到,就返回对应的的struct xvip_graph_entity的指针。 5. 关键数据 5.1. subdevs 其中subdevs是一个指针,指向(struct v4l2_async_subdev *)的数组(是指针数组),包含了这个设备下的所有subdev的指针,根据遍历xdev->entities填满这个数组。xdev->entities由processedxvip_graph_parse_one()根据设备树找到相关的子设备填充。 5.2. group ID 组ID(struct v4l2_subdev里有成员grp_id。v4l2_subdev_init()里把其初始化为0。Xilinx没有设置grp_id,所以都是0.) 5.3. xvip_graph_notify_ops xvip_graph_notify_ops指向bound和complete函数,如果成功匹配设备,.bound()回调函数将会被调用,当所有的子设备全部被加载完毕之后,.complete() 回调函数就会被调用: 6. 后续任务 还有很多代码可以分析,比如HDMI RX的驱动、TPG的驱动、m2m的驱动。 这样你了解了吗?

    时间:2020-10-23 关键词: Xilinx v4l2 管道驱动程序 Linux

  • Linux技术中Cgroup的原理和实践,你知道吗?

    Linux技术中Cgroup的原理和实践,你知道吗?

    这里主要简介什么是Cgroup,使用场景以及其原理和实践。 一、什么是Cgroup,使用场景? 容器本质上是进程,既然是进程就会消耗掉系统资源,比如:CPU、内存、磁盘、网络带宽等,如果不加以限制,容器在某些情况下就会无限制地吃掉宿主机的系统资源,显然这不是我们期望发生的,另外当我们的环境中运行了很多容器,且系统资源一定的情况下,我们有优先保证主要容器应用的需求,如何既能够解决此问题同时又能够满足我们的需求呢?答案就是:Linux Cgroup(全程Linux Control Group),在前面的文章中,介绍了namespace为容器这类进程提供了隔离,而Cgroup可以为容器这类进程提供资源使用上限,两者黄金搭档,共同为容器应用保驾护航。 二、Cgroup的原理和实践 CPU的周期控制 Cgroup可以为容器进程使用的CPU、内存、磁盘、网络带宽资源进行限制,具体是如何实现的呢?接下来我们一起来实操下,在 Linux 中,Cgroups 给用户暴露出来的操作接口是文件系统,即它以文件和目录的方式组织在操作系统的 /sys/fs/cgroup 这个路径下,我们先去此目录查看下 [root@k8s-master /]# cd sys/fs/cgroup/ [root@k8s-master cgroup]# ls blkio cpuacct cpuset freezer memory net_cls,net_prio perf_event rdma cpu cpu,cpuacct devices hugetlb net_cls net_prio pids systemd 可以看到在cgroup的这个目录下存在很多子目录,这些都是cgroup可以限制地资源种类,我们在进一步进入到CPU的子目录查看下,里面有限制资源种类的详细的限制地指标,比如 1、cpu.cfs_period_us:指定容器对CPU的使用多长时间重新做一次分配 2、cpu.cfs_quota_us:指在cpu.cfs_period_us周期内给分配多少时间给容器 这两个指标需要一起配合使用来实现CPU的周期控制,我们先手动模拟容器创建的时候,如何完成利用cgroup来实现资源限制,以CPU周期控制为例子,先在/sys/fs/cgroup/cpu目录下创建1个container_ test的目录,如下所示我已经创建好(红色字体)。 [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “复制代码”) [root@k8s-master cgroup]# cd cpu [root@k8s-master cpu]# ls cgroup.clone_children cpuacct.usage_all cpu.cfs_period_us docker cgroup.procs cpuacct.usage_percpu cpu.cfs_quota_us kubepods cgroup.sane_behavior cpuacct.usage_percpu_sys cpu.rt_period_us notify_on_release container_test cpuacct.usage_percpu_user cpu.rt_runtime_us release_agent cpuacct.stat cpuacct.usage_sys cpu.shares system.slice cpuacct.usage cpuacct.usage_user cpu.stat tasks [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “复制代码”) 然后进入到此目录下,ls查看下,这里出现了一个神奇的形象,此目录下自动生成了很多CPU子系统控制的指标,这些指标我们并未进行新增,也就是说在/sys/fs/cgroup/cpu目录下会给新建的目默认配置CPU子系统资源限制的指标 [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “复制代码”) [root@k8s-master cpu]# cd container_test/ [root@k8s-master container_test]# ls cgroup.clone_children cpuacct.usage_percpu cpu.cfs_period_us cpu.stat cgroup.procs cpuacct.usage_percpu_sys cpu.cfs_quota_us notify_on_release cpuacct.stat cpuacct.usage_percpu_user cpu.rt_period_us tasks cpuacct.usage cpuacct.usage_sys cpu.rt_runtime_us cpuacct.usage_all cpuacct.usage_user cpu.shares [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “复制代码”) 这些指标如何作用呢?为了体现资源的使用情况,我们先写一个程序来模拟来吃掉系统资源的情况,然后再来查看指标 [root@k8s-master sh]# cat while.sh #!/bin/bash while : ; do : ; done & [root@k8s-master sh]# sh while.sh 通过如上程序,写了一个while无限循环的shell脚本,默认情况下,这个程序之后的进程会占据掉系统所剩集群的所有资源,可通过top命令查看下 [root@k8s-master sh]# ps -ef |grep while root 14975 1 97 20:29 pts/1 00:02:48 sh while.sh 如上图所示,while循环的进程占据掉了96.3%的CPU资源,在实际的应用中若进程这样无限制的使用资源,将会给操作系统带来很大的负担,那么如何控制进程资源的使用呢?回到我们之前创建在container_test目录下 [root@k8s-master container_test]# cat cpu.cfs_quota_us -1 [root@k8s-master container_test]# cat cpu.cfs_period_us 100000 默认创建的目录下cfs_quota_us 若为-1,则表示还未启用quota,即还未实行资源限制,cfs_period_us默认为100000us=100ms=0.1s(秒),接下来我们向cpu.cfs_quota_us 输入30ms=30000us,cfs_period_us值维持不变还是为100ms,在前面关于这2个概念有介绍,cpu.cfs_quota_us表示的是cfs_period_us的周期内,分配30/100的时间,即30%,接下来验证下 [root@k8s-master container_test]# echo 30000 》 /sys/fs/cgroup/cpu/container_test/cpu.cfs_quota_us [root@k8s-master container_test]# cat cpu.cfs_quota_us 30000 设置已完成,但是此时还不会立即生效,还需要将进程ID输入到资源限制地task里 [root@k8s-master container_test]# echo 14975 》 /sys/fs/cgroup/cpu/container_test/tasks 接下来我们在通过top查看下资源使用情况,如下图所示,可以看到CPU的资源使用上限由原来的96.3%已经降到29.9%了,表明此while进程的CPU的资源使用上限已经设置成功。 以上整个过程为手动设置模拟容器创建的过程中CPU份额控制的过程,实际上在容器创建的过程中,并不需要上面这般步骤,我们只需要在run容器的时候指定指标参数即可,如下所示 [root@k8s-master container_test]# docker run -it -d --cpu-period=100000 --cpu-quota=30000 nginx /bin/bash 上面的命令是后台守护进程的方式运行了1个nginx的容器,且指定CPU的每隔100000us=100ms做一次分配,且每次分配给容器的时间为30ms,可以看到这个分配和前面手动分配是一致的,值得注意的是这里需要加上-d来创建容器,若不加上的话会进入到终端交互界面,一旦提出终端交互界面后,容器这个进程也将会退出,而我们希望容器进程保持后台运行,因此需要加上-d,容器运行成功后,将会在docker目录下新建一个以容器ID命名的目录,这个目录和前面手动创建的目录以上,系统会默认配置资源限制的参数,我们可以如下看下: [root@k8s-master container_test]# docker run -it -d --cpu-period=100000 --cpu-quota=30000 nginx /bin/bash 16f51f6780685be9c83b1684515005f30aed91916fdd6573b28eaf56be201e4a [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “复制代码”) [root@k8s-master docker]# ls 01a0fd62d2110e54b0c3635b2897e7c18e6b78f026fa57b4214d7662dd3b38ba cpuacct.usage_sys 16f51f6780685be9c83b1684515005f30aed91916fdd6573b28eaf56be201e4a cpuacct.usage_user cgroup.clone_children cpu.cfs_period_us cgroup.procs cpu.cfs_quota_us cpuacct.stat cpu.rt_period_us cpuacct.usage cpu.rt_runtime_us cpuacct.usage_all cpu.shares cpuacct.usage_percpu cpu.stat cpuacct.usage_percpu_sys notify_on_release cpuacct.usage_percpu_user tasks [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); “复制代码”) 如上红色部分为docker目录下依据容器的名称默认创建的目录,我们进入到这个目录,然后输出下之前我们在创建的时候指定的cpu.cfs_quota_us和cfs_period_us值 [root@k8s-master 16f51f6780685be9c83b1684515005f30aed91916fdd6573b28eaf56be201e4a]# cat cpu.cfs_period_us 100000 [root@k8s-master 16f51f6780685be9c83b1684515005f30aed91916fdd6573b28eaf56be201e4a]# cat cpu.cfs_quota_us 30000 可以看到我们之前设置的值已经生效了,也就是说这个nginx的容器最多可以支持使用到30%左右的CPU带宽。 相类似的我们可以对容器获取CPU的资源的优先级进行设置,通过--cpu-share这个参数,其指定的值并非是给容器具体的份额,其实是个权重,在需要对容器资源进行限制时才会生效,权重大的,可以优先得到CPU的资源;另外还可以对使用的核数进行限制,针对多核的服务器,可以控制容器运行限定使用哪些CPU内核和内存节点,即使用-cpuset-cpus和-cpuset-mens参数,比如:我们可以指定创建的容器只能用0、1、2三核。 三、总结 本文以CPU中周期控制限制某进程的CPU资源使用为例子,介绍了其手动设置参数和容器自动设置参数,每新建1个容器,在/sys/fs/cgroup/cpu/docker目录下都会自动以容器的ID为名字创建1个目录,且在此目录下支持对CPU、内存、网络带宽、磁盘的资源使用进行限制,而其限制地处理与CPU的周期控制是类似的,这里就未做过多介绍

    时间:2020-10-23 关键词: linux技术 cgroup Linux

  • 鸿蒙系统为什么要基于linux来开发研发

    鸿蒙系统为什么要基于linux来开发研发

    华为的鸿蒙系统终于来了,而且是基于linux系统开发的,但不知道为什么,一说起某系统是基于linux而来,很多网友就瞧不起,并且会觉得这不算国产系统,就算是linux。 但其实我们真没这么看,源自于linux其实很正常的,比如安卓也是源自linux,iOS也是源自于unix,而近日大家津津乐道的华为自研操作系统鸿蒙也是源自于linux。 但你能说,安卓也是linux,不算是谷歌拥有自主知识产权的产品么?你能说华为的自研系统,也不算是国产系统,是linux么? 可见,源自于linux并不是其是不是自主操作系统,或者说算不算国产系统的判断标准。甚至可以说以后的大部分的操作系统,均会是以linux为基础的。 至于为什么华为要基于linux来开发自研操作系统,其实很容易理解,一是可以很好的兼容安卓的APP,毕竟安卓也是基于linux来开发的,这样在生态的问题解决了很大一部分了。 另外,鸿蒙是一个集电脑、手机、汽车等设备于一体的大一统的系统,目前linux在电脑领域的应用生态也不错的,基于linux来开发,在电脑领域的应用生态,也解决了很大一部分了。 毕竟对于一个全新的系统来讲,生态才是成功的关键因素,一旦生态已经有现成的了,自然就容易成功了。 另外linux是开源的,不存在授权问题,另外大家对linux的理解已经很深了,这样基于linux来开发也相对容易些。 当然,基于linux并不意外着就容易了,安卓开发容易么?谷歌这么多人,开发了这么多年,才做到现在的成就。 华为的鸿蒙也是如此,别看是基于linux开发的,但难度一样非常大,并不是谁都可以开发出来的。 现在鸿蒙出来了,你对他还满意吗?

    时间:2020-10-23 关键词: 鸿蒙os Linux

  • 八个最主流的基于Debian的Linux发行版,你知道吗?

    八个最主流的基于Debian的Linux发行版,你知道吗?

    众所周知,Debian是最受欢迎的发行版之一,尤其是在桌面发烧友和专业人士中。这里主要介绍了一些最流行和使用最广泛的基于Debian的Linux发行版。 1. MX Linux 当前在发行版中排名第一的是MX Linux,它是一个简单而稳定的桌面操作系统,结合了优雅和出色的性能。MX Linux最初是随XFCE桌面一起提供的,但后来扩展到包括分别于2020年8月和2020年9月提供的KDE(MX 19.2 KDE)Linux和MX Linux Fluxbox(MX-Fluxbox 19.2)环境。 MX Linux 19.2 KDE提供64位版本,具有多种MX Linux工具、AntiX的快照技术以及AntiX live USB系统。此外,KDE版本还提供了高级硬件支持(AHS),其主要重点是支持最新的硬件,如AMD GPU和最新的Intel图形驱动程序。 此外,您还将获得最新的现成的日常应用程序,如LibreOffice 6.1.5、Firefox79、Thunderbird 68.11和VLC 3.0.11等等。 作为一个中等规模的发行版,MX-Linux由于其低资源消耗,同时为用户提供了一个流畅的用户界面和用户友好的体验,因此被强烈推荐为老化PC的发行版。你可以从1GB RAM,10GB硬盘,Intel或AMD处理器开始。 相关:https://www.linuxmi.com/mx-linux-19-2-kde.html 2. Ubuntu Ubuntu可以说是最广泛使用的免费和开源Linux发行版之一,尤其是对桌面发烧友来说,Ubuntu不需要介绍。自从Canonical在2004年首次发布Ubuntu以来,Ubuntu在扩展其对服务器、物联网设备和云技术的支持方面取得了巨大的飞跃。 最新版本,Ubuntu 20.04 LTS,被称为Focal Fossa,是其最新的长期发行版(LTS),并将在2025年4月之前得到支持。Ubuntu 20.04发布了一个全新的Yaru主题,它有3个版本(暗、亮和标准),GNOME 3.36有新外观的光亮图标,改进的ZFS支持,用于增强显示的分步缩放,以及多种默认应用程序,如Firefox、Thunderbird和LibreOffice套件。 最值得注意的是Ubuntu对传统APT包管理器的推广。snap是一个软件包,它附带了按预期运行所需的所有库和依赖项。虽然snaps并不是要完全取代deb,但它已经通过软件的可用性解决了这个问题。 与Debian包需要依赖外部资源不同,snap包预先打包了所有依赖项,并且可以安装在每个支持snap的Ubuntu发行版(Ubuntu 16.04及后续版本)上。 相关阅读:https://www.linuxmi.com/ubuntu-20-04-1-lts-focal-fossa.html 3. AntiX AntiX是一个相对轻量级,适用于低规格或旧的PC机的发行版。无论您是Linux初学者还是经验丰富的用户,AntiX都致力于提供一个轻巧、灵活、功能齐全的操作系统。 你可以从一台有512 BM RAM和至少5GB硬盘空间的旧PC开始。此外,您可以将其作为“live”系统运行在闪存驱动器上,作为救援光盘。 4. PureOS PureOS是一个现代的、功能齐全的发行版,它以自己是一个尊重隐私、安全和用户友好的操作系统而自豪。默认情况下,它附带一个GNOME环境和一个基于隐私的FireFox,称为PureBrowser。默认的搜索引擎是DuckduckGo,它允许用户掌握他们的在线隐私。 PureOS为我们提供了一种简单的方法来搜索所需的应用程序,安装它们并使用GNOME软件进行更新。PureOS开发者改进了这个软件中心,只提供自由软件(没有任何专有软件)。 下载地址:https://pureos.net/download.html 5. Kali Linux 由进攻性安全维护和资助,Kali Linux是一个Debian衍生版,旨在渗透测试和数字取证。它预先构建了用于渗透测试的多种工具,如Metasploit框架、Nmap、Wireshark、Maltego、Ettercap、Burp套件等。 由于其普及渗透测试,Kali有它自己的著名认证- Kali Linux认证专业课程。此外,开发人员提供了一个 面向Raspberry Pi 的ARM 映像,从而使渗透测试爱好者进行笔测试更方便。 相关链接:https://www.linuxmi.com/kali-linux-2020-3.html 6. Parrot OS Parrot OS是另一种面向安全的Debian变体,它打包了一组用于执行渗透测试、数字取证、逆向工程和加密的工具(这里只提几个用例)。它可在MATE和KDE桌面版本以及ova文件-虚拟机文件中使用。当前版本是Parrot 4.10。 Parrot Xfce 版是Parrot安全操作系统的第一个Xfce风格版本,默认配置了最新最好的Xfce 4.14桌面环境,现在ParrotSecurity在其存储库中正式支持该版本。 相关阅读:https://www.linuxmi.com/parrot-4-10.html 7. Devuan 如果你仍然是旧的sysvinit的粉丝,那么Devuan可能会帮你完成这个把戏。Devuan是Debian的一个分支,它被设计得尽可能接近Debian。它的最新版本是基于Debian 10的Beowulf 3.0.0。除了支持32位和64位之外,嵌入式镜像还允许用户在树莓派、树莓派2、树莓派3、Acer Chromebook、Veyron/Rockchip Chromebook, Nokia N900, Odroid XU, 以及一系列使用sunxi处理器的其他设备上进行安装。 Devuan 是使用 SysV init 软件代替 Debian systemd 包的 Debian 分支。依赖于初始化系统 systemd 的服务已经被提供等效功能的其他软件所替代。因为选择初始化系统 systemd 引发的争议,一群不满的开发者创建了不使用 systemd 的 Debian 分支 Devuan。systemd 最受争议的地方是违背了 Unix 哲学,被认为太过于复杂,而 Devuan 提供了多种初始化系统供用户选择,其中包括 SysV init、sinit、openrc、runit、s6 和 shepherd。 8. AV Linux AV Linux也是一个基于Debian的发行版,它的目标是多媒体内容创建者,可以在32位和64位架构中下载。它附带了预装的音频和视频编辑软件,对于内容创建者来说,它是Ubuntu Studio的另一个合适选择。 下载见 :http://www.bandshed.net/avlinux/ 特别提及这绝不是整个列表,而且,我们要承认其他的风格,比如Dog Linux,它是Puppy操作系统的一个很好的替代品,SolydXK 和 BunsenLabs Linux,后者是一个轻量级的发行版。 这样你对这八个发行版有了解了吗?

    时间:2020-10-23 关键词: debian Linux

  • 浅谈Linux在移动嵌入式领域的发展趋势和前景

    浅谈Linux在移动嵌入式领域的发展趋势和前景

    这里主要谈linux的发展现状与趋势,常见的Linux版本以及如何养成良好的Linux操作习惯。 一、Linux在各领域发展的现状与趋势 很多新手都有一个很疑惑的问题:“Linux我听过,但是学习linux系统,能在上面干什么呢,或者说linux系统具体能做什么”,带着这个疑问,在本书的开篇,我们先来了解下Linux与开源软件的关系以及Linux的应用领域和未来的发展趋势。 1.1 Linux与开源软件 Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯•托瓦兹在1991年首次发布,之后,在加上用户空间的应用程序之后,就成为了Linux操作系统。严格来讲,Linux只是操作系统内核本身,但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统,它包括GUI组件和许多其他实用工具。 GNU通用公共许可协议(GNU General Public License,简称GNU GPL或GPL),是一个广泛被使用的自由软件许可协议条款,最初由理查德•斯托曼为GNU计划而撰写,GPL给予了计算机程序自由软件的定义, 任何基于GPL软件开发衍生的产品在发布时必须采用GPL许可证方式,且必须公开源代码, Linux是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU通用公共许可证,任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。随着Linux操作系统飞速发展,各种集成在Linux上的开源软件和实用工具也得到了应用和普及,因此,Linux也成为了开源软件的代名词。 1.2 Linux在服务器领域的发展 随着开源软件在世界范围内影响力日益增强,Linux服务器操作系统在整个服务器操作系统市场格局中占据了越来越多的市场份额,已经形成了大规模市场应用的局面。并且保持着快速的增长率。尤其在政府、金融、农业、交通、电信等国家关键领域。此外,考虑到Linux的快速成长性以及国家相关政策的扶持力度,Linux服务器产品一定能够冲击更大的服务器市场。 据权威部门统计,目前Linux在服务器领域已经占据75%的市场份额,同时,Linux在服务器市场的迅速崛起,已经引起全球IT产业的高度关注,并以强劲的势头成为服务器操作系统领域中的中坚力量。 1.3 Linux在桌面领域的发展 近年来,特别在国内市场,Linux桌面操作系统的发展趋势非常迅猛。国内如中标麒麟Linux、红旗Linux、深度Linux等系统软件厂商都推出的Linux桌面操作系统,目前已经在政府、企业、OEM等领域得到了广泛应用。另外SUSE、Ubuntu也相继推出了基于Linux的桌面系统,特别是Ubuntu Linux,已经积累了大量社区用户。但是,从系统的整体功能、性能来看,Linux桌面系统与Windows系列相比还有一定的差距,主要表现在系统易用性、系统管理、软硬件兼容性、软件的丰富程度等方面。 1.4 Linux在移动嵌入式领域的发展 Linux的低成本、强大的定制功能以及良好的移植性能,使得Linux在嵌入式系统方面也得到广泛应用,目前Linux以广泛应用于手机、平板电脑、路由器、电视和电子游戏机等领域。在移动设备上广泛使用的Android操作系统就是创建在Linux内核之上的。目前,Android已经成为全球最流行的智能手机操作系统,据2015年权威部门最新统计,Android操作系统的全球市场份额已达84.6%。 此外,思科在网络防火墙和路由器也使用了定制的Linux,阿里云也开发了一套基于Linux的操作系统“YunOS”,可用于智能手机、平板电脑和网络电视;常见的数字视频录像机、舞台灯光控制系统等都在逐渐采用定制版本的Linux来实现,而这一切均归功与Linux与开源的力量。 1.5 Linux在云计算/大数据领域的发展 互联网产业的迅猛发展,促使云计算、大数据产业的形成并快速发展,云计算、大数据作为一个基于开源软件的平台,Linux占据了核心优势;据Linux基金会的研究,86%的企业已经使用Linux操作系统进行云计算、大数据平台的构建,目前,Linux已开始取代Unix成为最受青睐的云计算、大数据平台操作系统。 二、选择适合自己的Linux发行版 谈到Linux的发行版本,太多了,可能谁也不能给出一个准确的数字,但是有一点是可以肯定的,Linux正在变得越来越流行。面对这么多的Linux发行版,打算从其他系统转到Linux系统来的初学者可能会感到困惑,即便是忠实的Linux用户也没有时间和精力去挨个尝试,因此初学者在学习Linux之前,需要有一个明确的方向,选择一个适合自己的Linux系统至关重要。下面我们就分类介绍。 2.1 常见的Linux发行版 1.Red Hat Linux Red Hat Linux是Red Hat最早发行的个人版本的Linux,其1.0版本于1994年11月3日发行。虽然其历史不及其他Linux发行版本悠久,但比起很多的Linux发行套件,Red Hat的历史要悠久得多。自从Red Hat 9.0版本发布后,Red Hat公司就不再开发桌面版的Linux发行套件,Red Hat Linux停止了开发,而将全部力量集中在服务器版的开发上,也就是Red Hat Enterprise Linux版。2004年4月30日,Red Hat公司正式停止对Red Hat 9.0版本的支援,标志着Red Hat Linux的正式完结。原本的桌面版Red Hat Linux发行套件则与来自开源社区的Fedora进行合并,成为Fedora Core发行版本。 目前Red Hat分为两个系列:由Red Hat公司提供收费技术支持和更新的Red Hat Enterprise Linux,以及由社区开发的免费的Fedora Core。 2.Fedora Core Fedora Core(缩写为FC)被Red Hat公司定位为新技术的测试平台,许多新的技术都会在FC中检验。如果稳定的话Red Hat公司则会考虑加入到Red Hat Enterprise Linux中。 Fedora Core 1发布于2003年年末,而FC的定位便是桌面用户。FC提供了最新的软件包,同时它的版本更新周期也非常短,仅有6个月。由于版本更新频繁,性能和稳定性得不到保证,因此一般在服务器上不推荐采用Fedora Core。 Fedora对于用户而言,是一套功能完备、更新迅速的免费操作系统,因此,个人领域的应用,例如开发、体验新功能等可选择此发行版本。 3.Red Hat Enterprise Linux Red Hat Enterprise Linux(缩写为RHEL,Red Hat的企业版Linux)。Red Hat现在主要做服务器版的Linux开发,在版本上注重了性能和稳定性,以及对硬件的支持。由于企业版操作系统的开发周期较长,注重性能、稳定性和服务端软件支持,因此版本更新相对较缓慢。 RHEL的版本都是基于Fedora。大约每六个版本的Fedora会有一个新版本的RHEL发布,因此,RHEL大约3年发布一个新版本。其最新版本是2015年3月6日发布的RHEL 7.1。本书就是以此版本展开讲述的。 4.Centos CentOS全名为“社区企业操作系统”(Community Enterprise Operating System)。它是来自于RHEL依照开放源代码规定发布的源代码所编译而成,由于RHEL是商业产品,因此必须将所有Red Hat的Logo标识改成自己的CentOS标识,这就产生了CentOS操作系统,两者的不同在于,CentOS并不包含封闭源代码软件。因此,CentOS不但可以自由使用,而且还能享受CentOS提供的免费长期升级和更新服务。这是CentOS的一个很大优势。 CentOS采取从RHEL的源代码包来构建,它的版本号有两个部分:一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,例如CentOS6.5构建在RHEL6.0更新的第5版。但是从RHEL7.0版本以后,CentOS版本命名格式又稍有变化:主要版本仍然对应于RHEL的主要版本,次要版本以RHEL更新包发布日期为准,例如RHEL7.1对应的CentOS版本为CentOS 7.1.1503,这表示RHEL7.1版本是2015年3月份发布的。 在2014年CentOS宣布与Red Hat合作,但CentOS将会在新的委员会下继续运作,并不受RHEL的影响。这个策略表明CentOS后续发展将有Red Hat作为强有力的支持。 5、SuSE Linux SUSE是德国最著名的Linux发行版,也享有很高的声誉,不过命运相当坎坷;2003年11月4日,Novell公司对外宣布将收购SUSE。2004年1月该收购顺利完成,Novell同时将SUSE正式命名为SUSE Linux。Novell公司收购SUSE,加速了SUSE Linux的发展,将免费SUSE Linux改为openSUSE社区项目,但在2010年,Attachmate公司收购了Novell,在被收购后,SUSE Linux发展受阻,而就在3年后,SUSE再次易主,2014年9月Attachmate公司被上市公司Micro Focus收购,但幸运的是:SUSE官方宣布开源作为SUSE的发展之本,仍将持续贡献开源,SUSE仍将全力投入对openSUSE的支持。 虽然SUSE多次易主,但并不影响它的专业性,据不完全统计,SUSE Linux现在欧洲Linux市场占有将近80%的份额,大部分关键性应用都是建立在SUSE Linux下的。而由于SUSE多次易主,再加上SUSE在中国的营销模式问题,现在SUSE在中国的Linux市场份额并不大,但是这些并不影响SUSE Linux高可靠性与稳定性的事实。随着SUSE的发展,相信SUSE Linux在中国的应用会越来越多。 6、Ubuntu Linux Ubuntu(中文谐音为友帮拓、优般图、乌班图)是一个以桌面应用为主的Linux操作系统,基于Debian GNU/Linux,Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。 7、发行版总结 上面主要介绍了几种最常见的Linux发行版本,其实Linux的发行版本还有很多,比较常见的还有Debian GNU/Linux、Mandriva、Gentoo、Slackware、Knoppix、MEPIS和Xandros,以及国产的红旗Redflag、深度deepin Linux和中标麒麟Linux等,这里不再一一介绍。其实纵观Linux的各个发行版,Linux发行版本无非是朝着这两个方面而来,一是服务器市场,二是桌面市场。 以Ubuntu Linux为代表的Linux发行版走的是桌面市场路线,虽然它们给用户带来很多惊喜,更新也很快,但是由于桌面市场有着Windows这样强劲的对手,因此Linux桌面发展不容乐观,目前Ubuntu Linux也开始向企业级服务器市场发力。 以Red Hat系列版本为代表的Linux发行版现在主要面向企业级Linux的服务器市场,重点开发Linux的企业版本,其他的(例如国产Redflag、中标麒麟Linux等)都重点投入在了Linux服务器市场。Linux两大发布厂商现在都走了Linux服务器市场的路线,可见Linux作为企业级服务器有着巨大的发展前途。据权威部门统计,Linux在服务器市场的占有率每年都在持续上升。 其实很多Linux的应用都是针对Linux服务器的,本书的讲述也是主要针对Linux在服务器下的各种应用展开的。 2.2初学者入门首选——Centos系列 在了解了Linux几个主要发行版本后,我们就找到了为何选择CentOS作为初学者入门学习的理由了。  CentOS现在拥有庞大的网络用户群体,网络Linux资源基本80%都是基于CentOS发行版的,如果在学习过程中遇到任何问题,在网络中可以较容易地搜索到解决方案。  CentOS系列版本可以轻松获得。可以从CentOS官网或者163开源、sohu开源、阿里云开源站下载CentOS各个版本的安装介质,如果是第一次接触Linux,那么建议先安装Fedora Core。Fedora Core的安装简单,对硬件支持很好,界面也很华丽,同时也可以体验Linux的最新功能。如果对Linux有一定的了解,需要深入学习,建议使用CentOS发行版系统。  CentOS应用范围广,具有典型性和代表性,现在基本所有的互联网公司后台服务器都采用CentOS作为操作系统,可以说学会了CentOS,不但能迅速融入企业的工作环境,还能触类旁通,其它类似的Linux发行版也能很快掌握。同时,现在周围学习Linux的用户一般也都是以CentOS为主的,这样交流方便,学习中出现问题,更容易得到解决。最主要的是CentOS的安装和使用上也是最简单的,因此基本上不会在“装系统”上浪费过多时间。 2.3 桌面平台首选——Ubuntu Linux 说到Linux桌面市场,Ubuntu Linux几乎占据了桌面Linux的半壁江山,Ubuntu Linux主打Linux桌面之最,界面美观,简洁而不失华丽,如果想在Linux下进行娱乐休闲,Ubuntu Linux绝对是首选。 Ubuntu的安装非常人性化,只需按照提示一步一步进行。Ubuntu被誉为对硬件支持最好最全面的Linux发行版之一,许多在其他发行版上无法使用的,或者在默认配置时无法使用的硬件,在Ubuntu上都能轻松安装使用。因此用户可以像安装Windows一样轻松地安装Ubuntu,尽情体验Ubuntu Linux带来的乐趣。 2.4 企业级应用首选——RHEL/Centos系列 企业级的应用追求的是可靠性和稳定性,这就要求构建企业级应用的系统平台具有高可靠性和高稳定性。企业级Linux的发行版本就是解决的这个问题。 RHEL与Centos两个Linux发现版本,并没有太大差别,所不同的是RHEL属于商业Linux发行版本,如果要使用RHEL版本,则需要购买商业授权和咨询服务,Red Hat提供系统的技术支持并提供系统的免费升级。目前Red Hat官网已经不再提供可免费下载的光盘介质,如果需要试用,可通过官网下载有试用时间的评估版Linux。而CentOS属于非商业发行版,可以从网上免费下载CentOS各个版本的安装介质,但CentOS并不提供商业支持,当然使用者也不用负上任何商业责任。 那么,到底是选择CentOS还是RHEL呢,这取决于你所在公司是否拥有相应的技术力量,如果是单纯的业务型企业,那么建议选购RHEL发行版并购买相应服务,这样可以节省企业的IT管理费用,并可得到专业的技术支持服务。相反,如果企业技术力量比较强大,并且有多年Linux使用经验的话,那么CentOS发行版将是最好的选择。 三、 养成良好的Linux操作习惯 开始Linux的学习之后,请不要用Windows的工作方式来思考问题,因为它们之间确实有很大的不同,比如它们之间的内存管理机制、进程运行机制等都有很大不同,因此抛开Windows的那种思维,用全新的理念尝试去挖掘Linux身上特有的潜质,对初学者是至关重要的。 3.1 一定要习惯命令行方式 Linux是由命令行组成的操作系统,精髓在命令行,无论图形界面发展到什么水平,命令行方式的操作永远是不会变的。Linux命令有许多强大的功能:从简单的磁盘操作、文件存取,到进行复杂的多媒体图像和流媒体文件的制作,都离不开命令行。虽然Linux也有桌面系统,但是X-window也只是运行在命令行模式下的一个应用程序。 因此,可以说命令是学习Linux系统的基础,在很大程度上学习Linux就是学习命令,很多Linux高手其实都是玩儿命令很熟练的人。 也许对于刚刚从Windows系统进入Linux学习的初学者来说,立刻进入枯燥的命令学习实在太难,但是一旦学会就爱不释手。因为它的功能实在太强大了。 3.2 理论结合实践 有很多初学者都会遇到这么一个问题,自己对系统的每个命令都很熟悉,但是在系统出现故障的时候,就无从下手了,甚至不知道在什么时候用什么命令去检查系统,这是很多Linux新手最无奈的事情了。说到底,就是学习的理论知识没有很好地与系统实际操作相结合。 很多Linux知识,例如每个命令的参数含义,在书本上说得很清楚,看起来也很容易理解,但是一旦组合起来使用,却并不那么容易,没有多次的动手练习,其中的技巧是无法完全掌握的。 人类大脑不像计算机的硬盘,除非硬盘坏掉或者硬盘被格式化,否则储存的资料将永远记忆在硬盘中,而且时刻可以调用。而在人类记忆的曲线中,必须要不断地重复练习才会将一件事情记得比较牢。学习Linux也一样,如果无法坚持学习的话,就会学了后面的,忘记了前面的。还有些Linux初学者也学了很多Linux知识,但是由于长期不用,导致学过的东西在很短的时间内又忘记了,久而久之,失去了学习的信心。 可见,要培养自己的实战技能,只有勤于动手,肯于实践,这也是学好Linux的根本。 3.3 学会使用Linux联机帮助 各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者来说往往是不够的,其实当安装了完整的Linux系统后其中已经包含了一个强大的帮助,只是可能你还没有发现它,或者还没有掌握使用它的技巧。例如,对于tar命令的使用不是很熟悉,那么只要在命令行输入“man tar”,就会得到tar的详细说明和用法。 主流的Linux发行版都自带了非常详细的帮助文档,包括使用说明和FAQ,从系统的安装到系统的维护,再到系统安全,针对不同层次用户的详尽文档。仔细阅读文档后,60%的问题都可在这里得到解决。 3.4 学会独立思考问题,独立解决问题 遇到问题,首先想到的应该是如何自己去解决这个问题,解决方式有很多,比如看书查资料、网络搜索引擎搜索和浏览技术论坛等,通过这几种方式,90%的问题都能得到解决 独立思考并解决问题,不但锻炼了自己独立解决问题的能力,在技术上也能得到快速提高。如果通过以上方式实在解决不了的话,可以向人询问,得到答案后要思考为何这么做,然后做笔记记录解决过程。最忌讳的方式是只要遇到问题,就去问人,虽然这样可能会很快解决问题,但是长久下去遇到问题就会依赖别人,技术上也不会进步。 3.5 学习专业英语 如果想深入学习Linux,一定要尝试去看英文文档。因为,技术性的东西写的最好的,最全面的文档都是英语写的,最先发布的高新技术也都是用英语写的。即便是非英语国家的人发布技术文档,也都首先翻译成英语在国际学术杂志和网络上发表。安装一个新的软件时先看Readme文档,再看Install文档,然后看FAQ文档,最后才动手安装,这样遇到问题就知道原因了。因此,学习一点专业的英语是很有必要的。

    时间:2020-10-23 关键词: 移动嵌入式 Linux

  • 浅谈 Chromium 版 Edge 浏览器 Linux 预览版

    浅谈 Chromium 版 Edge 浏览器 Linux 预览版

    微软今天宣布,它为Linux提供了微软edge的预发布版本,现在所有主要的办公室和平台都可以使用。动机。动机他们使用Ubuntu、Debian、Fedora和openSUSE的版本。现在就可以下载Microsoft edge浏览器了。 IT之家获悉,从下周开始,微软将与其他支持的平台一起发布Edge Dev Channel构建版本。 如何下载Microsoft Edge for Linux预览版? 最简单的方法是直接从Microsoft Edge网站下载并安装.deb或.rpm包。 你也可以通过以下步骤从微软的Linux软件仓库下载并安装Microsoft Edge。 在 Debian/Ubuntu 上安装 要安装Microsoft Edge,你首先需要在终端中运行这些命令,在设备上设置微软的存储库。 完成后,安装Microsoft Edge Dev。 一旦安装了Microsoft Edge,您可以通过运行sudo apt update手动更新,然后sudo apt upgrade(更新所有包),或sudo apt install microsoft-edge-dev(仅更新Microsoft Edge Dev)。 要卸载Microsoft Edge, 在终端运行以下命令: 在Fedora上安装 首先,设置微软的仓库。 接下来,安装Microsoft Edge: 要卸载,运行: 安装在openSUSE上 首先,设置微软的仓库。 接下来,安装Microsoft Edge。 卸载:

    时间:2020-10-22 关键词: edge chromium Linux

  • 浅谈飞凌嵌入式RK3399开发板试用体验

    浅谈飞凌嵌入式RK3399开发板试用体验

    在一半的开发平台中,实验逐渐加深,我也在考虑用这个小项目开发板做点什么。 选择这个项目呢需要准备点东西。我这边为了开发方便选择了是单片机开发板,板载两个传感器一个SHT20和一个光照度传感器,通过串口和我们的OK3399之间传输数据,后续有机会,最方便的就是在Linux底层加入驱动,写Linux驱动方式来读传感器数据,有机会会写一篇体验的。 OK3399这边也是处理好了底层串口驱动,我使用的是与SPI口复用的串口4,设备名称ttyS4,有这个我们就可以在QT中写串口程序了。 接下来就是接好线,注意TX和RX交叉和共地,基本就可以完成数据传输。 上面就是串口接收程序,目前主要是采用定时器和一个槽函数完成定时接收数据解析。 写完这个程序后我测试了下打印。 通过usb转TTL的模块把电脑端的数据传送到底层调试串口上打印出来,效果就是这样。 单片机这边也同样是初始化传感器和串口,以及一个定长数组包就可以完成三组数据的同时传输。两边串口设置需要相同。 接下来就是把剩余程序编写完成。然后传输到下位机上,具体可以看我体验二的文章,里面有具体步骤。然后就是运行,效果如下。 我在这里使用了一个开源的QT绘制曲线库,QCustomPlot,这个库功能强大,太多的我也没深入研究,这里就贴上我的代码。 QFontfont;//font.setPointSize(12);/*实例化,设置位置、背景颜色*/QBrushbrush(QColor(50,50,50));dataCustomPlot=newQCustomPlot(ui->widget);dataCustomPlot->setGeometry(0,0,880,440);dataCustomPlot->setBackground(brush);//设定右上角图形标注可见dataCustomPlot->legend->setVisible(true);dataCustomPlot->legend->setFont(QFont("HelveTIca",9));dataCustomPlot->legend->setRowSpacing(-3);dataCustomPlot->installEventFilter(ui->widget);QVector shapes;shapesyAxis->setTickLabelFont(font);dataCustomPlot->xAxis->setLabel("时间");QSharedPointer dateTicker(newQCPAxisTickerDateTime);//得到DateTime的dateTicker->setDateTimeFormat("hh:mm:ss");dataCustomPlot->xAxis->setTicker(dateTicker);dataCustomPlot->xAxis->setRange(20170101011234,20300228235959);dataCustomPlot->yAxis->setRange(0,100);//设置y轴数据范围/*增加一个数据曲线*/pen.setColor(Qt::blue);//设置画笔的颜色dataCustomPlot->addGraph();//增加曲线图//设置右上角显示名称dataCustomPlot->graph(0)->setName("温度");//设置曲线的名字dataCustomPlot->graph(0)->setPen(pen);//设置曲线画笔的颜色dataCustomPlot->graph(0)->setLineStyle(QCPGraph::lsLine);//设置连接线的类型两点直线连接dataCustomPlot->graph(0)->setScatte rStyle(QCPScatterStyle(shapes.at(3),10));pen.setColor(Qt::green);//设置画笔的颜色dataCustomPlot->addGraph();//增加曲线图dataCustomPlot->graph(1)->setPen(pen);//设置曲线画笔的颜色dataCustomPlot->graph(1)->setName("湿度");//设置曲线的名字dataCustomPlot->graph(1)->setLineStyle(QCPGraph::lsLine);//设置连接线的类型两点直线连接dataCustomPlot->graph(1)->setScatterStyle(QCPScatterStyle(shapes.at(5),10));pen.setColor(QColor(250,168,140));//设置画笔的颜色dataCustomPlot->addGraph();//增加曲线图dataCustomPlot->graph(2)->setPen(pen);//设置曲线画笔的颜色dataCustomPlot->graph(2)->setName("光照度");//设置曲线的名字dataCustomPlot->graph(2)->setLineStyle(QCPGraph::lsLine);//设置连接线的类型两点直线连接dataCustomPlot->graph(2)->setScatterStyle(QCPScatterStyle(shapes.at(7),10));/*刷新显示*/dataCustomPlot->replot(); 以上是初始化绘制背景和三个曲线的样式。 ucharFHone=buf.at(0);ucharFHtwo=buf.at(1);ucharFTone=buf.at(8);ucharFTtwo=buf.at(9);if(FHone==0x11&&FHtwo==0x22&&FTone==0xff&&FTtwo==0xee){tempreture=(buf.at(2)setText(Light_value+"LX");dataCustomPlot->graph(0)->addData(now,tempreture);dataCustomPlot->graph(1)->addData(now,humidity);dataCustomPlot->graph(2)->addData(now,Light_Value);dataCustomPlot->xAxis->setRange(now,5,Qt::AlignRight);dataCustomPlot->replot();} 下面的这个是具体的解析数据,让其显示的过程。 至此搭建完硬件和软件就能实现具体数据的显示了,当然在Linux上直接做驱动是很好的,但是这种方式也比较适用专门用QT开发界面,用其他平台搭建硬件环境的。驱动就能少关心一些。后面我也将继续学习下OK3399的其他玩法。 对官方网站感兴趣

    时间:2020-10-22 关键词: 嵌入式 rk3399 Linux

  • 可将Windows计算器移植到Linux上?用Uno平台 !

    可将Windows计算器移植到Linux上?用Uno平台 !

    早在去年的时候,微软开源了现代的Windows 10计算器,今天这个应用出现在Linux上,由Uno Platform提供。Uno Platform是C#和XALM的跨平台运行时,和Java一样,让跨平台应用在任何支持的平台上看起来都是原生的。 在Linux上,Uno Platform应用利用Skia渲染引擎来绘制UI,并通过常规的GTK框架集成到Ubuntu桌面中,使用Mono项目构建。 为了避免版权问题,这款计算器已被上传到Snap商店,并更名为Uno计算器,支持标准、科学和程序员计算器功能,以及一套各种计量单位和货币之间的转换器。 专业媒体OMGUbuntu指出,它运行表现要比原生的Gnome计算器更好,主要是由于支持更多的转换模式。并且作为Uno项目,这是一个很好的移植概念证明。 有兴趣的小伙伴可以去试试看哦。

    时间:2020-10-22 关键词: Windows uno Linux

  • Linux内核驱动在新的NTFS中修订了九次 仍在审核中

    Linux内核驱动在新的NTFS中修订了九次 仍在审核中

    早在今年8月份的时候,Paragon软件公司高调宣布,他们的NTFS读写驱动在作为商业驱动提供给那些需要在Linux上对微软文件系统进行可靠支持的用户多年后,将在Linux内核中进行主线开发。 两个月后的今天,他们已经对这个驱动进行了第九次修订,以争取将其纳入内核主线。 在上游开发者提出一些最初的意见之后,Paragon很快就更新了他们的 "NTFS3"驱动补丁。他们继续完善代码,增加了额外的功能,修复了各种代码问题,改进了代码格式,处理了重新挂载文件系统等行为,并修复了压缩文件操作中的问题。 周五,他们发出了第九个版本的驱动,增加了额外的代码改进,最新的变化可以在内核邮件列表中找到。 由于目前的内核NTFS驱动主要集中在只支持读的状态,根据进度预估,这个新驱动不会登陆Linux 5.10,但合并操作大概会在明年出现。 这是因Linux 5.10合并窗口已经过了一半了,而这个NTFS3驱动的目标是取代现有的驱动,这使得最初的主线变得更加复杂,因为需要允许两个驱动都进入内核树一段时间,并且只允许一次编译一个,并且上游维护者更愿意在合并这个新驱动时选择多等等,直到它可以立即取代现有的NTFS支持代码。 不管怎么说,至少这个Paragon的贡献看起来已经很成熟了,为的是在2021年有更好的Linux NTFS支持。

    时间:2020-10-22 关键词: linux内核 ntfs Linux

  • 浅谈 Linux 内核中严重的零点击 “BleedingTooth” 蓝牙缺陷漏洞

    浅谈 Linux 内核中严重的零点击 “BleedingTooth” 蓝牙缺陷漏洞

    Linux-5.9在过去两天发布了关于此漏洞的安全公告,提醒用户更新Linux核心版本5.9或更高版本。 Intel 在安全公告中指出,BlueZ 中的输入验证不当问题可导致未认证用户通过相邻的访问权限实现提权。BlueZ 用于基于 Linux 的物联网设备中,是官方的 Linux 蓝牙栈。 Intel 表示,BlueZ 项目发布了 Linux 内核修复方案,解决这个高危缺陷以及另外两个低危缺陷 CVE-2020-12352 和 CVE-2020-24490。 CVE-2020-12352 是因 BlueZ 中的访问控制不当导致的,“可允许未认证用户通过相邻访问缺陷泄漏信息。“CVE-2020-24490 指的是 BlueZ 缺乏正确的缓冲限制,”可能导致未认证用户通过相邻访问权限发动拒绝服务攻击。“ 该高危漏洞是由谷歌安全工程师 Andy Nguyen 报告给 Intel 公司的。 上个月,普渡大学的研究员称,和 Fluoride (安卓)和 iOS BLE 栈一样, BlueZ 也易受 BLESA(蓝牙低功耗欺骗攻击)。 谷歌已在 Google Security Research Repository 的 GitHub 页面上公开了该漏洞的详情。Nguyen 对 BleedingTooth 漏洞的描述似乎比 Intel 发布的 write-up 要严重得多。 Nguyen 表示它是一个“零点击“ Linux 蓝牙远程代码执行缺陷,在短视频演示中,通过使用运行 Ubuntu 的一台戴尔 XPS 15 笔记本电脑上的命令,打开了第二台戴尔Ubuntu 笔记本上的计算器。 BlueZ 包含多个 Bluetooth 模块,包括Bluetooth 内核子系统内核以及 L2CAP 和 SCO 音频内核层。 谷歌产品安全事件响应团队研究员 Francis Perry 表示,在蓝牙范围内的攻击者如果知道目标的蓝牙设备地址,那么就能以内核权限执行任意代码。BleedingTooth 影响 Linux 内核版本5.8及更高版本但并不影响 Linux 5.9及更高版本。 Perry 指出,“在短距离内的远程攻击者如果知道受害者的蓝牙设备地址,则可发送恶意 I2cap 数据包并引发拒绝服务或者可能以内核权限执行任意代码。恶意蓝牙芯片也能触发该漏洞。“ Google已经发布了POC的使用代码,Google计划在其博客googlesecurity上发布更多关于血腥oot失败的细节。

    时间:2020-10-22 关键词: bleeding tooth Linux

  • 支持USB4!Linux 5.10正在持续成熟中

    支持USB4!Linux 5.10正在持续成熟中

    早在今年早些时候,Linux 5.6通过利用英特尔现有的Thunderbolt内核支持带来了最初形态的USB4支持,而更新的USB规范正是基于此。随后的内核继续成熟USB4的实现,这一点在Linux 5.10中得到了延续。 作为Linux 5.10的USB/PHY/Thunderbolt变化的一部分,包括更多的USB 4更新,主要是这个周期修复代码中的一些低级问题,这项工作继续由英特尔开源工程师主导。 内核围绕Tiger Lake也继续进行了很多优化Thunderbolt的工作,包括CM模式下的运行时电源管理、优化强电逻辑、用于Thunderbolt调试的DebugFS接口等修复和改进。 早在Linux 5.9开发期间,最初的Tiger Lake Thunderbolt / USB4代码就已经落地,并在后续的内核中进行了完善。 其它部分还包括对USB Type-C更新和PHY驱动程序的小工作,另一个值得注意的补充是对英特尔Lightning Mountain SoC的USB 3 PHY支持。 这也意味这linux系统正在持续成熟中。

    时间:2020-10-22 关键词: usb4 Linux

  • Linux Kernel 5.10将继续完善对英特尔Rocket Lake平台的支持

    Linux Kernel 5.10将继续完善对英特尔Rocket Lake平台的支持

    在 Linux Kernel 5.9 中已经初步支持明年 Rocket Lake 桌面平台的第 12 代图形处理器,并对像 RAPL 支持和其他 PCI ID 扩展提供早期的实验支持。而后续的支持工作会在 Linux Kernel 5.10 中陆续推进和完善。 libata 驱动库已经着手添加 Rocket Lake PCH-H RAID PCI IDs。此外 Linux Kernel 5.10 的 platform-drivers-x86 开发工作中,已经将 Rocket Lake 的支持添加到 intel_pmc_core 驱动中。 Linux Kernel 5.9 中的 DRM 代码为现有的 Gen12 代码构建了对 Rocket Lake 的初步支持,而在 Linux 5.10 中进行了必要的代码改进,从而能够正确地显示硬件。此外其他一些 Rocket Lake PCI ID 正在添加中。 由于在CPU方面的Rocket Lake主要是被Willow Cove移植到14纳米制程,并具有Gen12 Xe图形,因此在大多数情况下,Rocket Lake Linux的实现是相当简单的,在大多数领域中,它们只是在构建新的PCI ID脱离了现有的Tiger Lake代码路径和图形方面的Gen12 / Xe,并进行了一些其他驱动程序级更改。 英特尔已经表示,他们将在2021年第一季度末宣布 Rocket Lake。虽然完善的支持可能需要等到 5.11,但是在 5.10 中提供部分支持依然是个好消息。

    时间:2020-10-22 关键词: 英特尔 Linux kernel

  • 可从macOS和Linux上构建环境 从Subversion迁移Git,试试吗?

    可从macOS和Linux上构建环境 从Subversion迁移Git,试试吗?

    就在今天,也就是10月22日,FreeBSD 项目今天发布了 2020 年第 3 季度状态报告,介绍了这款行业领先的 BSD 操作系统的发展情况和未来路线。在这份报告中主要有以下亮点 ● FreeBSD 基金会已经针对 Wi-Fi 和 Linux KPI 层发布了额外优化,改进了 Linuxulator 的应用兼容性,更新 DRM/图形驱动程序,为 OpenZFS 提供 Zstd 压缩,在线 RAID-Z 扩展,以及现代化支持 LLDB 目标。 ● FreeBSD 基金会工作人员一直努力改善版本结构,优化 ARM64 支持,将开发树合并到 Git ,重写 UNIX 域套接字锁定,以及运行时动态链接程序和内核ELF加载器改进。 ● 在 Git 前端,团队希望从Subversion过渡到Git,希望在10月底之前拥有一个beta版本存储库。 ● 发布工程团队已经接近完成 FreeBSD 12.2,并很快发布 ● 即将到来的 FreeBSD 12.2 将优化 Linux 兼容层 ● FreeBSD Ports集合超过40,000个端口/软件包。 ● 对 Mesa 和其他图形包进行了诸多改进 ● 从9月开始,现在可以从macOS和Linux主机构建运行正常的buildworld和buildkernel环境。之所以如此,是因为某些CI工具仅支持Linux / macOS,并希望将其用于构建FreeBSD基本系统,并且由DARPA赞助。 ● FreeBSD 13-CURRENT已达到Linux 5.4.62内核DRM驱动程序的状态。 ● 继续致力于URE驱动程序,以覆盖USB 3.0千兆以太网驱动程序。 ath10k,Intel和rtw88驱动程序也进行了无线改进。

    时间:2020-10-22 关键词: git macos subversion Linux

  • 微软首个Linux版Edge浏览器的Insider构建版终于来了!

    微软首个Linux版Edge浏览器的Insider构建版终于来了!

    微软一直在开发新的Chromium Edge浏览器的Linux版本,但是知道今天这家软件巨头才宣布了第一个Insider构建版本供测试用户试用。今天发布的版本支持Ubuntu、Debian、Fedora和openSUSE发行版,微软表示今后将每周发布新的构建版本。 首先您需要成为Edge Insider以获得预览构建,一旦完成报名,有两种方法在Linux上安装浏览器。 直接从微软Edge Insider网站下载并安装一个deb或者rpm包,这种方式将自动配置你的系统以接收未来的自动更新。 使用Linux Software Repository,按照微软Edge Insider网站(deb/rpm)上的 "命令行安装"说明,从微软的Linux软件仓库安装Microsoft Edge。 我们能从第一个预览版中期待什么?微软开发者体验部负责人Kyle Pflug表示: 通过我们的初始预览版,我们的目标是为那些希望在Linux上构建和测试他们的网站和应用程序的开发人员提供具有代表性的体验。网络平台和开发者工具功能,包括核心渲染行为、扩展、浏览器DevTools和测试自动化功能,一般来说应该与macOS和Windows等其他平台表现一致。 一些终端用户功能和服务可能还没有完全启用。特别是,我们的初始版本只支持本地账户,不支持通过微软账户或AAD账户登录到Microsoft Edge,或需要登录的功能(如同步您的设置、收藏夹等)。这些功能将在未来的预览版中提供。 在Debian/Ubuntu中安装的命令列表 curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/ sudo sh -c 'echo "deb [arch=AMD64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list' sudo rm microsoft.gpg 完成操作后即可用以下命令安装: sudo apt update sudo apt install microsoft-edge-dev 卸载命令: sudo apt remove microsoft-edge-dev sudo rm -i /etc/apt/sources.list.d/microsoft-edge-dev.list 在Fedora中安装的命令列表 sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo dnf config-manager --add-repo https://packages.microsoft.com/yumrepos/edge sudo mv /etc/yum.repos.d/packages.microsoft.com_yumrepos_edge.repo /etc/yum.repos.d/microsoft-edge-dev.repo 完成操作后即可用以下命令安装: sudo dnf install microsoft-edge-dev 卸载命令: sudo dnf remove microsoft-edge-dev 在openSUSE中安装的命令列表 sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo zypper ar https://packages.microsoft.com/yumrepos/edge microsoft-edge-dev 完成操作后即可用以下命令安装: sudo zypper refresh sudo zypper install microsoft-edge-dev 卸载命令: sudo zypper remove microsoft-edge-dev 小伙伴们可以去试试哦。

    时间:2020-10-22 关键词: 微软 edge Linux

  • Linux内核驱动开发者探讨为Intel处理器引入降压功能的可行性

    Linux内核驱动开发者探讨为Intel处理器引入降压功能的可行性

    在 Windows 平台上,一些高级用户已经习惯了通过 XTU 实用工具来降低英特尔移动处理器的电压。但在 Linux 平台上,如果你想要追求更好的散热 / 能源效率(或其它目的),目前社区里仍缺少可行的 CPU 降压方案。 好消息是,近段时间,已有不少内核驱动开发者在探讨这么做的可行性。 其实此前,已有独立开发者推出过非官方的 intel-undervolt 应用程序,可惜它仅限于 Haswell 和更新版本的英特尔处理器。 除了降低 CPU 电压,该工具还可操纵英特尔处理器的功耗 / 散热墙。但 intel-undervolt 功能毕竟依赖于反向工程和社区的支持发现,并且需要直接接触 CPU 的 MSRs 来执行操作。 庆幸的是,以 WireGuard 而被大家所熟知的 Jason Donenfeld,恰好向内核开发人员提交了一个补丁。其能够写入特定的 OC mailbox MSR,而不会导致内核警告。 具体说来是,该补丁源于近期在 Linux 上的一项工作,旨在加强从用户空间对 CPU MSR 的访问。在后续的讨论中,开发者们开始将重心放到了其它细节上。 最终结果是得到了大多数开发者的同意,且与通过 MSR 进行交互的方案相比,基于内核驱动程序的调节效果更具优势。 现在的问题是,开发者暂缺与 undervolt 相关的 MSR 文档、以及类似于 Windows 平台上的 Intel XTU 体验。至于后续的发展,或许还得看英特尔工程师们可以提供多少帮助。 所以我们可以期待一下了,毕竟现在Linux成为现在非常重要的系统之一。

    时间:2020-10-22 关键词: intel处理器 linux内核 Linux

  • Linux内核电源管理的整体架构解析,你了解吗?

    Linux内核电源管理的整体架构解析,你了解吗?

    Linux可以说是越来越火了,它在消费电子领域的应用相当普遍,而对于消费电子产品,省电是一个重要的议题。 Linux电源管理非常复杂,牵扯到系统级的待机、频率电压变换、系统空闲时的处理以及每个设备驱动对于系统待机的支持和每个设备的运行时电源管理,可以说和系统中的每个设备驱动都息息相关。 对于消费电子产品来说,电源管理相当重要。因此,这部分工作往往在开发周期中占据相当大的比重,图1呈现了Linux内核电源管理的整体架构。大体可以归纳为如下几类: 1.CPU在运行时根据系统负载进行动态电压和频率变换的CPUFreq。 2.CPU在系统空闲时根据空闲的情况进行低功耗模式的CPUIdle。 3.多核系统下CPU的热插拔支持。 4.系统和设备对于延迟的特别需求而提出申请的PMQoS,它会作用于CPUIdle的具体策略。 5.设备驱动针对系统SuspendtoRAM/Disk的一系列入口函数。 6.SoC进入suspend状态、SDRAM自刷新的入口。 7.设备的runtime(运行时)动态电源管理,根据使用情况动态开关设备。 8.底层的时钟、稳压器、频率/电压表(OPP模块完成)支撑,各驱动子系统都可能用到。 这样,你对linux的电源管理知道多少了?

    时间:2020-10-22 关键词: 电源管理 linux内核 Linux

首页  上一页  1 2 3 4 5 6 7 8 9 10 下一页 尾页
发布文章

技术子站

更多

项目外包