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

    文章

    584

    浏览量

    33980
  • 开源社区
    +关注

    关注

    0

    文章

    95

    浏览量

    775

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ElfBoard技术贴|如何在【RK3588】ELF 2开发板进行GDB调试

    GDB(GNU Project Debugger)是在Linux环境下功能全面的调试工具。它提供了一系列强大的调试功能,包括设置断点、单步执行、打印与观察变量、查看寄存器及堆栈信息等。在Linux软件开发的实践中,
    的头像 发表于 11-11 13:47 4919次阅读
    ElfBoard技术贴|如何在【RK3588】ELF 2开发板进行<b class='flag-5'>GDB</b><b class='flag-5'>调试</b>

    蜂鸟的GDB调试时无法在断点处停止是什么原因?

    各位大佬们,我们使用GDB调试程序的时候,在main函数打上断点,然后在gdb中continue,程序并没有在main函数入口处停下?请问大佬知道原因吗?谢谢~
    发表于 11-07 06:15

    RV-STAR无法连接到GDB server的解决办法

    demo跑一跑,现在卡在了“下载程序到开发板”这一步,connect to gdb server失败,使用的是板载调试器。请问这是什么情况? 具体信息如下: 1. 我已经安装
    发表于 11-07 06:15

    【技术分享】正确编写SysV Init脚本以实现Systemd兼容(上)

    嵌入式的ubuntu系统如何写好SysVInit脚本呢?与system服务又有什么差别呢?一起随着文章来探究吧。问题背景许多传统Linux服务仍使用SysVInit脚本(/etc/init
    的头像 发表于 10-28 11:45 539次阅读
    【技术分享】正确编写SysV <b class='flag-5'>Init</b>脚本以实现Systemd兼容(上)

    使用蜂鸟调试器,无法用cjtag协议调试CM32M433R芯片怎么解决?

    器jtag端口,到CM32M433R-START开发板上MCU的jtag调试端口。在jtag和cjtag调试中,都连接GND,TCK,TMS,TDI,TDO五条线,没有连接RST线 开发环境 系统
    发表于 10-20 07:31

    【干货分享】RT-Trace国产调试工具 | 技术集结

    专为嵌入式开发者打造的一款高性能、多功能的调试工具。它集成了实时系统跟踪、数据监控、GDB远程调试、Flash程序烧录、虚拟终端等多种功能于一体,支持通过WebU
    的头像 发表于 09-16 08:07 571次阅读
    【干货分享】RT-Trace国产<b class='flag-5'>调试</b>工具 | 技术集结

    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—GDB程序调试方法说明

    (Linux) GDB工具是GNU项目调试器,基于命令行使用。和其他的调试器一样,可使用GDB工具单步运行程序、单步执行、跳入/跳出函数、设置断点、查看变量等等,它是UNIX/LINU
    的头像 发表于 08-05 15:33 334次阅读
    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—<b class='flag-5'>GDB</b>程序<b class='flag-5'>调试</b>方法说明

    【M-K1HSE开发板免费体验】OpenHarmony系统体验与调试串口连接

    系统体验使用电源供电上电即可启动时显示LOGO显示OpenHarmony进入桌面 消息中心 桌面设备信息 Wifi连接,要接好天线否则信号不好 浏览器 音乐播放 相机 系统更新 整个体验下来
    发表于 07-18 23:48

    STM32CubeIDE无法启动正常调试是哪里出了问题?

    STM32CubeIDE始终正常使用中,昨日系统升级为 macOS Sequoia 版本,启动调试出现错误提示,重新安装应用程序及 st-stlink-server 驱动,仍提示同样错误。 目前
    发表于 03-14 16:30

    为什么会报错Could not determine GDB version using command: arm-none-eabi-gdb --version?

    我已经重启电脑了,没用; 重装软件没有,没有; 将ST_link_server卸载重装也没有; 将arm-none-eabi-gdb加入windows 11系统环境变量,也没用; 将软件的GDB
    发表于 03-12 08:08

    【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发GPIO基础知识

    【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发GPIO基础知识
    的头像 发表于 03-06 11:23 1008次阅读
    【北京迅为】iTOP-RK3568<b class='flag-5'>OpenHarmony</b><b class='flag-5'>系统</b>南向驱动开发GPIO基础知识

    蜂鸟板上Openharmony系统跑QT程序

    将QT程序放到Openharmony系统上跑,可以运行,但是会被覆盖掉。(用的网盘里面的install,支持QT组件的版本)。 运行情况是,在终端运行QT程序,可以正常运行出来,但是触摸屏幕后,会被Openharmony操作界面
    发表于 02-26 13:04

    挑战6万月薪【二】Purple Pi OH开发板带你7天入门OpenHarmony

    经过上一次的学习,我们已经初步了解了PurplePiOH,并完成了OpenHarmonyOS的烧录,接下来请各位小白跟着笔者的步骤,完成配件的连接,让系统变得“可视化”,与OpenHarmony亲密
    的头像 发表于 01-20 14:48 785次阅读
    挑战6万月薪【二】Purple Pi OH开发板带你7天入门<b class='flag-5'>OpenHarmony</b>!

    Dali通信系统调试指南

    调试通信系统是一个复杂的过程,涉及到对系统性能的测试、故障排除和优化。以下是一个关于调试Dali通信系统的指南,假设Dali是一个特定的通信
    的头像 发表于 01-10 10:47 1686次阅读

    自动控制系统调试方法 自动控制系统与传统控制系统的比较

    自动控制系统调试方法 自动控制系统调试是一个复杂的过程,涉及到对系统性能的测试和优化。以下是一些基本的
    的头像 发表于 12-18 09:50 1486次阅读