Chromium源码学习(1)—— 拉取源码,编译

news2024/11/18 5:51:59

阅读建议:先简单过一下整个文章目录结构,大致了解一下各个步骤在干什么,然后在上手操作可能会事半功倍。也许你遇到的有些问题文章中已经提及到了,但是由于你没有往下看导致卡进度。

Chromium简介

Chromium项目于2008年发布,作为Google Chrome浏览器的开源部分。Google的Chrome浏览器基于Chromium开发,但添加了Google品牌、自动更新、内置Flash播放器、PDF阅读器等一些闭源的功能和服务。

除了Chorm,近几年微软大火的Edge浏览器也是基于Chromium进行开发的。

Chromium开源项目有活跃的社区和丰富的学习资源,官方也有详细的开发者文档,涵盖了从环境设置到代码贡献的各个方面。
Chromium官方网站

学习chromium源码并不是很适合编程初学者,初学者应该从编程语言,数据结构,操作系统,网络等知识进行学习。

而chromium主要使用C++语言进行编写,所以,学习chromium需要对C++语言比较熟悉。

这篇文章主要介绍如何拉取chrmmium源码以及如何使用vs系列的编译器进行编译。当然你也可以参照官方文档进行拉取源码以编译。

注意:官方建议环境

  • 硬件和软件需求
    • 具有至少 8GB RAM 的 64 位 Intel 计算机。强烈建议 16GB 以上。
    • NTFS 格式的硬盘上至少有 100GB 的可用磁盘空间。不能使用FAT32格式 ,因为某些 Git 包文件大于 4GB。
    • Windows 10 或更高版本。

如果自己的电脑配置不满足需求,就没必要继续向下进行了。

1.拉取源码

一般公司或者学校都使用Git维护代码,而chromium使用Google自己开发的Depot Tools管理代码仓库工具来维护chromium项目。在整个学习chromium的过程会看到很多东西都是Google自己开发的,并没有使用现有的。比如chromium的UI界面,由于Goolgle看不惯window提供的UI界面,于是自己开发了Views框架做为chormium的ui组件。

depot_tools是个工具包(depot是仓库的意思),里面包含gclientgclgnninja等工具,这些根据都是使用python写的。其主要的功能是对git的增强,让代码管理和编译更加简单,如果熟悉Git的话就很容易上手了。不熟悉也没关系,就一些常用的命令,用的时间久了,自然就会了。

Git不同的是:Depot Tools 更专注于大型项目的管理,提供了一些额外的功能和工具来满足大型项目的开发需求;而 Git 则是一种通用的版本控制系统,可以用于管理各种规模的项目,提供了丰富的版本控制和分支管理功能。

所以在拉取源码之前需要先下载Depot Tools

1.1 安装Depot Tools

下载Depot Tools。https://storage.googleapis.com/chrome-infra/depot_tools.zip
将其解压到指定的文件夹下(不要有中文路径)。

比如我解压在本地E盘下dev文件夹
image.png

注意:解压的时候,请务必使用“全部解压缩”选项或是其他的第三方软件解压缩。,千万不要双击打开复制文件,到文件加中,会丢失隐藏的.git 文件夹,导致工具无法更新

可以在你解压的文件夹中查看是否有.git文件夹。如果没有,则说明你可能解压错了,也有可能是你没有显示隐藏文件。
按照下图打开隐藏文件即可。

image.png
下载完Depot Tools后,顺便把环境变量配置好。按照下面的步骤即可

  • 1.win+i快捷键打开设置
  • 2.搜索框搜索环境变量(我是win11系统,win10界面会不一样)
    image.png
  • 3.选择编辑系统环境变量
  • 4.选择环境变量
    image.png
  • 5.在环境变量设置窗体中,下方的系统变量 选择中 “PATH”项,然后点击编辑。(一定是系统环境变量不要选择位用户环境变量)

image.png

  • 6.点击新建,然后选择刚才解压的depot tools路径。

image.png

  • 7.选中刚才新建的环境变量,使用上移移动到环境变量最顶部。(官方建议,有些电脑已经安装了python环境,而depot tools内置了python环境。)

image.png

  • 8.依次点击“确定”按钮保存(每一层都需要确定)

recording.gif

1.2验证depot_tools是否安装成功

按win键,搜索Windows PowerShell。打开即可。
(windows powershell也适用一些linux命令,比如ls,cd等等)
image.png
在打开的Windows PowerShell工具的窗体中输入glcient

注意:后续拉取源码等操作需要代理。

  • 如果出现下面这种情况,则说明是代理的问题,关于代理自行解决。
    image.png

  • 如果报错,那么在安装Depot Tools时或者环境变量配置出错了,重新安装配置即可。

  • 如果显示如下,恭喜您安装成功了,并且已经初始化升级成功。
    image.png

2.拉取源码

在本地创建一个文件夹,用于存放Chromium的源代码。建议空闲空间在200G以上。

比如我这里在本地创建了一个chromium文件夹用来存放源码(忽略已存在的文件,新建的是一个空白什么都没有的文件夹)

image.png
在此处打开Windows PowerShell工具shitf+右键选择在此处打开Powershell窗口即可。

image.png
在Windows PowerShell工具 使用 fetch chromium 命令拉取Chromium的源代码。

这里为了节约时间,我们添加 “–no-history”选项,不拉取历史记录,只拉取最新版Chromium
fetch --no-history chromium

image.png
如果出现下面这种情况,则说明你网络问题,没有设置代理,因为源码在国外,这个办法自己百度解决。(这个东西不敢教,多多包含…)一般设置为全局代理+TUN模式就可以了。如果你使用的是校园网,学校可能会拦截你,也是无法拉取的。
image.png
正常拉取源码如下图:
image.png
出现下面这种情况耐心等待即可。整个时长大概十分钟左右。
这是在向你的磁盘中写入数据, 打开你的存放chromium的文件夹,就可以看到在有新的文件夹被写入。
image.png
写入完成后就开始下载源码了。

image.png
整个源码大概40Gb左右,拉取时间非常长,耐心等待即可。
如果中途断掉了,不用删除全部文件重新拉取,使用gclient sync命令继续拉取即可。(gclient sync 是用于同步 Chromium 源代码的命令)
image.png
如果使用gclient sync进行同步时,出现错误,也是由于网络原因造成的,将你的windows PwoerShell设置代理即可。(我这里使用的使用clash for window,端口号使用的是默认的7890,你的端口号取决于你使用的代理。)

设置代理命令如下:

$env:HTTP_PROXY="http://127.0.0.1:7890"

$env:HTTPS_PROXY="http://127.0.0.1:7890"
image.png
设置完代理后,就可以正常的同步进行下载了

image.png

3.编译项目

3.1配置环境

编译项目使用官方推荐的vs2022即可,关于vs2022的安装,参考本人另一篇博客:
vs2022安装

安装完成后,也需要设置Visual Studio 2022 的安装路径的环境变量。
在系统环境变量中直接新建环境变量vs2022_install。变量值设置为vs2022的安装路径即可。

image.png

除了设置vs2022的安装环境变量,还需要设置DEPOT_TOOLS_WIN_TOOLCHAIN环境变量。

因为我们需要使用本地算力编译Chromium,所以需要添加 DEPOT_TOOLS_WIN_TOOLCHAIN 环境变量,并将其设置为 0。这告诉 depot_tools 使用本地安装的 Visual Studio 版本(默认情况下,depot_tools 将尝试使用 google 内部版本)

一样的,添加系统环境变量,变量名为:DEPOT_TOOLS_WIN_TOOLCHAIN,值为0即可。

image.png

3.2安装Windows SDK

Windows SDK - Windows app development | Microsoft Developer
因为在编译chrom时需要 10.0.22621.2428版本的Windows 11 SDK ,上面连接就是下载地址。
进入后点击下面下载即可。这里建议使用.ios镜像,直接在线下载完安装就行了。
image.png
下载完成后,安装即可

image.png
一路next即可,在安装组件的时候,选择Debugging Tools for Windows组件。

image.png

安装完成后,设置环境变量WINDOWSSDKDIR,值为安装Windows SDK 的安装路径。

image.png

3.3生成sln工程文件

Depot Tools工具包中提供了一个gn构建文件的工具。它的全称是 “Generate Ninja”,gn 工具的主要作用是将配置文件转化为 Ninja 构建系统可以使用的文件,从而管理项目的编译和链接。

通过gn工具,可以生成vs的工程文件。
按照一下步骤进行生成工程文件。

  • 1.打开Window PowerSheell,切换到chromium的src路径下。
  • 2.使用gn工具生成sln工程文件。gn args --ide=vs --filters=//chrome --no-deps .\out\vs_dev
    • 参数说明:

      • gn:调用 GN 工具。GN 是 “Generate Ninja” 的缩写,它用于生成构建文件(如 Ninja 构建系统的文件)。
      • args:GN 的一个子命令,用于生成或更新 args.gn 文件中的构建参数。
      • --ide=vs:指定生成适用于 Visual Studio 的项目文件。这个参数告诉 GN 生成 .sln 和 .vcxproj 文件,以便在 Visual Studio 中打开和编辑。
      • filters=//chrome:指定只生成 //chrome 目录下的项目文件。这个过滤器确保只有与 //chrome 模块相关的文件会被包括在生成的项目中。
      • --no-deps:指示 GN 不包括 //chrome 模块的依赖项。通常,模块可能依赖于其他许多库和组件,这个选项确保这些依赖项不会被包含,从而减少生成的项目文件数量。
    • 解释:

      • 由于整个chormium项目是非常庞大的,通过指定参数生成特定的模块项目,这里使用--filters=//chrome --no-deps选项只生成chrome相关的模块。
      • 这样做的好处就是能大幅度减少项目文件的数量,让开发和调式更高效。最直观的就是在第一次编译的时候,chrome相关的大概有五万多个文件,编译一般在6-8小时。如果全部都进行编译的话,时间只会更长。

image.png

  • 3.添加编译参数,方便调式
    • 执行上面的命令后,会自动弹出一个args文件,在弹出的args文件中添加is_debug = trueis_component_build = true
    • 添加完成后 关闭即可。
    • 这样你可以启用调试模式和组件构建模式。在后续使用vs中可以很好的调式代码。就不用在进行配置啦。

image.png

  • 4.等待工程文件生成即可。
    • 生成工程文件的时间并不会很长,生成后,使用vs2022打开即可。
    • 如果生成失败错误如下:说明环境变量搞错了。
    • 在window powershell 窗口中设置临时环境变量即可$env:WINDOWSSDKDIR = "D:\Windows Kits\10"替换为你的windows sdk安装路径。
      image.png
    • 成功生成如下:
      image.png
    • 同时,在你本地路径下就可看到sln工程文件了。

image.png

  • 5.使用vs2022 编译chromium项目

    • 右键all.sln工程文件,使用vs2022打开。

    image.png

    • 打开后 出现下面的信息,不用升级取消即可。升级后版本不匹配会带来问题的。

    image.png

    • 正常打开如下,点击运行即可进行编译。

    image.png

    • 如果出现下面的报错信息,下载ninja即可。

    image.png

    • nijia官网Ninja, a small build system with a focus on speed (ninja-build.org)下载nijia进行安装

    image.png

    image.png

    • 解压下载好的nijia即可
      image.png
    • 下载完nijia同样需要配置系统环境变量的PATH。需要保证在deptos_tools的上面即可。
      image.png
    • 然后重启vs2022重新进行编译即可。(不重启环境变量可能没生效)
    • 整个编译周期很长,CPU资源会被吃完,建议晚上进行编译,整个过程大概在6-8小时,不同配置的电脑存在区别。(不用担心,后续进行编译调式的时候用不了这么长时间,因为第一次已经成了ojb文件,后续直接进行连接即可,不用重新生成,后续进行调式编译的时候,大概是10分钟以下)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1716466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS学习笔记:vw、vh实现移动端适配

移动端适配 移动端即手机端,也称M端 移动端适配:同一套移动端页面在不同屏幕尺寸的手机上可以实现宽度和高度的自适应,也就是页面中元素的宽度和高度可以根据屏幕尺寸的变化等比缩放 之前我在一篇博客中介绍了rem实现移动端适配&#xff0…

Linux内核编译流程3.10

一、内核源代码编译流程 编译环境: cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) Linux内核版本: uname -r 3.10.0-693.el7.x86_64 编译内核源代码版本:linux-4.19.90-all-arch-master cp /boot/config-xxx到内核源…

九章云极DataCanvas公司DingoDB完成中国信通院权威多模数据库测试

2024年5月16日,九章云极DataCanvas公司自主研发和设计的开源多模向量数据库DingoDB顺利完成中国信息通信研究院(以下简称中国信通院)多模数据库产品测试。本次测试的成功标志着DingoDB在技术能力、性能表现和产品稳定性方面得到了权威机构的高…

交互设计如何助力传统技艺在当代复兴?

背景介绍 榫卯是中国传统木工中一种独特的接合技术,它通过构件间的凸凹部分相互配合来实现两个或多个构件的紧密结合。这种结构方式不依赖于钉子或其他金属连接件,而是利用木材自身的特性,通过精巧的设计和工艺,实现构件间的稳定…

数据大屏方案 : 实现数据可视化的关键一环_光点科技

在数字时代的浪潮中,数据已经成为企业决策和操作的重要基础。因此,“数据大屏方案”逐渐成为业界关注的焦点。这类方案通过将复杂的数据集合以直观的形式展现出来,帮助决策者快速把握信息,做出更加明智的决策。 数据大屏的定义及作…

一年收入大几十个的副业兼职,闲鱼新玩法,新手小白可做,无门槛

在开始分享之前,我想先了解一下,大家是否曾在各大公众号上参与过各种打卡活动?比如减肥打卡、英语阅读打卡、考研考公打卡等等。如今,打卡已经成为现代人生活中不可或缺的一部分。无论是学习、健身还是工作,打卡都能有…

socks5 如何让dns不被污染

问题 发现firefox浏览器代理设置成socks5后,查看ip是成功了,但是谷歌等海外的还是无法正常访问。 原因 主要原因是socks5连接虽然是成功了,但是dns还是走国内的,国内的dns解析都被污染了导致没法正常访问 解决 把设置里的 使…

香橙派Kunpeng Pro评测

有幸受邀评测香橙派与华为鲲鹏在2024年5月12刚刚联合发布的新品香橙派Kunpeng Pro。 本文将从软硬件、AI算法测试等角度简单分享一下博主拿到板子以来感受与所做的评测。 一、硬件 香橙派Kunpeng Pro实物图 处理器方面,香橙派Kunpeng Pro采用了4核64位armv8架构处…

EthernetiP转modbusTCP网关在加氢催化中的应用

在现代工业控制系统中,Ethernet/IP和ModbusTCP是两种常见的通信协议。它们在各种设备和系统间传输数据,实现设备的监控和控制,尤其在催化加氢装置这类关键工业过程中发挥着不可或缺的作用。本文将深入探讨开疆智能KJ-EIP-206型Ethernet/IP转M…

探寻数据处理的高效之道:从Python内置方法到NumPy的飞跃

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:为什么要学习NumPy? 二、案例展示:创建整数序列…

【Java】/*继承和组合*/

目录 一、继承 1.1 为什么需要继承 1.2 继承的概念 1.3 继承的语法 1.4 访问父类的成员 1.4.1 在子类方法中访问父类的成员 1.4.2 在子类外的方法中访问父类的成员 1.5 super关键字 1.6 子类和父类的构造方法 1.7 super 和 this异同点(待改进)…

常见webshell工具及特征分析

前言 在工作中经常会遇到各种websehll,黑客通常要通过各种方式获取 webshell,从而获得企业网站的控制权,识别出webshell文件或通信流量可以有效地阻止黑客进一步的攻击行为,下面以常见的四款webshell进行分析,对工具连…

深度学习之语义分割概念

深度学习之语义分割概念 文章目录 深度学习之语义分割概念前言一、语义分割任务常见数据集格式1.PASCAL VOC2.MS COCO 二、语义分割结果的具体形式三、语义分割常见的评价指标四、语义分割标注工具1.Labelme2.EISeg3.X-Anylabeling 总结 前言 常见的分割任务: 语义分…

大模型“1元购”?AI公司加速奔向应用端“大航海时代”

自字节跳动发布豆包大模型,互联网大厂纷纷就位,击穿“地板价”的打法从C端向B端拓展。这也成为今年“618”最亮眼的价格战。 5月15日,字节跳动率先宣布豆包大模型已通过火山引擎开放给企业客户,大模型定价降至0.0008元/千Tokens&…

Python os.path.isfile() 和 os.path.isdir() 函数

Python os.path.isfile 和 os.path.isdir 函数 正文 正文 在网上看到很多人对这两个函数的用法有过说明,然而感觉都没有说到它们的本质,这里特来记录一下。os.path.isfile() 用来判断所给参数是否一个文件。os.path.isdir() 用来判断所给的参数是否是一…

揭秘CISA:你不知道的信息安全认证,轻松掌握职场先机!

在当今的信息化时代,信息系统的安全和稳定是企业和组织的重要资产。信息系统审计是一项专业的工作,需要具备丰富的知识和经验,以及敏锐的洞察力和判断力。信息系统审计师是信息系统审计领域的专业人士,他们负责对信息系统的设计、…

mmu之TLB的来源与实现

TLB的由来 遇到的问题 对于两级页表(Page Table)的设计,需要访问两次物理内存才可以得到虚拟地址对应的物理地址(一次访问第一级页表,另一次访问第二级页表),而物理内存的运行速度相对于处理器本身来说,有几十倍的差距; 因此在处…

2024年5月最新高德poi数据采集科普

曾几何时,个人注册高德开发者即可拥有每日一万次免费配额调用,现如今,个人每日只能调用100次,即使额外购买了配额300元/10万次,也会因为短时间大量采集被封号。要想稳定采集,恐怕只有购买商业授权5万/年&am…

【Vue】v-if / v-show条件渲染指令

条件判断指令,用来辅助开发者按需控制 DOM 的显示与隐藏。条件渲染指令有如下两个,分别是: v-show 作用: 控制元素显示隐藏(简单的显示隐藏) 语法: v-show "表达式" 表达式值为 tru…

爬虫的福音-移动蜂窝代理

在爬虫与反爬虫斗争愈演愈烈的情况下,各大网站和 App 的风控检测越来越强,其中一项就是 IP 封禁。 为了解决 IP 封禁的困扰,一个有效的方式就是设置代理,设置代理之后,爬虫可以借助代理的 IP 来伪装自己的真实 IP 地址…