0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenHarmony系统使用gdb调试init

电子发烧友开源社区 来源:未知 2022-12-26 12:10 次阅读
OpenHarmony适配新的开发板时,启动流程init大概率会出现问题,其为内核直接拉起的第一个用户态进程,问题定位手段只能依赖代码走读和增加调试打印,初始化过程中系统崩溃的问题就更难定位了。如果能使用gdb调试init,会极大的提高定位效率。 本文简单描述了一下L2二次启动的系统如何使用gdb调试init
  1. 首先将gdb打包到系统镜像中。
Init不正常的情况下,系统无法正常启动工作,无法使用hdc工具加载gdb工具,所以直接在制做镜像时,将其打包到系统镜像bin目录下。如下图:985906b2-84d2-11ed-bfe3-dac502259ad0.png  2. 调试版本镜像带符号,需要修改镜像配置文件,改大其大小限制。尤其是system.img,编译失败时不会提示实际镜像大小,需要修改到5G以上。987359cc-84d2-11ed-bfe3-dac502259ad0.png  3.编译调试版本,打开版本调试开关
./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处。 988ad886-84d2-11ed-bfe3-dac502259ad0.png注意:A处的CloseStdio()需要注释掉 考虑用gdb启动init第二阶段,init绝大部分处理流程都在这一阶段,从这里开始就可以用gdb调试了,init第一阶段处理相对而言流程简单一些,代码走读和调试打印基本就能解决问题。 5. 在init主函数中去掉“不等于进程1就返回的处理”,因为用gdb起init第二阶段时,其进程非1。989b04cc-84d2-11ed-bfe3-dac502259ad0.png  6. init进程中不初始化Paramworkspace,前面pid=1的判断,在gdb调试init时条件不成立,所以此处增加判断init名就直接退出的处理。98b536f8-84d2-11ed-bfe3-dac502259ad0.png  7. 系统启动,init初始化第一阶段完成后,会停在shell 下,此时使用下述命令启动init第二阶段:gdb --args /bin/init --second-stage为了调试init的子进程,还需要gdb下述命令set follow-fork-mode child98ca0646-84d2-11ed-bfe3-dac502259ad0.png  当前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

    文章

    546

    浏览量

    32359
  • 开源社区
    +关注

    关注

    0

    文章

    92

    浏览量

    342

原文标题:OpenHarmony系统使用gdb调试init

文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    arm三个寄存器在gdb调试时的作用

    arm三个寄存器在gdb调试时作用  ARM是一种广泛使用的微处理器架构,它广泛应用于移动设备、嵌入式系统和其他高性能计算设备。当我们在使用gdb(GNU
    的头像 发表于 01-31 10:44 218次阅读

    如何使用linux下gdb调试python程序

    如何使用linux下gdb调试python程序  在Linux下,可以使用GDB(GNU调试器)来调试Python程序。
    的头像 发表于 01-31 10:41 475次阅读

    linux用gdb调试遇到函数调用怎么办?

    linux用gdb调试遇到函数调用怎么办? 在Linux上使用GDB调试时,遇到函数调用是一个常见的情况。函数调用可能涉及到多个函数、多个文件,这就需要我们仔细审查代码,理解函数之间的
    的头像 发表于 01-31 10:33 199次阅读

    TLT507-GDB程序调试方法说明

    TLT507-GDB程序调试方法说明
    的头像 发表于 01-26 10:11 516次阅读
    TLT507-<b class='flag-5'>GDB</b>程序<b class='flag-5'>调试</b>方法说明

    RK3568-GDB程序调试方法说明

    RK3568-GDB程序调试方法说明
    的头像 发表于 01-19 16:16 927次阅读
    RK3568-<b class='flag-5'>GDB</b>程序<b class='flag-5'>调试</b>方法说明

    如何使用GDB调试工具

    在对应程序目录中使用下面的命令 gdb test 2、调试已经开始运行的程序进程 调试已经开始运行的程序进程,首先先用top命令查看运行的程序进程的pid如下: 比如我要加载的程序
    的头像 发表于 11-09 17:17 343次阅读
    如何使用<b class='flag-5'>GDB</b><b class='flag-5'>调试</b>工具

    GDB调试工具的原理

    一、GDB调试工具的原理 1.1 未执行进程调试 启用gdb调试运行gdb ./test的时候,
    的头像 发表于 11-09 17:04 335次阅读
    <b class='flag-5'>GDB</b><b class='flag-5'>调试</b>工具的原理

    什么是GDBGDB的基本功能和命令总结

    GDB是嵌入式软件工程师调试用的比较多的一种工具,今天就来简单分享一下GDB相关命令。
    的头像 发表于 11-07 09:15 1660次阅读

    GDB调试里怎么设置断点

    本篇讲解使用GDB调试Linux应用程序,以下以 hellowld.c 为例介绍 GDB调试入门: 设置断点   disable                 # 禁用所有断点
    的头像 发表于 10-04 16:10 571次阅读

    Linux系统中如何进行GDB调试

    -g 启动调试 $ gdb helloWorldGNU gdb (GDB) Red Hat Enterprise Linux 8.2-12.el8 Copyright (C) 201
    的头像 发表于 10-04 15:52 218次阅读

    Linux系统GDB单步调试

    单步调试    gdb helloworld                         (gdb) break helloworld.c:18            (gdb
    的头像 发表于 09-26 16:22 323次阅读

    在板子中调试GDB的方法

    系统,比如 ubuntu、centos 等,我们可以直接运行 gdb调试程序。但是嵌入式中芯片性能一般比较弱,所以直接在嵌入式系统中运行 gd
    的头像 发表于 07-27 16:37 762次阅读
    在板子中<b class='flag-5'>调试</b><b class='flag-5'>GDB</b>的方法

    在ubuntu中调试GDB

    的 gcc 编译器即可,注意需要加 -g 选项,才能使用 gdb 调试 arm-linux-gnueabihf-gcc gdbtest .c -o gdbtest -g //编译测试程序,注意-g 选项
    的头像 发表于 07-27 16:31 646次阅读
    在ubuntu中<b class='flag-5'>调试</b><b class='flag-5'>GDB</b>

    嵌入式Linux GDB是什么

    函数、设置断点、查看变量等等,它是 UNIX/LINUX 操作系统下强大的程序调试工具。 gdb 支持多种语言
    的头像 发表于 07-27 16:29 457次阅读
    嵌入式Linux <b class='flag-5'>GDB</b>是什么

    使用GDB调试Linux应用程序

    本篇讲解使用GDB调试Linux应用程序,以下以 `hellowld.c` 为例介绍 GDB调试入门。
    发表于 06-27 15:48 338次阅读