OpenHarmony适配新的开发板时,启动流程init大概率会出现问题,其为内核直接拉起的第一个用户态进程,问题定位手段只能依赖代码走读和增加调试打印,初始化过程中系统崩溃的问题就更难定位了。如果能使用gdb调试init,会极大的提高定位效率。
本文简单描述了一下L2二次启动的系统如何使用gdb调试init
- 首先将gdb打包到系统镜像中。
./build.sh --product-name=ita260 --gn-args="is_debug=true use_unstripped_as_runtime_outputs=true"
4. 在init挂载好system、vendor等镜像,并将根目录切换到system镜像后,在启动第二阶段init时,切换到shell下,停止init初始化流程,见下图B处。
注意:A处的CloseStdio()需要注释掉
考虑用gdb启动init第二阶段,init绝大部分处理流程都在这一阶段,从这里开始就可以用gdb调试了,init第一阶段处理相对而言流程简单一些,代码走读和调试打印基本就能解决问题。
5. 在init主函数中去掉“不等于进程1就返回的处理”,因为用gdb起init第二阶段时,其进程非1。
6. init进程中不初始化Paramworkspace,前面pid=1的判断,在gdb调试init时条件不成立,所以此处增加判断init名就直接退出的处理。
7. 系统启动,init初始化第一阶段完成后,会停在shell 下,此时使用下述命令启动init第二阶段:gdb --args /bin/init --second-stage为了调试init的子进程,还需要gdb下述命令set follow-fork-mode child
当前gdb调试init方法不适用L0、L1和一次启动的L2系统。
本文章针对OpenHarmony系统在调试init初始化流程时,缺少高效的问题定位手段这一痛点,引入了嵌入式系统开发的主流调试工具-gdb。详细描述了这一方法涉及到的版本编译、适配点修改以及调试命令操作等细节处理,指导开发者提高定位init问题的效率。需要注意,当前gdb调试init方法有局限,不适用L0、L1和一次启动的L2系统。
更多热点文章阅读- 玩转OpenHarmony PID:教你打造两轮平衡车
- 基于SDIO协议的WiFi模块实现指南
- ArkUI框架,更懂程序员的UI信息语法
- 带你玩转OpenHarmony AI:基于Seetaface2的人脸识别
-
带你玩转OpenHarmony AI:打造智能语音子系统
提示:本文由电子发烧友社区发布,转载请注明以上来源。如需社区合作及入群交流,请添加微信EEFans0806,或者发邮箱liuyong@huaqiu.com。
原文标题:OpenHarmony系统使用gdb调试init
文章出处:【微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
电子发烧友
+关注
关注
33文章
552浏览量
33006 -
开源社区
+关注
关注
0文章
94浏览量
451
原文标题:OpenHarmony系统使用gdb调试init
文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
基于ArkTS语言的OpenHarmony APP应用开发:HelloOpenharmony
1、程序简介该程序是基于OpenHarmony标准系统编写的UI应用类:HelloOpenHarmony。本案例是基于API9接口开发。本案例已在OpenHarmony凌蒙派-RK35
ESP32-C3使用命令行GDB调试出现报错的原因?
= 0;void led_init(){ gpio_reset_pin(LED); gpio_set_direction(LED, GPIO_MODE_OUTPUT);}void led_blink
发表于 08-01 07:47
开源鸿蒙 编译OpenHarmony轻量系统QEMU RISC-V版本
本文将介绍如何为QEMU RISC-V虚拟平台构建OpenHarmony轻量系统。得益于QEMU的CPU指令集模拟执行能力,该方法可以在没有开发板的情况下调试和运行OpenHarmony
OpenHarmony之开机优化
OpenHarmony已经支持了Bootchart工具,我们可以直接使用Bootchart工具,Bootchart工具介绍如下:
概述
Bootchart是一个用于系统启动过程性能分析的开源软件工具
发表于 07-01 16:39
使用VSCode调试嵌入式程序:如何切换gdb server
上文小编给大家介绍了一下如何使用VSCode结合cortex-debug插件进行调试的方法。本篇就趁热打铁,进一步深入了解一下如何切换gdb server。让我们可以不仅仅使用JLinkGDBServer进行调试。
arm三个寄存器在gdb调试时的作用
arm三个寄存器在gdb调试时作用 ARM是一种广泛使用的微处理器架构,它广泛应用于移动设备、嵌入式系统和其他高性能计算设备。当我们在使用gdb(GNU
如何使用linux下gdb来调试python程序
如何使用linux下gdb来调试python程序 在Linux下,可以使用GDB(GNU调试器)来调试Python程序。
linux用gdb调试遇到函数调用怎么办?
linux用gdb调试遇到函数调用怎么办? 在Linux上使用GDB调试时,遇到函数调用是一个常见的情况。函数调用可能涉及到多个函数、多个文件,这就需要我们仔细审查代码,理解函数之间的
简述GDB调试器提供的基本功能
GDB是一个功能强大的源代码级调试工具,它提供了多种基本功能,帮助程序员** **更好地理解程序的运行机制和定位问题** **。
启动System Init进入OpenHarmony系统过程分析与适配
1 关键字
启动、Init、产品配置、启动配置
2 简要描述
本文档主要以XX开发版为例分析OpenHarmony系统启动过程、产品配置、启动配置,并举例说明如何配置。
内核加载Init
发表于 01-26 10:04
评论