emulator调试日志: driver篇

--------- driver篇 ---------------
driver一般通过erl_ddll.erl中的load_driver/2函数来实现.
load_driver(Path, Driver) ->
    do_load_driver(Path, Driver, [{driver_options,[kill_ports]}]).
...
do_load_driver(Path, Driver, DriverFlags) ->
    case erl_ddll:try_load(Path, Driver,[{monitor,pending_driver}]++DriverFlags) of
   
注意其中try_load的参数, OptionList为[{monitor,pending_driver}]++DriverFlags, 即 [{monitor,pending_driver}, {driver_options, [kill_ports]}].
详细意义见otp文档的erl_ddll:try_load/3注释.
        ...
由此可以看出最后还是委托到erl_ddll:try_load/3函数. 这个函数由bif实现, 具体实现在emulator/beam/erl_bif_ddll.c:139行
/*
 *    try_load(Path, Name, OptionList) -> {ok,Status} |
 *                                        {ok, PendingStatus, Ref} |
 *                                        {error, ErrorDesc}
 *       Path = Name = string() | atom()
 *     OptionList = [ Option ]
 *     Option = {driver_options, DriverOptionList} |
 *                {monitor,MonitorOption} |
 *                {reload, ReloadOption}
 *     DriverOptionList = [ DriverOption ]
 *     DriverOption = kill_ports
 *     MonitorOption = pending_driver | pending
 *     ReloadOption = pending_driver | pending
 *     Status = loaded | already_loaded | PendingStatus
 *     PendingStatus = pending_driver | pending_process
 *     Ref = ref()
 *     ErrorDesc = ErrorAtom | OpaqueError
 *     ErrorAtom = linked_in_driver | inconsistent |
 *                 permanent | pending
 */
/*
 * Try to load. If the driver is OK, add as LOADED.  If the driver is
 * UNLOAD, possibly change to reload and add as LOADED,
 * there should be no other
 * LOADED tagged pid's.  If the driver is RELOAD then add/increment as
 * LOADED (should be some LOADED pid).  If the driver is not present,
 * really load and add as LOADED {ok,loaded} {ok,pending_driver}
 * {error, permanent} {error,load_error()}
 */
BIF_RETTYPE erl_ddll_try_load_3(Process *p, Eterm path_term,
                Eterm name_term, Eterm options)
以上是定义.
步骤:
    1. 处理options列表, 获取driver名称以及路径.
    2. if ((de = lookup_driver(name)) != NULL) {...} 判断是否存在此driver,如果存在则reload它.
    3.
        3.1 加载driver .
               res = load_driver_entry(&dh, path, name)
                    res = do_load_driver_entry(dh, path, name)
                        res =  erts_sys_ddll_open(path, &(dh->handle)))
                        此函数通过dlopen调用了一个动态链接库*.so,返回操作此so文件的句柄handle. 以example1_drv为例,此处就是/root/erlang/book_code/src/ports/example1_drv.so
        3.2 初始化driver
                           res = erts_sys_ddll_load_driver_init(dh->handle,
                                  &init_handle)
                               res = erts_sys_ddll_sym(handle, "driver_init", &fn)
                               此函数通过 dlsym(handle, func_name)取得了so文件的driver_init函数的函数指针,在此例中即取得了example_lid.c中的
                                   DRIVER_INIT(example_drv) /* must match name in driver_entry */
                                {
                                    return &example_driver_entry;
                                }
                            此函数的指针.
        3.3 调用driver_init函数
                        dp = erts_sys_ddll_call_init(init_handle);
                    在此即返回了&example_driver_entry这个driver_entry结构体,赋给dp. 然后就可以用dp来干活啦.
        3.4 判断driver版本后,把driver加入到driver_list链表中去.
                        erts_add_driver_entry(dp,1); /* io.c */
    4.把当前进程proc加到driver handle的属性中,并重新分配一下堆空间后,再清理些用到的临时资源.返回.

说白了,driver的工作就是调一个*.so,然后找到这个so中的driver_init函数,调用它. 调用后,会返回一driver_entry结构体的实例. 这个结构体定义了driver的启动,停止,处理port command的函数指针, driver名称,超时时间, i/o操作等各种东西.
以后调用driver就是通过这个结构体的属性来指定了.
彻底搞懂Android Emulator Hypervisor Driver:它在Win11上到底干嘛的?为啥总报权限错? 本文深入解析Windows 11下Android Emulator Hypervisor Driver(AEHD)的权限问题,揭示其频繁报错的根本原因及解决方案。通过对比性能数据和技术分析,帮助开发者理解驱动安装的权限需求,并提供多种调试和优化方法,确保Android模拟器在Win11上高效运行。 阅读详情

相关推荐

Win11上Android Studio安装卡在Hypervisor驱动?别慌,跳过它也能正常开发(附完整解决方案)

本文详细介绍了在Windows 11上安装Android Studio时如何绕过Hypervisor驱动安装卡顿问题,提供三步解决方案和替代方案。通过修改安装脚本和手动执行驱动安装,开发者可以高效完成Android Studio的配置,确保开发流程顺畅。

dengliugong3918的博客 445

emulator 启动以及logcat 信息输出

1、启动emulator的同时启动logcat: D:\android-2.3.4_r1>emulator -shell -skin hvga -scale 0.9  -system system.img -sdcard sdcard.img -ramdisk ramdisk.img  -data userdata.img -show-kernel -logcat d V、D、I、W、

Transformer 1369

ADB环境配置与调试全攻略:从零搭建到实战排坑

Android Debug Bridge(ADB)是连接计算机与Android设备的核心调试工具,它通过客户端-服务器-守护进程的架构实现通信。理解其工作原理对于移动应用开发、自动化测试和IoT设备调试至关重要。ADB的价值在于提供了一套完整的命令行工具集,能够实现应用安装卸载、文件传输、日志抓取、性能剖析等关键操作,极大地提升了开发和调试效率。在实际应用场景中,无论是进行日常应用调试、自动化测试脚本编写,还是为IoT设备刷机,一个稳定可靠的ADB环境都是不可或缺的基础。本文聚焦于环境配置这一核心环节,深入

weixin_30475039的博客 390

ADB命令连接模拟器并查看安卓日志(逍遥模拟器、夜神模拟器)

先进入逍遥模拟器安装目录(MEmu文件夹下),如:D:\software\Microvirt\MEmu 在CMD下输入: adb connect 127.0.0.1:21503 连接成功后,再输入 adb logcat -v time 即可实时看到安卓的日志了 如果想把日志保存到文件,则可以这样 adb logcat -v time >.\\logcat.log 如果想清除日志,则...

linxinfa的专栏 1万+

Mali OpenGL ES模拟器实战:从安装配置到跨平台渲染调试

在移动端图形开发中,OpenGL ES作为嵌入式平台的图形API标准,其与桌面OpenGL的差异常导致shader编译和渲染行为不一致。ARM官方提供的Mali OpenGL ES Emulator通过API翻译层,将GLES调用映射为桌面OpenGL指令,模拟Mali驱动行为,为开发者提供贴近真机的API兼容性验证环境。它并非硬件模拟器,不涉及GPU微架构模拟,但能有效暴露shader精度问题、扩展支持差异及EGL上下文创建错误。文章详细介绍了该模拟器在Windows 64位环境下的注册表配置(ICD机制

axfcjwkbi259888707的博客 325

Virtual Serial Port Driver 6.9串口模拟器完整工具包

在现代IT系统开发与调试过程中,串口通信依然扮演着不可替代的角色。随着硬件设备的多样化与开发环境的虚拟化趋势增强,串口模拟器应运而生,成为连接物理世界与虚拟环境的重要桥梁。本章将从串口通信的基础出发,逐步引出串口模拟技术的必要性,并探讨其在多个关键领域的应用价值。串口模拟器(Serial Port Emulator)是一种通过软件模拟真实串口通信行为的工具,能够在没有物理串口设备的情况下,创建虚拟串口对(Virtual COM Port Pair),实现串口通信程序的开发、测试与调试。

weixin_35705784的博客 784

如何查看app的报错日志?(模拟器和真机)

1、下载一个模拟器(市面上流行的都可以) 此次测试模拟器用的是逍遥模拟器 2、下载apk到此电脑中 3、系统设置里面把显示改成手机,然后再重启4、把apk拖曳到模拟器中安装 5、打开apk看下 6、进入模拟器目录下面查看是否有adb 7、在该目录路径下打开cmd 并且输入nox_adb.exe logcat 就可以愉快的查看日志啦 .........

一起来学习叭的博客 1万+

TMS320 C6000 programmer‘s guide

TI C6000系列DSP编程开发指导。包含了从硬件介绍到优化指导等大量信息,适合作为编程者工具书查阅。

emulator调试日志: port篇

------------------ port 篇 ------------- open_port/2这个是由bif实现, 源文件在erl_bif_port.c中, 函数是BIF_RETTYPE open_port_2(BIF_ALIST_2) 其中: #define BIF_RETTYPE Eterm #define BIF_ALIST_2 Process* A__p, Eterm A_1, E...

coderplay的专栏 425

一文详解AUTOSAR COM ComSignal结构体

ComSignalLength指定信号的长度,以字节为单位,影响数据的解析范围和精度。比如车速信号若为UINT16类型,ComSignalLength=16。这里需要注意必须ComSignalLength与ComSignalType匹配(比如FLOAT32类型需配置ComSignalLength=32),超出实际物理值范围时需配置缩放(Scaling)参数。ComSignalType定义信号的物理数据类型,决定如何解析原始字节数据。

menghuyouyou的博客 943

VHDL实战:基于EDA的数字频率计(FREQ)设计与优化

本文详细介绍了使用VHDL语言和EDA工具设计并优化数字频率计(FREQ)的全过程。从核心原理与模块划分入手,深入讲解了时钟分频、测频控制、计数锁存及显示驱动等关键模块的VHDL实现,并提供了从代码编写、功能仿真到综合布局布线的完整EDA实战指南。文章还探讨了测量精度优化、资源权衡及跨时钟域处理等进阶话题,是掌握FPGA数字系统设计的经典案例。

milk8的博客 584

Android Emulator hypervisor driver常见问题排查:STATE: 4 RUNNING状态解读

Android Emulator hypervisor driver(AEHD)是提升Android模拟器性能的关键组件,而STATE: 4 RUNNING状态是其正常运行的重要标志。本文将深入解析这一状态的含义,帮助开发者快速排查相关问题,确保模拟器高效稳定运行。 ## 一、STATE: 4 RUNNING状态的核心含义 STATE: 4 RUNNING状态表示hypervisor驱动已成功

gitblog_00771的博客 531

模拟波束赋形 vs 数字波束赋形:5G天线设计中的成本与性能权衡

本文深入剖析了5G天线设计中模拟波束赋形与数字波束赋形的核心差异,重点探讨了二者在硬件成本、功耗、网络覆盖能力和频谱效率等方面的权衡。文章指出,模拟方案成本低但灵活性有限,数字方案性能强大但代价高昂,而混合波束赋形已成为主流折中方案。决策需紧密结合具体的部署场景、性能要求和总拥有成本进行综合考量。

weixin_28432777的博客 840

Android Emulator hypervisor driver源代码深度解析:从架构设计到关键组件实现

Android Emulator hypervisor driver(AEHD)是一个专为加速Android模拟器性能而设计的Windows内核驱动,通过将Linux KVM(基于内核的虚拟机)技术移植到Windows平台,为Android开发者提供了显著的性能提升。这个**Android Emulator hypervisor driver** 让Android Studio中的模拟器能够直接利

gitblog_00052的博客 1070

DDPG算法实战:用Python一步步实现深度强化学习中的连续动作控制

本文详细介绍了DDPG算法在深度强化学习中的连续动作控制应用,通过Python和PyTorch实现从零构建智能体。内容涵盖环境搭建、网络架构设计、经验回放、OU噪声实现及训练流程优化,帮助开发者掌握DDPG在机械臂控制等场景的核心技术。

weixin_30335575的博客 416

嵌入式系统实战:DroneCAN协议栈移植与避坑指南

本文详细介绍了在嵌入式系统中移植DroneCAN协议栈的完整流程与实战技巧。内容涵盖移植前的准备工作、内存管理优化、CRC校验实现、多帧数据处理及硬件平台适配等关键环节,并以STM32F4为例提供了具体的移植步骤和避坑指南,帮助开发者高效完成DroneCAN在嵌入式设备上的集成与应用。

solidity8miner的博客 548

Android Emulator hypervisor driver深度解析:加速Android模拟器的终极方案 [特殊字符]

**Android Emulator hypervisor driver**(简称AEHD)是Google官方推出的Windows平台Android模拟器硬件加速驱动,它能显著提升Android模拟器的运行性能,让开发者享受接近原生设备的流畅体验。这款驱动通过将Linux KVM虚拟化技术移植到Windows系统,为Android模拟器提供了硬件级别的虚拟化支持。 ## 🔧 什么是Androi

gitblog_00083的博客 375

【Bug已解决】[Bug]: ValueError: No user query found in messages QWEN 3.5 27B VLLM 0.16.0 NIGHTLY 解决方案

用 vLLM 0.16.0 nightly 给发聊天请求时,服务端在处理消息时抛ValueError,请求失败。

博客 409

Android Emulator hypervisor driver 安装避坑全攻略:从零到一给安卓模拟器加速的完整实操手册

你有没有经历过这种时刻:项目马上要验收,Android 模拟器却慢得像在放幻灯片,启动一次要五分钟,应用一打开就卡住,日志里反复出现"x86 emulation currently requires hardware acceleration"的报错。折腾一晚上之后才明白,问题不在电脑配置,而在缺少一个叫 **Android Emulator hypervisor driver**(简称 AEHD

gitblog_00915的博客 170

STM32实战开发(133):基于STM32的智能GPS定位跟踪系统开发

本文详细介绍了如何基于STM32开发一个智能GPS定位跟踪系统。系统使用NEO-6M GPS模块获取实时定位数据,并通过SIM800L GPRS模块将定位信息上传到远程服务器。通过OLED屏幕实时显示位置数据,使用SD卡存储历史轨迹,并提供蜂鸣器报警功能。项目实现了GPS定位数据的获取、解析、存储和传输,为智能定位系统提供了完整的解决方案。

2201_76125393的博客 1643

手把手教你学simulink(26.8)--控制算法场景示例:基于强化学习的无人机姿态稳定控制系统

首先,我们需要定义无人机的姿态稳定控制环境。环境包括无人机的状态(姿态角、角速度等)和动作(电机转速)。我们还需要定义奖励函数,用于评估控制器的表现。matlab深色版本% 定义环境% 定义状态空间% 12个状态变量% 定义动作空间% 电机转速范围奖励函数用于评估控制器的表现。我们可以根据无人机的姿态误差、角速度误差以及控制输入的变化率来设计奖励函数。具体来说,当无人机的姿态接近设定值时,给予正奖励;当姿态误差较大或控制输入变化剧烈时,给予负奖励。matlab深色版本。

MHD0815的博客 496

Appium UiAutomator2 Driver并行测试配置:实现多设备Android自动化测试最佳实践

Appium UiAutomator2 Driver是Android自动化测试的终极解决方案,专门为移动应用测试工程师提供强大的并行测试能力。通过正确的并行测试配置,您可以显著提升测试效率,实现多设备Android自动化测试的最佳实践。本文将详细介绍如何配置Appium UiAutomator2 Driver进行并行测试,帮助您快速掌握多设备测试的核心技巧。 ## 📊 为什么需要并行测试?

gitblog_00835的博客 659

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

RisingWave 系统目录 Schema 迁移实战:基于 sea-orm-migration 的 Migrator CLI 使用与迁移文件编写指南

RisingWave 的元数据(Meta)服务将系统目录(System Catalog)持久化在 SQL 数据库中(默认为 SQLite,也支持 PostgreSQL 与 MySQL),所有编目对象(表、物化视图、源、Sink、用户、Secret 等)的结构都由 `src/meta/model/migration` 目录下的一套迁移文件(Migration)定义。本指南以该目录下的 [README

gitblog_00400的博客 632

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Android开发环境搭建的暗礁:那些SDK管理器不会告诉你的兼容性陷阱

本文深入探讨了AMD处理器与Win11环境下Android模拟器的兼容性问题,提供了从硬件虚拟化检测到权限管理的全面解决方案。特别针对Android Studio和Android Emulator Hypervisor Driver的常见错误代码和配置技巧,帮助开发者高效搭建稳定的开发环境。

weixin_28839601的博客 254

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

移动端开发调试全攻略:从基础到高级技巧

移动端开发调试是确保应用质量的关键环节,涉及设备兼容性、网络环境、性能优化等多方面挑战。调试工具如Chrome DevTools和ADB命令是开发者的利器,能够帮助定位和解决界面渲染、网络请求等常见问题。在混合应用开发中,React Native和Flutter的调试策略各有特点,需要针对不同技术栈采用相应方法。此外,自动化调试脚本和性能分析工具能显著提升调试效率。随着5G和折叠屏设备的普及,调试技术也在不断演进,开发者需掌握最新的调试方案以应对新挑战。

weixin_34375251的博客 359

告别‘CScript’报错!Win10/Win11下Android模拟器驱动安装最全避坑指南

本文详细解析了Win10/Win11系统下Android Emulator驱动安装过程中的常见问题,特别是‘CScript’报错的解决方案。从硬件虚拟化检查到系统权限配置,再到SDK环境修复,提供了一套全面的避坑指南,帮助开发者高效安装Android模拟器驱动,提升开发效率。

weixin_30892889的博客 274
上一篇: 修正Programming Erlang中linked driver实例的小问题
下一篇: proguard是怎样把类的方法连接起来
coderplay
博客等级 码龄19年 6粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值