webrtc 源码编译-轻松下载并编译最新的webrtc源码

在音视频领域,webrtc是一个不得不学习和研究的框架。 很多博客和书籍对webrtc的研究都仅限于介绍Web上的JS业务交互。 但对于一个音视频方向的开发者来说还不够。 webrtc的JS开发只是一个web后端和一个应用需求webrtc 源码编译,但实际上webrtc不仅仅用于web,还可以用于app和PC客户端。 webrtc的存在,或者定制开发webrtc或者移植webrtc中的经典算法等等,这就需要对webrtc原生代码进行研究和二次开发,本文将开始webrtc源码下载和编码,为后面铺路用于webrtc学习和二次开发。

Webrtc框架

1.webrtc下载

或许读者也和笔者之前一样,从网上拿了别人的webrtc源码,但是已经不能满足需求了(github上的源码只是部分或者是从云端下载的源码)磁盘太旧)。 虽然自己下载webrtc非常容易(前提是使用科学的互联网工具),但是为什么不自己去获取新鲜的一手代码呢。

1)环境配置

Webrtc 是 chrome 代码的一部分。 下载chrome和编译chrome代码本身就包含了下载和编译webrtc,只不过webrtc是作为静态库进入到chrome.exe中,或者作为webrtc_componet.dll.exe给chrome使用。 上面我们的《浏览器编译实践》中配置的环境配置已经完成,是为了适应webrtc下载编译的环境,这里就不展开了。

2)代码下载

下载代码的步骤很简单,基本上下面4条命令就完成了(这个地方需要代理,确保代理没问题)。

Webrtc下载步骤

虽然步骤很简单,但过程并不容易。 首先,确保你的环境配置没问题,否则下载会困难,其次,你的网络稳定,否则会经常断线。 作者也下载了N次才成功。 建议白天下载,网络比较稳定。经过足够的尝试,终于下载完成

Webrtc下载

webrtc目录结构如下:

Webrtc的目录结构

二、编译

生成ninja项目配置命令:

gngenout/默认

翻译忍者计划

ninja-Cout/默认

如果需要IDE调试webrtc 源码编译,可以像chrome项目一样生成VS项目

gngen --ide=vsouttest

生成了 1220 个 VS 项目

打开 all.sln 解决方案并单击“生成”以生成解决方案。

最终生成的webrtc.lib在D:webrtc-checkoutsrcouttestobj下,可以被应用程序编译调用,同时生成很多测试可执行程序。

注:这里的内容总结自Google官网:AOSP编译内核。 编译完成后,省砖的部分参考了其他大鳄的文章。 文章最后提供了上传到CSDN的msm内核和Aarch64gcc工具的下载链接。 如果不想从官网下载,可以直接使用该资源。

一、简介 1、环境

手机:像素

安卓版本:8.1.0

内核版本:3.18.70-g520f6eb

Ubuntu编译内核:20.04.2

2. 编译内核流程概述

简单分为以下几个过程:

(1)下载源码并拉取对应分支的源码;

(2)在Ubuntu中配置编译所需的环境(主要是aarch64-linux-android-gcc安装);

(3)按照google官网的步骤编译;

(4)将内核刷入手机。

2. 编译过程

官网给出了一个编译案例,是hikey版本。 本文测试机为pixel,需要与pixel和hikey进行对比下载编译android源码,然后进行相应的修改。

Google官网上给出了一个表格,列出了内核源代码和二进制文件的名称和位置,方便我们选择内核。 这里我们只复制了hikeyy、sailfish和hammerhead版本,以便于比较:

设备二进制文件所在位置 源代码所在位置 编译配置

旗鱼

设备/谷歌/marlin-内核

内核/MSM

marlin_defconfig

远足

设备/linaro/hikey-内核

内核/hikey-linaro

远足定义配置

锤头鲨

设备/lge/hammerhead-kernel

内核/MSM

锤头定义配置

hikey的编译过程如下:

export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-android-
cd hikey-linaro
git checkout -b android-hikey-linaro-4.1 origin/android-hikey-linaro-4.1
make hikey_defconfig
make

后续的pull分支和编译代码会参考hikey的编译过程。

1.下载内核源码

您需要编译并安装 msm 内核。 可以在官网查看,如下:

# msm 项目包含适用于 ADP1、ADP2、Nexus One、Nexus 4、Nexus 5、Nexus 6、Nexus 5X、Nexus 6P、Nexus 7 (2013)、Pixel 和 Pixel XL 的源代码,可用作在 Qualcomm MSM 芯片组上开展相关工作的着手点。
git clone https://android.googlesource.com/kernel/msm

下载内核源码不能直接通过上述命令下载,需要翻墙或者从清华大学源、科大源或者其他国外源下载。 我从vultr订购了一个美国vps,使用命令行登录,然后使用上面的git命令下载源代码,然后压缩打包并发回本地(当我尝试下载一个1G的vps时显存,会报显存不够,后来用了4G显存的vps下载,下载打包发回来后,把vps删除了,避免再收费,vps上的下载是速度很快,但是返回本地很慢)。 下载完成后,拉取分支代码的过程可以在本地完成,这个过程不需要翻墙。

2.拉取对应手机对应的代码分支

第一个问题是需要拉取哪个分支。 官网拉取如下,分支为“origin/android-hikey-linaro-4.1”:

git checkout -b android-hikey-linaro-4.1 origin/android-hikey-linaro-4.1

(1)通过手机型号和系统版本选择需要的代码分支

通过 gitbranch -a 可以查看所有分支,但是由于分支太多,无法一次性显示出来,所以可以使用命令 gitbranch -a >branches.txt,然后从文件中查看所有分支.txt,或过滤器以查看各个分支。

因为sailfish对应的二进制文件位置是device/google/marlin-kernel,所以使用marlin来过滤分支。 另外,由于使用的Android源码版本是8,即oreo,所以有理由相信我们需要拉取的分支是下面包含字符串“marlin-3.18-oreo”的分支。

git branch -a > branches.txt
cat branches.txt | grep marlin
  remotes/origin/android-msm-marlin-3.18-android10
  ...
  remotes/origin/android-msm-marlin-3.18-o-mr1-preview1
  remotes/origin/android-msm-marlin-3.18-o-preview-1
  remotes/origin/android-msm-marlin-3.18-o-preview-2
  remotes/origin/android-msm-marlin-3.18-o-preview-3
  remotes/origin/android-msm-marlin-3.18-o-preview-4
  remotes/origin/android-msm-marlin-3.18-oreo
  remotes/origin/android-msm-marlin-3.18-oreo-m2
  remotes/origin/android-msm-marlin-3.18-oreo-m4
  remotes/origin/android-msm-marlin-3.18-oreo-mr1-preview2
  remotes/origin/android-msm-marlin-3.18-oreo-r3
  remotes/origin/android-msm-marlin-3.18-oreo-r6
  remotes/origin/android-msm-marlin-3.18-p-preview-1
  remotes/origin/android-msm-marlin-3.18-p-preview-2
  ...

(2)从设备信息中找到需要的代码分支

另外,通过当前手机上的内核版本号拉取同一分支的代码。 首先是找到当前手机的内核版本。 Google官网提供的方法如下:

dd if=kernel bs=1 skip=$(LC_ALL=C grep -a -b -o $'x1fx8bx08x00x00x00x00x00' kernel | cut -d ':' -f 1) | zgrep -a 'Linux version'
# 对于 Nexus 5 (hammerhead),请运行以下命令:
dd if=zImage-dtb bs=1 skip=$(LC_ALL=C od -Ad -x -w2 zImage-dtb | grep 8b1f | cut -d ' ' -f1 | head -1) | zgrep -a 'Linux version'

但运行上述命令时,可能会因为缺少个别命令而无法获取内核版本。 所以可以这样使用:

cat /proc/version
Linux version 3.18.52-gf69ee35-dirty (tom@ubuntu) (gcc version 4.9.x 20150123 (prerelease) (GCC) ) #2 SMP PREEMPT Tue Nov 19 04:50:45 PST 2019
# 3.18.52-gf69ee35-dirty 便是当前的内核版本

当然,你也可以通过查找手机设置来获取内核版本信息。

此时可以通过内核版本信息中的“f69ee35”检索分支,如下:

git checkout f69ee35

也可以使用下面的命令找到对应的分支(当天运行命令时间比较长,比较慢),然后下载:

git branch -r --contains f69ee35

命令结果如下:

  ...
  origin/android-msm-marlin-3.18-o-mr1-preview1
  origin/android-msm-marlin-3.18-oreo
  origin/android-msm-marlin-3.18-oreo-m2
  origin/android-msm-marlin-3.18-oreo-m4
  origin/android-msm-marlin-3.18-oreo-mr1-preview2
  origin/android-msm-marlin-3.18-oreo-r3
  ...

当找到并确定某个分支后,通过类似下面的命令将远程分支拉取到本地:

git checkout -b android-hikey-linaro-4.1 origin/android-hikey-linaro-4.1
# 如:
git checkout -b android-msm-marlin-3.18-oreo origin/android-msm-marlin-3.18-oreo

3.下载并配置aarch64-linux-android-gcc进行交叉编译

如果你已经下载了Android源码,该工具包含在prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9下,你可以直接使用或者复制下来使用。 如果您还没有下载Android源代码,可以从北京大学或其他来源下载。

编译命令如下:

export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-android-
export PATH=$PATH:/***/aarch64/aarch64-linux-android-4.9/bin # 配置交叉编译链工具的环境变量,这里是64位的工具,如果32位,则需配置32位的工具
cd msm
git checkout -b android-msm-marlin-3.18-oreo origin/android-msm-marlin-3.18-oreo # 如果已经拉取过分支,这一步可以跳过,也根据设备及Android系统版本拉取相应的其它分支
make marlin_defconfig  # marlin_defconfig 是从 官网上查到。对比 hikey 的 hikey_defconfig 可知是salfish对应的是marlin_defconfig
make #也可以用多线程跑,如 make -j8  ,线程数可随Ubuntu系统的线程数更改

  MODPOST 0 modules
  DTC     arch/arm64/boot/dts/htc/msm8996pro-htc_sailfish-xa.dtb
  DTC     arch/arm64/boot/dts/htc/msm8996pro-v1.1-htc_marlin-xd.dtb
  DTC     arch/arm64/boot/dts/htc/msm8996pro-htc_marlin-xc.dtb
  DTC     arch/arm64/boot/dts/htc/msm8996-v3-htc_t50-xa.dtb
  DTC     arch/arm64/boot/dts/htc/msm8996-v3-htc_sailfish-xb.dtb
  DTC     arch/arm64/boot/dts/htc/msm8996-v3-htc_t50-xb.dtb
  DTC     arch/arm64/boot/dts/htc/msm8996pro-htc_sailfish-xb.dtb
  DTC     arch/arm64/boot/dts/htc/msm8996pro-htc_marlin-a.dtb
  DTC     arch/arm64/boot/dts/htc/msm8996pro-v1.1-htc_sailfish-xd.dtb
  DTC     arch/arm64/boot/dts/htc/msm8996-v3-htc_t50-xc.dtb
  DTC     arch/arm64/boot/dts/htc/msm8996pro-v1.1-htc_marlin-xc.dtb
  DTC     arch/arm64/boot/dts/htc/msm8996pro-htc_marlin-xa.dtb
  DTC     arch/arm64/boot/dts/htc/msm8996pro-htc_sailfish-xc.dtb
  LZ4     arch/arm64/boot/Image.lz4
  CAT     arch/arm64/boot/Image.lz4-dtb  # arch/arm64/boot/Image.lz4-dtb 可最终用来刷机,但不能直接刷机,还需要编译一下

4.对编译后的镜像进行进一步处理并保存砖块

官网也给出了处理方法,如下:

镜像输出到arch/arm64/boot/Image目录下; 内核二进制文件输出到 arch/arm64/boot/dts/hisilicon/hi6220-hikey.dtb 文件。 请将Image目录和hi6220-hikey.dtb文件复制到hikey-kernel目录中。

上述第一种方法的意思是用Android源码中预设的内核文件替换编译好的arch/arm64/boot/Image.lz4-dtb,然后编译Android源码。 预设的内核镜像位置类似:android -8.0.0_r1/device/lge/bullhead-kernel/下载编译android源码,不同的设备存储位置不同,但通过内核文件名不难找到。 您可以在使用 make bootimage (或任何其他编译启动映像的 make 命令行)时添加 TARGET_PREBUILT_KERNEL 变量。 所有设备都支持此变量,因为它是通过 device/common/populate-new-device.sh 设置的。 例如:导出 TARGET_PREBUILT_KERNEL=$your_kernel_path/arch/arm/boot/zImage-dtb 。

方法是将编译好的Image.lz4-dtb存放在某个位置,然后设置为环境变量,然后通过make bootimage编译得到boot.img。 boot.img并通过fastboot命令保存brick。 喜欢:

source build/envsetup.sh
lunch 23
export TARGET_PREBUILT_KERNEL=***/Image.lz4-dtb
make bootimage

之后正常刷boot.img,或者刷全机。

这里是用第二种方法进一步处理Image.lz4-dtb,然后救砖。 刷机编译前后的内核版本截图如下(编译版本通常包含内核编译时间,说明刷机成功):

网上也可以找到方法,可以先从手机导入boot.img,然后用工具替换boot.img中的zImage文件。

三、总结

网上有很多文章介绍如何编译和烧录内核,但我个人认为这无非是从官网AOSP编译内核的参考和总结,所以我个人认为首先要看的是谷歌官方文档。 如果您有任何疑问,请搜索并查看其他人的 Summarize 文档。 如有不对的地方,欢迎批评和原谅。

msm内核代码和Aarch64gcc工具上传到:

android-msm-kernel-code-and-aarch64gcc-multi.zip.001

android-msm-kernel-code-and-aarch64gcc-multi.zip.002

android-msm-kernel-code-and-aarch64gcc-multi.zip.003

代码占用空间较大,压缩时分为三个包。 如果需要,将这三个包下载到同一目录下并解压。

参考

AOSP编译内核

3、编译Android系统内核并救砖(修改反调试标志位)

Android系统编译之内核编译

android内核源码编译救砖

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 webrtc 源码编译-轻松下载并编译最新的webrtc源码 https://www.wkzy.net/game/127351.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务