从源码到镜像:手把手教你编译Android模拟器系统固件

构建Android模拟器系统运行镜像(系统固件) 从其他镜像目录(如android-sdk\system-images\android-33\default\x86_64)移动一个package.xml过去。我们需要通过下面的命令设置环境,选择要编译的目标product并启动编译过程。可以启动http server(如:python -m http.server 8888),使用repo-sys-img.xml部署镜像源,此处不详细介绍。要想通过emulator命令启动我们编译好的系统镜像,需要将镜像打包并部署。的源码,可以通过下面的命令。 阅读详情

1. 环境准备:搭建你的“Android源码厨房”

想自己动手编译一个Android模拟器的系统固件,听起来是不是挺酷的?这就像你想做一道顶级大餐,首先得有个功能齐全的厨房。编译Android源码这个“大餐”,对“厨房”的要求可不低,咱们得先把灶台、锅碗瓢盆都准备好。

我刚开始折腾的时候,第一件事就是检查我的电脑配置。Android源码的编译是个资源消耗大户,尤其是内存和硬盘。我强烈建议你的机器至少要有16GB的内存,如果能有32GB或以上,那编译过程会顺畅很多,不会动不动就卡死。硬盘空间更是关键,光是下载源码就需要至少150GB的可用空间,而编译过程中产生的中间文件和最终的镜像文件,还会再占用几十到上百GB。所以,一块500GB以上的固态硬盘(SSD)是理想选择,机械硬盘的编译速度会让你等到怀疑人生。处理器嘛,核心越多越好,现在主流的8核、16线程的CPU能大大缩短编译时间。

操作系统方面,官方推荐的是Ubuntu LTS版本,比如20.04或22.04。我实测下来,在Ubuntu上遇到奇怪问题的概率最小,社区支持也最完善。如果你用Windows,可以通过WSL2(Windows Subsystem for Linux)来搭建Ubuntu环境,这也是一个可行的路子,但性能会有一些损耗,而且某些涉及硬件的操作可能会受限。至于macOS,理论上也可以,但需要处理更多依赖库的兼容性问题,对新手不太友好。

接下来就是安装一大堆的依赖包。这些依赖包就像是做菜需要的各种调料,缺一不可。你可以一次性用下面这条命令来安装(针对Ubuntu 22.04):

sudo apt-get update
sudo apt-get install -y git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig python3 openjdk-11-jdk

注意看,这里指定了openjdk-11-jdk。Android源码的编译对Java版本有严格要求,不同版本的Android源码需要的Java版本可能不同。比如Android 12(S)及更早版本通常需要Java 8,而Android 13(T)及之后版本则需要Java 11或17。你一定要根据你打算编译的Android版本,去官方文档确认所需的Java版本,装错了会导致编译失败。我就在这上面栽过跟头,编译到一半报错,排查了半天才发现是Java版本不对。

最后,我们还需要安装一个至关重要的工具:repo。它不是“仓库”的意思,而是Google专门为管理Android这种超大型项目(由数百个Git仓库组成)而开发的脚本工具。你可以把它想象成一个超级项目经理,能帮你一次性同步所有需要的代码仓库。安装命令很简单:

mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

然后,你需要把~/bin这个目录添加到系统的PATH环境变量里,这样在任何位置都能直接运行repo命令了。通常是在你的~/.bashrc或~/.zshrc文件末尾加上一行:export PATH=~/bin:$PATH,然后执行source ~/.bashrc让它生效。

做完这些,你的“厨房”就算初步搭建好了。接下来,我们就可以去“采购”最核心的食材——Android源代码了。

1.1 搞定网络与镜像源:绕过下载的“老大难”

下载Android源码是新手遇到的第一个,也可能是最大的一个拦路虎。因为源码仓库默认托管在Google的服务器上,在国内直接访问速度慢且不稳定,经常断线,导致repo sync命令失败。

别担心,我们完全可以使用国内的镜像源,速度飞快。国内高校和机构提供了非常棒的AOSP(Android Open Source Project)镜像,最常用的是清华大学和北京外国语大学的镜像站。这里我以清华大学镜像站为例,手把手教你配置。

首先,我们需要配置repo工具本身使用的镜像源。编辑或新建一个环境变量配置文件:

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

同样,把这行代码加到你的~/.bashrc文件里并source一下。这样,repo这个工具脚本就会从国内镜像下载更新了。

接下来是重头戏:在初始化源码仓库时,指定使用国内镜像。假设我们要下载Android 13(Tiramisu)的源码,对应的分支可能是android-13.0.0_rXX。命令如下:

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_rXX

看到没?我们把Google的地址 https://android.googlesource.com/platform/manifest 换成了清华大学的镜像地址。-b 后面跟的就是你想要的具体分支标签。你可以在Android官方源码标记网站或镜像站的页面里找到所有可用的分支名。

初始化完成后,就是漫长的同步代码过程:

repo sync -c -j8

这里的 -c 参数表示只同步当前分支的代码,可以节省一些时间和空间。-j8 表示用8个线程并行下载,你可以根据你的网络和CPU情况调整这个数字,比如-j16。这个过程视网速而定,可能需要几个小时。如果中途断线了,别慌,直接重新执行同样的repo sync命令,它会自动续传,非常智能。

我个人的经验是,最好在晚上睡觉前开始同步,第二天早上起来就差不多了。同步完成后,你的目录下会出现一个巨大的aosp(或者你命名的)文件夹,里面就是完整的Android系统源代码了,足足有几十个GB。走到这一步,你已经成功了一大半!

2. 源码编译:启动你的“构建流水线”

代码下载完毕,我们正式进入最核心的编译环节。这个过程就像把采购来的生鲜食材,通过一道道工序加工成美味的菜肴。Android的编译系统(主要是Soong和Bazel)非常强大,但也需要我们给出正确的指令。

首先,我们需要“激活”编译环境。进入你的源码根目录,执行:

source build/envsetup.sh

这条命令会向当前终端会话注入一大堆有用的函数和变量,比如后面要用到的lunch、m、mm等。你可以把它理解为启动了整个编译工厂的总电源和控制面板。

接下来是关键一步:选择编译目标。我们是要编译给模拟器用的系统镜像,所以对应的“产品”(product)名称是固定的格式:sdk_phone_<架构>。模拟器支持的架构主要有:

  • x86: 32位Intel/AMD CPU
  • x86_64: 64位Intel/AMD CPU(目前最常用)
  • arm: 32位ARM CPU(已较少使用)
  • arm64: 64位ARM CPU(用于测试ARM原生应用)

对于大多数在PC上做开发的场景,选择x86_64是最合适的,因为可以利用CPU的硬件虚拟化加速(Intel HAXM或AMD SVM),运行速度极快。选择目标的命令是:

lunch sdk_phone_x86_64

执行后,终端会输出一系列环境变量,显示你当前选择的目标设备、编译类型(通常是eng工程师版本)等信息。确认无误后,就可以开始“烧火做饭”了——执行编译命令:

make -j$(nproc)

这里 $(nproc) 会自动获取你CPU的核心数,并用这个数字来启动并行编译任务,最大化利用硬件性能。比如你是16核的CPU,就相当于make -j16。编译是整个过程中最耗时的一步,第一次编译可能需要2到6个小时不等,取决于你的机器性能。期间CPU风扇会狂转,这是正常的。

2.1 解读编译输出与常见问题

编译开始后,终端会疯狂刷屏。别被这些信息吓到,我们只需要关注几个关键点。编译系统会显示一个进度百分比,比如 [ 15% 5210/34521],告诉你总体进度。只要这个数字在稳步增长,没有红色的error字样,就基本没问题。

我遇到过几个典型问题,这里分享给你:

  1. 内存不足(Out of memory):这是最常见的错误。编译到后期,链接器等组件会消耗巨量内存。如果报错,尝试减少并行任务数,比如用 make -j8 甚至 make -j4。最根本的解决办法还是增加物理内存或创建足够大的交换分区(swap space)。
  2. Java版本错误:编译中途报错,提示某些Java类或方法找不到。请务必回头检查你的Java版本是否符合源码要求。使用 java -version 确认。
  3. 依赖缺失:虽然我们一开始安装了很多包,但偶尔还是会漏掉一两个。仔细阅读错误信息,它通常会告诉你缺少哪个.so库或哪个工具,用apt-get install把它补上就行。
  4. 磁盘空间不足:编译过程中out目录会急剧膨胀。务必保证有充足的剩余空间(建议100GB以上)。

当编译最终成功时,你会看到令人振奋的提示:

#### build completed successfully (02:15:38 (hh:mm:ss)) ####

恭喜!系统固件已经新鲜出炉了。所有的镜像文件都生成在 out/target/product/emulator_x86_64/ 目录下。对我们最重要的几个文件是:

  • system.img: 核心系统镜像。
  • vendor.img: 厂商相关镜像。
  • ramdisk.img: 内存磁盘镜像,用于初始化启动。
  • userdata.img: 用户数据分区镜像。
  • kernel-ranchu: 模拟器专用的内核文件。

现在,你已经拥有了一个完全由自己编译出来的Android系统。你可以直接用源码目录下的emulator命令来启动它试试看:

emulator -verbose -show-kernel

如果一切正常,你应该能看到模拟器窗口弹出,并启动你刚刚编译的系统。这种成就感,是直接用现成镜像无法比拟的。

3. 打包与部署:让你的镜像“流通”起来

自己编译的镜像,除了自己用,可能还想分享给团队的同事测试,或者集成到持续集成(CI)流程中。这就需要我们把编译产出物打包成一个标准格式,方便分发和使用。

Android SDK工具链为我们提供了专门的打包命令。在编译成功的源码根目录下,执行:

make emu_img_zip

这个命令会启动一个相对较快的打包流程(因为它不需要重新编译,只是打包已有文件)。打包完成后,你会在 out/target/product/emulator_x86_64/ 目录下找到一个名字类似 sdk-repo-linux-system-images-eng.[你的用户名].zip 的压缩包。这个包就是标准的AVD系统映像包。

解压这个ZIP包,你会发现里面有一个以架构命名的文件夹(如x86_64),文件夹里包含了所有模拟器运行所需的镜像文件(system.img, vendor.img, kernel-ranchu等),以及一个重要的 package.xml 文件。这个XML文件描述了这个系统镜像的元数据,比如API等级、版本号、ABI(应用二进制接口)等。

3.1 集成到Android Studio的两种实战方法

有了这个ZIP包,怎么才能在大家熟悉的Android Studio里用起来呢?我常用两种方法,一种“正规军”打法,一种“快速部署”打法。

方法一:作为本地SDK组件安装(正规军) 这是最规范的方式,模拟器会把它当作一个标准的系统镜像来管理。

  1. 打开Android Studio,进入 Tools > SDK Manager。
  2. 在 SDK Platforms 选项卡中,点击右下角的 Show Package Details。
  3. 你会看到列表最下方有一个 “Add” 按钮(或者在某些版本是 “Install” 按钮旁的齿轮图标,选择 “SDK Update Sites”)。
  4. 我们需要添加一个本地更新站点。实际上,更直接的方法是:找到你的Android SDK安装目录(通常在 ~/Android/Sdk 或 C:\Users\你的用户名\AppData\Local\Android\Sdk),进入 system-images 目录。
  5. 按照官方镜像的目录结构,新建路径,例如 android-33(对应你的API级别)/my_custom(变体名)/x86_64/,把你ZIP包解压出来的 x86_64 文件夹里的所有内容,拷贝到这个新建的目录下。
  6. 关键一步:从SDK里一个已有的同架构镜像目录(比如 android-33/default/x86_64/)复制一份 package.xml 文件过来,然后用文本编辑器打开,修改其中的 <version> 标签和 <display-name> 标签,使其与你自定义的镜像信息相符,避免冲突。
  7. 重启Android Studio,打开 Tools > AVD Manager,点击 Create Virtual Device。在选择系统镜像的步骤,你应该能在 x86 Images 或 Other Images 选项卡里,看到你自己编译的镜像(名称就是你修改的display-name)了。

方法二:通过命令行直接指定启动(快速部署) 如果你只是想快速测试,或者给脚本调用,这个方法更直接。

  1. 将ZIP包解压到任意你喜欢的目录,例如 ~/my_android_images/x86_64/。
  2. 在Android Studio的AVD Manager里,先任意创建一个虚拟设备(比如选择Pixel 5, API 33),假设设备名是 Pixel5_API33。
  3. 关闭这个AVD。打开终端,使用以下命令,通过 -sysdir 参数指定你自定义镜像的目录来启动它:
emulator @Pixel5_API33 -sysdir ~/my_android_images/x86_64/ -verbose

-verbose 参数会输出详细日志,方便排查问题。第一次启动时,强烈建议加上 -wipe-data 参数,以确保使用全新的数据分区启动,避免与之前AVD的数据冲突。

emulator @Pixel5_API33 -sysdir ~/my_android_images/x86_64/ -wipe-data

这种方法跳过了向SDK注册的步骤,非常灵活,特别适合调试阶段频繁更换不同版本镜像的场景。

4. 进阶与排错:从“能用”到“精通”

当你成功编译并运行起自己的镜像后,可能会不满足于此,想要进行一些定制,或者解决遇到的一些棘手问题。这里我分享几个进阶方向和排错技巧。

定制内核(Kernel):我们之前编译的镜像,使用的是AOSP源码树中预编译好的 kernel-ranchu 或 kernel-qemu。如果你想修改内核配置,或者需要开启某些特定的内核模块,就需要自己编译内核。Android为模拟器维护了一个独立的内核源码仓库(Goldfish内核)。编译它需要另一套环境,大致步骤是:

  1. 新建目录,用 repo 初始化内核仓库(同样建议使用国内镜像)。
  2. 选择与你的Android版本匹配的内核分支(如 common-android13-5.4)。
  3. 执行内核的构建脚本。这个过程比编译整个AOSP要快得多,产出就是新的 kernel-ranchu 文件。用它替换掉镜像目录里的同名文件,再启动模拟器,就运行在你自定义的内核上了。

修改系统属性与预装应用:这是定制系统最常见需求。你可以修改 device/generic/common 或 device/generic/x86_64(针对模拟器)目录下的配置文件,比如 system.prop 来添加系统属性。预装应用则可以将APK放入 vendor 或 system 分区对应的预置目录(如 vendor/app/)下,并编写相应的 Android.mk 或 Android.bp 文件。记得修改后要重新编译 system.img 或 vendor.img,可以只编译特定模块,比如 make snod(快速重新生成system镜像)或单独编译vendor分区。

深入排错日志:当模拟器无法启动,或者启动后行为异常时,日志是你的最佳帮手。

  • 模拟器日志:启动时加上 -verbose 和 -show-kernel 参数,可以在终端看到非常详细的初始化过程和内核日志。
  • Android系统日志(logcat):模拟器启动后,在另一个终端用 adb logcat 命令可以查看实时的系统日志。如果系统启动失败卡在某个阶段,logcat 通常会给出明确的错误原因,比如某个系统服务(Service)崩溃,或权限(SELinux)拒绝。
  • 常见启动失败原因:
    • 镜像架构不匹配:尝试用x86_64的镜像启动一个创建为arm64的AVD。确保 -sysdir 指向的目录架构与AVD创建时选择的架构一致。
    • 文件缺失或损坏:确保 -sysdir 目录下包含了所有必需的镜像文件,特别是 system.img, vendor.img, ramdisk.img 和 kernel-ranchu。
    • SELinux权限问题:如果你对系统做了大量修改,可能会触发SELinux的拒绝(avc: denied)。可以在内核命令行中临时添加 androidboot.selinux=permissive 来设置为宽容模式进行测试,并在日志中收集所有拒绝信息,以便后续编写正确的SELinux策略。

编译自己的Android模拟器固件,是一个从理解到掌控Android系统底层的好方法。虽然过程有些漫长,可能会遇到各种坑,但每一次问题的解决,都会让你对Android系统的认识加深一层。我最开始编译一个镜像要折腾好几天,现在环境搭好了,流程熟了,基本上就是喝杯咖啡等它编译完成的事。这份指南希望能帮你少走些弯路,当你第一次看到印着自己编译日期的系统启动界面时,那种感觉,值了。

android11源码编译及模拟器安装 编译环境为ubuntu 20 编译的android版本为11 该内容大部分是从网上找的,自己一步一步进行的 这里不对网上比较常见的错误进行描述,很容易百度出来 1、下载repo工具 curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > repo chmod a+x repo 2、下载源码 源码库是清华的。 1)下载最新源码 ./repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOS 阅读详情

相关推荐

构建Android模拟器系统运行镜像(系统固件)_android虚拟设备镜像

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

m0_60635321的博客 882

构建Android模拟器系统运行镜像(系统固件(1)

为了做好运维面试路上的助攻手,特整理了上百道。

2401_84138927的博客 1954

Android系统应用开发:模拟器环境搭建与调试技巧

Android系统应用开发涉及调用系统API和修改系统行为,常见于车机系统、定制ROM等场景。传统真机调试效率低下且风险高,而模拟器技术提供了秒级启动、快照恢复等优势。通过Android Studio Emulator,开发者可以使用eng或userdebug版本系统镜像,免root获取adb shell权限,并自由修改system分区。系统应用与普通应用的关键区别在于签名机制,平台签名赋予最高权限等级。在模拟器环境中,开发者可以高效完成系统应用的打包、安装和动态调试,大幅提升车载信息娱乐系统等复杂项目的开

weixin_36250541的博客 851

Ubuntu虚拟机下载Android 13下载源码并编译系统运行模拟器

Android源码编译,用模拟器运行源码,处理硬件虚拟化问题

weixin_53527829的博客 1924

TVBox安卓源码编译指南:从JDK/SDK配置到IDEA项目导入与APK生成

安卓应用开发的核心在于理解其构建系统与工具链。Java开发工具包(JDK)和安卓软件开发工具包(SDK)构成了编译环境的基石,其版本匹配直接决定了项目能否成功构建。通过Gradle这一自动化构建工具,开发者可以管理依赖、编译代码并打包生成APK。掌握环境配置与构建流程,不仅能完成应用的编译与调试,更是进行源码级定制与二次开发的前提。本文以TVBox这一热门开源电视应用为例,详细演示了如何在IntelliJ IDEA中配置JDK与Android SDK,解决Gradle同步与依赖下载问题,并最终实现APK的生

weixin_32520095的博客 368

Android源码编译与烧写实战:从环境搭建到设备部署全流程解析

在嵌入式开发和系统定制领域,编译与烧写是连接软件源码与硬件设备的核心技术环节。编译过程基于构建系统(如AOSP的Soong/Blueprint)将源代码转换为可在特定硬件上执行的二进制镜像,其原理涉及交叉编译工具链、模块依赖解析和镜像打包。这一技术的价值在于实现对操作系统底层的深度控制与定制,例如优化启动流程、预置系统应用或适配专属硬件驱动。典型的应用场景包括为物联网设备、车载娱乐系统或定制化安卓设备打造专属系统镜像。其中,fastboot协议作为通用的刷机工具,通过USB连接在Bootloader模式下完

weixin_33797791的博客 393

构建Android模拟器系统运行镜像(系统固件,请查收

/ 目标文件在out/host/linux-x86/sdk/sdk_phone_x86/sdk-repo-linux-system-images-eng.[username].zip。// 目标文件在out/tarproduct/emulator_x86_64/sdk-repo-linux-system-images-eng.[username].zip。// 目标文件repo-sys-img.xml 用来部署镜像源。

2401_84138927的博客 803

Android源码编译与烧写全流程实战指南:从环境搭建到设备部署

Android系统构建是移动开发领域的核心技术环节,涉及从源代码到可运行系统的完整转换过程。其原理基于模块化编译和镜像打包,通过构建系统(如Soong/Bazel)将Java、C++及资源文件整合为可分发的系统镜像。这一技术的核心价值在于实现系统级定制、性能优化及硬件适配,广泛应用于ROM定制、设备驱动开发和系统级功能扩展等场景。本文聚焦于Android源码编译与烧写全流程,详细解析环境配置、源码同步、构建参数选择等关键步骤,并针对fastboot工具使用、镜像烧录及设备驱动集成等工程实践提供解决方案,帮助

weixin_30509393的博客 416

构建Android模拟器系统运行镜像(系统固件)_android虚拟设备镜像(1)

/ 目标文件在out/host/linux-x86/sdk/sdk_phone_x86/sdk-repo-linux-system-images-eng.[username].zip。// 目标文件在out/tarproduct/emulator_x86_64/sdk-repo-linux-system-images-eng.[username].zip。// 目标文件repo-sys-img.xml 用来部署镜像源。

2401_84558314的博客 951

杭电计算机组成原理课程设计-实验七-寄存器堆设计实验

寄存器堆实验实验原理实验内容模块功能说明模块逻辑引脚图寄存器堆模块代码REG模块测试用例REG-ALU测试用例实验结果记录 寄存器堆实验结果及分析ALU_REG运算器模块实验结果及分析探索与思考 实验原理   32×32位的寄存器堆模块示意图如图所示,含有32个寄存器,每个寄存器32位。该寄存器堆具有A和B两个读端口,分别由 5 位的寄存器编号 R_Addr_A 和 R_Addr_B 来寻址 2 个寄存器,读出的数据则由 R_Data_A(32 位)和R_Data_B(32 位)输出。读访问时,没有使能或者

HDU-整蛊小子-⏰☂️/蚂蚁集团研发工程师 1万+

19-5 ACC 自适应巡航控制系统需求

本专题由深圳季连AIgraphX李博及团队出品,主要讲解ACC自适应巡航控制系统的开发与仿真测试。具体说来,包括ACC标准/法规分析、系统需求、系统架构、软件需求、软件架构、算法建模、验证场景分析、仿真实验搭建等内容。 本节主要讲ACC系统需求。

AIgraphX 1089

Android AOSP 编译并烧录到Google Pixel4XL

AOSP(Android Open Source Project)是Android系统的开源版本,任何人都可以下载、编译和修改。手头上有一台Pixel 4XL,尝试编译AOSP并将其烧录到的设备上。

ansondroider的博客 1899

C#利用S7netplus实现西门子S7_200_SMART PLC高效点位监控与操作

本文详细介绍了如何使用C#结合S7netplus开源库高效监控与操作西门子S7-200 SMART PLC的点位。内容涵盖从开发环境搭建、建立通信连接,到核心的点位读写、批量数据处理及字节与位数组转换等关键技术,并提供了构建稳定监控程序的架构与避坑指南,帮助开发者快速实现上位机与PLC的稳定数据交互。

rum55的博客 315

服务器自留地实战:用 1Panel 应用商店一键部署 Umami、n8n、Vaultwarden 与 Alist 四大开源应用

> 本文是 Vibe Coding 系列教程「第十四章:云服务器运维与项目部署」的收尾实战篇。当项目已经跑在 VPS 上、域名与 HTTPS 绿锁都已就绪之后,这台服务器还有大量 CPU 与内存余量可以"种点有趣的东西"。读完本文,你将掌握通过 1Panel 应用商店一键安装网站统计(Umami)、自动化工作流(n8n)、密码管理(Vaultwarden/Bitwarden)与统一文件管理(Ali

gitblog_00246的博客 1145

Windows下OpenMBEE项目MMS部署失败经历及改正

在Github里找到了上面的第一份文档,下载了MMS源代码(不知道为什么这个代码跟上面操作克隆得到的MMS代码不一样?好像是因为Gradle的版本问题,我本地之前已经安装过7.6.4的Gradle了,于是我找到gradle-wrapper.properties文件。后面在VScode中运行了一下依然是报这个错误,我在VScode终端直接执行。不知道为什么依然没什么用。打开“Windows PowerShell”。(如果是第一次运行它,将看到更长的输出)导航到要克隆存储库的文件夹,例如,

Yo_lan_da的博客 1869

xilinx原语及bank简介

图8是HP bank与HR bank的IO模块,其中PAD是FPGA的金属管脚,IOB是输入、输出引脚的控制模块。此时使用原语就可以只调用需要的组件,不需要去考虑其余组件参数设置,就方便很多,借助此次机会就对IDDR、ODDR、IDELAYE2、ODELAYE2、IDELAYCRTL、ISERDESE、OSERDESE等几个原语做了简要了解,并对原语的各个模式进行了仿真,本文最初是介绍IDDR的,但在介绍IDDR这些原语之前,还需要了解一下7系列FPGA bank的分类和区别,所以就有了本文。

qq_43416206的博客 413

yuzu Switch 模拟器快速上手:装好系统到游戏跑通的两档调优指南

yuzu 是一个开源的任天堂 Switch 模拟器,把 Switch 游戏搬到 Windows、Linux 和安卓上运行。这篇文章面向第一次装它的人:跟着走完安装、点亮第一局,再按显卡档位把画面调顺。 ## 能不能跑:兼容性速览 | 平台 | 最低硬件门槛 | 备注 | |------|--------------|------| | Windows 10/11(64 位) | 四核 CPU、

gitblog_00695的博客 844

VMware ESXi 系统里创建虚拟机,虚拟磁盘日志损坏,如何或者把数据备份?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1639

android s905 编译_自己动手编译Android源码(超详细)

在Android Studio代码调试一文中,简单的介绍了代码调试的一些技巧.现在我们来谈谈android源码编译的一些事.(俺认为,作为android developer人人都应该有一份自己Android源码,这样我们就可以随时对自己有疑惑的地方通过亲手调试来加强理解).本文使用最新的Ubuntu 16.04,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:sudo apt...

weixin_39553272的博客 1099

比NTP还牛逼的时间同步协议:1588v2,亚微秒级!

1588v2,又称为Precision Time Protocol Version 2,即精密时间协议的第二版本,或称为PTPv2,是一种精密时间同步协议标准,旨在实现网络中设备之间的高精度时间同步。该协议由IEEE标准组织发布,并在网络测量和控制系统中得到广泛应用。1588v2的主要目的是在计算机网络中提供高度准确的时间同步。它可用于确保不同设备之间的时钟同步,从而协调它们的操作。这对于需要协同工作的系统、无线通信基站等具有关键性的应用非常重要。

网络技术联盟站 4281

CANbus收发器TJA1051T/3/1J应用原理图设计

该收发器是为汽车工业中的高速CAN应用而设计的,为(一个带有)CAN协议控制器的微控制器)提供差分传输和接收能力。它提供了改进的电磁兼容性(EMC)和静电放电(ESD)性能,还具有:当电源电压关闭时,TJA1051T/3和TJA1051TK/3可以直接与电源电压从3V到5V的微控制器接口。这种实现能够在CAN FD快速阶段以高达5 Mbit/s的数据速率进行可靠的通信。TJA1051T/3和TJA1051TK/3上的VIO输入允许直接连接3 V至5 V微控制器(分别提供SO8和极小的HVSON8封装)

zhusl6688的博客 3597

yuzu Switch模拟器上手教程:4步从固件密钥到启动

想在工作日晚间把买过的Switch游戏拿出来玩,掌机却已没电,或者你只想用大屏和手柄来操作,yuzu模拟器可以接手这件事:它在电脑上运行Switch游戏文件,覆盖 Windows、Linux 与 Android,且完全开源。 ## 📦 项目速览:这个模拟器能做什么 yuzu 是由 3DS 模拟器 Citra 原班成员发起的开源 Nintendo Switch 模拟器,用 C++ 编写,官方持

gitblog_00016的博客 336

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

yuzu Switch 模拟器:10 分钟打通密钥、固件与首次运行

yuzu 是一款免费开源的任天堂 Switch 模拟器,它不运行 Switch 硬件,而是把游戏的 ARM 指令逐行"翻译"成你电脑的指令,再交给显卡重新算出画面。这篇文章带你按顺序跨过密钥文件 prod.keys、系统固件、游戏镜像三道坎,让第一次运行不再卡在报错页。 ## 动手前:花 2 分钟确认门槛 先说结论:集显老机器想稳 60 帧 3A 的,别硬上;硬件达标的人,卡住你的通常不是 y

gitblog_01159的博客 321

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: 动态SLAM中的语义分割与并行计算优化策略
下一篇: 企业无公网IP困境破解:三大内网穿透方案实战评测(推荐)
vim8coder
博客等级 码龄1天 0粉丝 1693原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值