LWN:Google 更加靠近 mainline 开发!

Android 14 Telephony 网络选择功能介绍 介绍Android Telephony 数据模块网络选择功能的代码流程及平台方案对比。思考关于选网,从简单的网络评分到完善的网络代理是如何变化的问题?结合deepseek的答案批判质疑梳理这块流程。 阅读详情

关注了就能看到更多这么棒的文章哦~

Moving Google toward the mainline

By Jake Edge
October 5, 2021
OSSNA
DeepL assisted translation
https://lwn.net/Articles/871195/

两位谷歌工程师来到 2021 年北美开源峰会介绍了一个项目,该项目旨在改变该公司在其数据中心的生产系统上运行的 kernel 的创建和维护方式。Andrew Delgadillo 和 Dylan Hatch 介绍了目前的生产内核(Prodkernel)以及由于它与 mainline 差异很大而出现的一些问题。Project Icebreaker 就是为了能进行改变,为谷歌内部的开发和测试提供一个接近 mainline 的内核。该讲座探讨了该项目、它的风险、它的当前状态和后续计划。

Prodkernel

Delgadillo 从 Prodkernel 开始介绍,Prodkernel 是谷歌数据中心的大多数机器上运行的内核。这些系统的用途包括处理搜索请求以及 "其他对外和对内的工作",他说。Prodkernel 是基于一个旧版本的 upstream Linux kernel,添加了 9000 个 patch。这些 patch 实现了各种内部 API(例如谷歌光纤 Google Fibers),提供了硬件支持,进行了性能优化,并包含其他一些 "运行我们在谷歌使用的二进制文件需要的调整"。每隔两年左右,这些 patch 就会被 rebase 到一个更新一些的内核版本上,这就带来了一些挑战。首先,内核在两年内有了很多变化,哪怕某个功能的 rebase 看起来很正常,但是如果碰到了 bug 的话,去分析是哪里出现的问题,都会经历一个 "非常大的搜索空间"。

ff8b1642b769d648a7c951ba3f8d2637.png

[Andrew Delgadillo]

他说,有一些特定的内部需求以及 schedule 决定了对 Prodkernel 的需求,这就是为什么谷歌不能直接使用 mainline 并将所有需要的额外功能都合入 mainline。他举了一些例子,其中提到的谷歌生产环境使用场景所需要的功能,但这些功能在 mainline 中是不存在的。其中包括需要能够从 user space 来给出站网络流量(outgoing network traffic)设置 qos、为 out-of-memory(OOM)killer 配置一些具体规则,并为用户空间的 cooperative scheduling 增加新的 API。

他说,Prodkernel 存在的一个大问题是它减弱了对 upstream 的参与度。谷歌为生产环境开发的任何功能都是在 Prodkernel 上开发和测试的,而它可能比主线内核落后两年。如果开发者想为 mainline 功能提出一个新功能的话,使用 Prodkernel 的模式会带来两个主要问题。其一,这个新功能需要 rebase 到 mainline,当版本之间的差异很大时,这个任务本身可能就很困难了。即使能完成这一步,那么还有一个问题,也就是如何测试该功能。该功能已经在 Prodkernel 的生产环境使用场景中得到了验证,但是现在它已经被拿到了一个新的环境中,与很不一样的源代码组合在一起。这个新的组合无法不能在生产环境中测试,因为 mainline 缺乏 Prodkernel 的其他功能。

谷歌的工作场景倾向于尽量把性能瓶颈、死锁和其他类型的错误都检测出来,但使用 Prodkernel 就意味着这些检测机制对其他人无法提供帮助。例如,如果谷歌运行的是接近 LTS stable kernel,那么报告这个 bug 就可能会使团队找到一个可以 backport 回去的 fix。但现在一般来说发现和 fix 这些 bug 都只能是谷歌自己做的事情了。此外,任何 fix 都可能对其他人没有丝毫用处,因为它们是针对一个多年前版本的内核的。另外,所有在最近的 kernel 中被 fix 的错误都不会被发现,直到人们真的发现有这么个 fix,才会进行 backport,或者就得等到下一次的 rebase 完成了。

rebase 过程是 "非常费时费力的",它占用了开发人员可以用来做其他事情的时间。每一个 patch 都必须解决与 upstream kernel 的冲突;很可能开发者在开发代码之后已经过了一年或更长时间都没有再碰过过这段代码了,但他们必须重新回忆当时的情况、完成 rebase。当然,这样做完之后产生的内核必须用谷歌的使用场景来重新验证。在这个过程中发现的错误可能就很难找出 root cause 了。当然我们可以对 kernel 改动进行 bisect 来查找引入问题的改动,但是在每一步中都需要解决 rebase 引发的合并冲突。这个过程也许可以自动化,但它仍然是一个很困难的工作流程,他说。

与 rebase 工作相关的这个 delay,使得 upstream 的参与度问题变得更加恶化了,这使得下一次 rebase 就需要更多的时间。很明显,这就是 technical debt 的一个实例,Delgadillo 认为,而且这个 debt 还在不断增长。每一次 rebase Prodkernel 的时候都会增加 patch 数量,这就导致下一次 rebase 的时间会更长。这种做法是不可能持续的。所以需要努力减少 technical debt,从而能腾出时间来提高 upstream 参与度,进而进一步减少 technical debt。

Icebreaker

531616747f9fb0358c2f2949329799f1.png

[Dylan-Hatch]

Hatch 随后介绍了 Project Icebreaker,这是谷歌在进行的一个新的 kernel project,它有两个主要目标。第一个目标是紧跟 upstream kernel。我们的想法是为每一个主要的 upstream kernel 版本都发布一个新的 icebreaker kernel。新版本的发布需要是 "on time,我们需要保持与 upstream Linux 的同步"。这将为开发者提供一个添加新 feature 的平台,这个平台与 mainline 足够接近,然后这些功能就可以直接向 upstream 提出了。

第二个目标是能够在该内核上运行谷歌二进制文件。这将是一个 "真正的生产内核",可以在 Prodkernel rebase 之前就完成 upstream 改动的验证。他说,在目前的计划中,谷歌一直是 "把所有东西都在两年前的版本之上"。有了 Icebreaker,这个测试工作基本上都可以在每次发布新的 mainline kernel 后马上就开始。

这些目标很重要,因为该团队需要 "更好地参与 upstream"。开发人员在为远离当前 mainline 的内核开发新功能时,很难看到让该功能进入 upstream 有什么好处。他需要做大量的工作来将这个新功能从 Prodkernel 中分离出来、在 mainline 内核上进行测试、然后再向上游提出建议。做了这么多事情之后,还仍然无法确定这个功能是否会被 upstream 所接受。另一种做法就是直接等待 rebase,专门分配时间来做 rebase 工作,但是一旦新的 Prodkernel 验证完整之后,也就再次没有动力去把这个 feature 推动到 upstream 去了。

让 kernel 更接近 mainline 也会帮助谷歌更快地验证所有的上游补丁。与其等到两年后再做费劲的 rebase 和重新测试的工作,不如将这些工作摊薄在更长的一段时间内。

Structure

他说,在看待 Icebreaker 这个工作的 structure 时,有两个方面需要考虑。一方面是如何开发功能,以使它们能部署在 icebreaker kernel 上。另一方面是在有新的 mainline kernel 之后,如何将这些 patch 升级到下一个 icebreaker 版本上去。

Icebreaker 会从 mainline kernel fork 出来。它会添加一堆 feature branch(也被称为 "topic branch"),每一个这样的 branch 都是针对谷歌正在添加的这个功能的一组独立的 patch set。这个方式本身就很有用,因为每一个这样的 branch,其中的 patch 都是一组可以推到 upstream 的 patch series。"所以你的起始点就是一些可以推到 upstream 的内容,而不是混杂在一起",Hatch 说。

开发工作会在这些 feature branch 上进行,然后根据需要来添加 bug fix 和新 feature。最终,这些 feature branch 会先被 merge 到相关子系统的 staging branch 中进行测试。然后再把 staging branch 合并到另一个 branch 来进行发布。他说,这个最终 branch 就是一个 icebreaker kernel,它已经 "可以使用了,而且它的根源仍然是那些 feature branch"。在发布之后,会进行一次 "fan-out merge 来把改动合并到 staging branch",从而使这些 staging branch 的内容也跟上了发布版本。重要的是,这种 fan-out merge 操作并不会对 feature branch 进行。那些 branch 仍然保持着原始的可以 upstream 的状态。

他说,通过跟踪这些 feature branch 的生命周期,我们就可以看到这个升级过程是如何进行的。当一个新的 mainline kernel 发布时,就会创建一个新的 feature branch,并将早期内核的 branch 合并到该 branch 之上。早期的 feature branch 上的提交的 SHA1 值被保留记录下来,而解决合并冲突的代码也可以在 merge commit 中看到。

在这种工作流程中,错误处理就更加容易了。bug 可以在仍在支持的最早的 feature branch 上进行 fix,然后再合并到所有后续的 feature branch 上。引入 bug 的 commit 以及和 fix commit 的 SHA1 在其他分支上保持一致。就不再需要来使用其他的 metadata 来跟踪不同的内核版本中的相应 fix patch 了。

Hatch 说,Icebreaker model 比目前的 Prodkernel 方案来说更有利于推动代码到 upstream。Icebreaker 的 feature branch 是在最新的 mainline kernel 上完成的,它们就以这种方式进行测试,所以测试结果与 upstream 更加吻合。这将使开发人员更容易为 mainline 提出新功能 patch。演讲的幻灯片中可以看到更多的 Icebreaker branch 相关信息。

Risks

他说:"不幸的是,Icebreaker 还是有一些风险"。其中一个较大的风险是,需要有大量的 feature branch 用来测试。人们可能会倾向于把这些 branch 当作一个文件柜,把 patch 都储存在这里,然后 merge 到需要的地方。但是,如果不能确定这个 branch "是否可以完成 build 或 boot,以及能通过所有测试",那这就没有用了。

因此,在将其 merge 到其他 branch 之前,需要对该 feature branch 进行验证。如果能确认它在 merge 出去之前是能正常工作的,那么随后的任何 bug 都应该是由 merge 过程中的某些改动造成的。否则如果把一个未知状态的 feature 合并到一个新的 branch 上,只会让情况变得复杂。他说,每次升级到一个新的 mainline kernel 版本时也是如此。

feature 之间的依赖性也可能是 icebreaker 的一个风险。设计流程的时候假设这些 feature 大多是互相独立的,但这并不完全正确。它们之间会有一些相互依赖性。比如某个 feature 提供了在另一个 feature 中要使用的 API、或者一个 feature 正确完成其工作所需的性能优化。这可以通过在 staging branch 之上解决依赖关系来处理,但这些 staging branch 不会被带到下一个 icebreaker kernel,只有 feature branch 才会用到。

所以解决方案就是在 feature branch 之间进行 merge,这确实可行,但也增加了一些复杂性。有必要弄清楚哪些 branch 是可以相互 merge 的。他提出了一个问题:"我们可以让这些 merge 变得多么疯狂?"。没有规则规定什么时候两个 feature branch 应该简单地合并成为一个 feature branch,或者哪些情况下确保它们是独立的。这些都必须根据具体情况来决定。

另一个风险是 Icebreaker 没有 Prodkernel 的工作流程那么集中。谷歌内部 feature 的负责人和子系统维护者都需要参与并接受这个新的工作流程和工作模式。他们需要相信这个新的 icebreaker 计划(早期阶段肯定是混乱和复杂的)实际上会给大家带来更好的结果,并且减少 technical debt。

Hatch 所提出的最后一个风险是,Icebreaker 的 feature 还是必须要推到 upstream 的,否则它将再次演变为又一个 Prodkernel。如果越来越多的 patch 被添加到 Icebreaker,但又没有因为一些 feature 进入到 upstream 而减少一些 patch,那么大家仍然将无法跟上 mainline。production kernel 团队需要利用 Icebreaker 非常接近 mainline 的这个优势,来让将这些 feature 尽量合入 mainline。

Status and plans

Delgadillo 接下来谈论了 icebreaker 的当前状态。在此时此刻,它是基于 5.13 内核的了,而此时 5.15 内核正处于 release candidate 阶段。因此,该项目基本上比 mainline 晚了一个主版本,这是 "比我们以往的程度要接近得多了"。

7a187f56693d49ed054687338320226d.png

[Dylan Hatch & Andrew Delgadillo]。

在这个过程中,大约有 30 个 patch 已经不再维护在内部 branch 上了,因为它们已经被 merge 到 upstream 了。他说,在 9000 个补丁中,30 个听起来可能不算很多,但这是一个开始。如果没有像 icebreaker 这样的项目,这是不可能发生的事情。该团队现在正在开发 5.14 版本,完成之后就能够抛弃 12 个 feature branch 了,它们都是谷歌从 mainline 移植过来的功能,但对于最近版本 kernel 来说就不再需要了。他说,这是对 technical debt 的另一个削减。希望这个过程后续能变得 "越来越容易,因为我们在不断前进"。

此外,这个过程中也发现了一些 bug,进行了 fix,然后报告给了 upstream,或者正在往 stable tree 进行 backport。在使用 Prodkernel 的时候,这种情况很少发生,因为它远远落后于 mainline。目前看到的这些 fix 主要还是编译错误之类的 fix,但还是对其他人有用的,这已经是现在方式的优点了。

展望未来,Icebreaker 计划在 5.15 或 5.16 的时候追赶上 upstream,这将是此项目的一个转折点。他说,到那时,它将可以完全利用 upstream 的进展,这就可以允许 "我们放慢对自己代码 tree 进行 upgrade 的节奏了"。目前出现的一个问题是,在 Icebreaker 努力追赶的过程中,feature 维护者不得不每隔三四个星期就重新进行 rebase 以及 fix 合并冲突,而在 Prodkernel 模式中,这个工作只会每两年左右进行一次。一旦项目追赶上最新版本 kernel,那么就会只需要每 10 周左右进行一次 rebase,这就与 mainline 的时间表保持一致了。

在 mainline kernel 的 release candidate 版本的基础上来对 icebreaker 的 feature branch 进行测试,这也是 icebreaker 项目希望能做的事情。这就会让谷歌也参与到 release candidate 的流程中,帮助测试这些 kernel。等 Icebreaker 与 mainline 完全对齐之后,完全可以针对 upstream 代码进行 feature 开发了,而这是 Prodkernel 无法做到的。

接下来,Delgadillo 和 Hatch 接受了大家的提问。第一个问题是关于 Prodkernel 的后续计划:是否仍然会有巨大的、为期两年的 rebase?哈奇说,目前 icebreaker 和 Prodkernel 在并行进行。Delgadillo 指出,icebreaker 这个新东西不一定能解决所有的问题。他还说,虽然 Icebreaker 在功能上与 Prodkernel 相当,但它在性能上可能并不相等。在生产环境中运行这些 kernel 绝对是他们的目标,但这一步目前还没有真正达到。

读者可以将这个演讲与 2009 年内核峰会上的一个演讲 (https://lwn.net/Articles/357658/) 进行一下对比,应该会是是很有趣的,那篇文章对 12 年前的情况进行了介绍。

[编者感谢 LWN 的订阅者支持我去西雅图参加北美开源峰会。]

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

99428678de4e6b074274dc3dff136687.png

Android Treble与Mainline计划:推动Android生态系统的持续改进 Android操作系统作为目前全球最流行的移动操作系统之一,具有庞大而复杂的生态系统。它不仅驱动着数十亿台设备,还支持各种类型的应用程序开发和定制化需求。Android生态系统是由设备制造商、开发者社区和最终用户组成的多方参与体系。 阅读详情

相关推荐

STM32+A4988控制步进电机

基于A4988芯片驱动42步进电机,在STM32F1上进行测试,最高可以实现16细分。

个人博客 4万+

Android 开发基本概念汇总

刚入门Android学习, 对学习中遇到的一些Android知识概念进行总结

刚入职的Android系统工程师小白 3086

Qt开发中彻底解决中文乱码问题

中文乱码问题主要源于编码不一致需要同时设置控制台和Qt应用程序的编码确保项目文件和环境配置的编码一致文件操作时注意指定正确的编码。

qq_53832058的博客 3404

Android Mainline简介

Android Mainline 是 Google 在 Android 9(Pie)及以上版本中引入的一个框架,通过将 Android 系统的关键组件模块化,允许这些组件以独立模块(称为 Mainline 模块 或 APEX/ART 模块)的形式通过 Google Play 系统更新(Google Play System Updates)进行分发和更新,而无需完整的系统固件更新(OTA)。引入时间。

for_syq的博客 1948

【Bug—eNSP】华为eNsp路由器设备启动一直是0解决方案!

软件,添加AR设备时启动异常,最开始错误代码是40,最后通过重新安装,又出现了新的问题,启动AR设备一直是0,而且界面卡住。打开控制面板→网络和Internet→网络和共享中心→更改适配器设置,然后再按以下步骤一次操作。重新打开eNsp,然后选择注册设备,注册成功后重新启动一下,这个时候AR设备就可以正常启动啦。打开eNsp→菜单→工具→选项→服务器设置,写入刚刚写的IP地址就可以了。打开VirtualBox,将左侧的文件全部删除(点击删除所有文件)

享你所想 3415

DataWorks数据安全治理最佳实践

DataWorks基于数据安全治理的常见思路,针对资产梳理、技术体系建设和运营体系建设,提供了一系列数据安全产品能力,您可通过“基础防护建设、数据安全防护措施及策略增强建设、数据安全持续运营”三个阶段在DataWorks上落地数据安全治理项目。参考本文启动数据安全治理项目前,建议您先了解DataWorks数据安全产品相关能力了解DataWorks数据安全产品能力后,您可参考如下三个阶段在DataWorks上落地数据安全治理项目。

soso1968的博客 1438

让最新的 Android Q Beta 3 强制重启的 Project Mainline,到底是什么?

一. 序 最新的 Android 版本 Q,已经发布了 Android Q Beta 3,虽然没有正式发布,但是不少用户已经加入了测试计划,抢先体验 Android Q 的新功能。 近期不少体验用户反馈,自己的设备升级到 Beta 3 之后,会出现触不及防的强制重启。谷歌方面已经确认,是运行了 Project Mainline 这个在 Android Q 中新加入的功能导致。谷歌在确认的同时也...

weixin_34248487的博客 362

深入解析LVDS电平标准在LCD屏接口设计中的关键作用

本文深入解析了LVDS电平标准在LCD屏接口设计中的核心作用。文章不仅阐释了LVDS低电压差分信号的工作原理、关键电气参数及抗噪优势,还详细对比了VESA与JEIDA两种主流数据格式,并提供了从PCB布局布线到信号调试的实战避坑指南,是确保高速、稳定显示的关键技术参考。

weixin_28419039的博客 334

Android Q 合入GMS包配置

1.添加GMS包到vendor/google/ 2.添加mainline到vendor/partner_modules/ (mainline需要联系google释放) 3.device/mediatek/system/common/device.mk +$(call inherit-product-if-exists, vendor/google/products/gms.mk) 4.device/mediateksample/项目名/ProjectConfig.mk +AUTO_ADD_GLOBAL_

逆风飞翔 1672

网格质量评价

CFD中评价网格质量的方法

B_etter_Man的博客 1万+

《Python星球日记》 第43天:机器学习概述与Scikit-learn入门

《Python星球日记》 第43天:机器学习概述与Scikit-learn入门

Code_流苏:在代码中寻诗意,在实践中觅真知 932

CtsHealthFitnessDeviceTestCases 模块下fail测试记录

经与同行以及咨询MTK ,这部分受dut性能影响导致fail。尤其是android.healthconnect.cts.RateLimiterTest这个小项里面的6条cases ,只要有fail ,后面的200多条全都会跳过导致测试未完成。--exclude-filter android.healthconnect.cts.RateLimiterTest 然后再不断retry,直到1081项全部测试pass, 有同行说换6739WW的pass概率要高一些,这部分还在等料验证。

weixin_38396964的博客 459

微信小程序 - {errCode: 10008, errno: 1500104, errMsg: “writeBLECharacteristicValue:fail write characteris

微信小程序errCode: 10008, errno: 1500104, errMsg: "writeBLECharacteristicValue:fail write characteristics error. 10008, errMsg=The value's length is invalid.",uni-app微信小程序报错,uniApp小程序调用蓝牙api报错,向低功耗蓝牙设备的某个特征写入数据时错误,UniApp微信小程序蓝牙API调用报错10008解决方案,蓝牙设备进行通信时,向设备写入数据

🏆 前端领域优质创作者 4430

Android U 添加自定义WiFi服务

添加服务。

NiHuiShenMo的博客 638

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Perform a bisect test to identify the kernel problem (by quqi99)

*作者:张华 发表于:2016-12-15 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.youkuaiyun.com/quqi99 )* 例子 sriov在Xenial上不work, https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1633634 步骤 先测...

技术并艺术着 1217

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

[Google Mainline] 如何配置WIFI Module使用平台原生的,并非Google Mainline WiFi Module

Android 14强制要求新设备使用Mainline WIFI模块,已升级项目可继续使用原生平台。修改需注意:仅针对新发布设备强制执行该要求,从旧版本升级的设备不受此限制。

android 系统定制开发那些事 246

为何Google将几十亿行源代码放在一个仓库?

作者 | Rachel Potvin,Josh Levenberg译者 | 张建军编辑 | apddd【AI科技大本营导读】与大多数开发者的想象不同,Google只有一个...

AI科技大本营 1281

2020Android开发陷入饱和,移动开发者未来的出路在哪里,我们该如何让应对?

活动管理者(Activity Manager):控制应用程序生命周期和活动栈的所有方面 内容提供器(Content Providers):允许程序之间发布和分享数据。 资源管理器(Resource Manager):提供对非代码嵌入资源的访问,如字符串、颜色设置和用户界面布局。 通知管理器(Notification Manager):允许应用程序显示对话框或者通知给用户 视图系统(View System):一个可拓展的视图集合,用于创建应用程序用户界面 3,系统运行库层 程序库 Android包含一些C.

m0_63737583的博客 335

超级用户指南:轻松升级你的Ubuntu Linux内核版本

ubuntu升级Linux内核版本。

Lion_Long的博客 2万+

kernel源代码标记:mainline 、longterm、stable、linux-next、snapshot的含义

mainline 、longterm、stable、linux-next、snapshot这些名词,都是linux kernel source的标记名称,可以理解为代号。 mainline mainline指由Linus Torvalds亲自制作的内核发布版,是官方当前最新版本的kernel source。在Torvalds对所有其他程序员所做出的重大变化进行整合,并且对先前版本的bug进行...

weixin_30569033的博客 400

Ubuntu修改内核版本

两种方法实现Ubuntu内核版本的任意修改,使用脚本和手动修改,实现内核版本的升级或者降级。

strive0_0的博客 4958

ubuntu 安装 最新的 mainline kernel

【代码】ubuntu 安装 最新的 mainline kernel。

sh的博客 909

Android10加入APEX目的

Google在Android中加入APEX的目的? Android碎片化的问题除了好多厂商加了更符合国人土豪味的特性之外,其实还有一个更基础性的问题就是升级太慢。为啥子? 不记得之前讲过没有(好像讲过),现在再讲一遍: 谷歌是AOSP代码的亲爹。但是有个问题,它老人家把代码搞出来后呢,还不能给厂商使用。因为谷老大没有硬件—给其他玩家用的硬件。 在这个生态链里,谷老大之后是华为,高通,MTK这样的芯片厂商。这些芯片厂商有芯片(SOC啊,全套都有,就好像拎包入住的精装修的房子——为毛码农可以拿.

Android系统攻城狮 2581

谷歌安全patch集成指导

Integrating Modules This articledescribes how to obtain and integrate a Mainline module release package with an Android device build and provides technical guidance on implementing GPSU UX requireme...

qq_37610155的博客 5404

各大浏览器的内核

各大浏览器的内核分别是什么? IE: trident内核 Firefox:gecko内核 Safari: webkit内核 Opera: 以前是presto内核,Opera现已改用Google - Chrome的Blink内核 Chrome: Blink(基于webkit,Google与Opera Software共同开发)

weixin_45078633的博客 559

推荐一款神器:Ubuntu Mainline Kernel Updater

推荐一款神器:Ubuntu Mainline Kernel Updater 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 Ubuntu Mainline Kernel Updater 是一个为Ubuntu用户精心设计的工具,它的目标是使更新主线内核变得简单易行,即使对于新手也友好。通过这个脚本,你可以轻松地获取最新或特定版本的内核,并进行安装,无需手动操作复杂的命令行...

gitblog_00040的博客 731
上一篇: LWN:用户空间的中断!
下一篇: LWN:以QEMU为例解析软件复杂度!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值