OpenHarmony系统使用gdb调试init
前言
OpenAtom OpenHarmony(简称“OpenHarmony”)适配新的开发板时,启动流程init大概率会出现问题,其为内核直接拉起的第一个用户态进程,问题定位手段只能依赖代码走读和增加调试打印,初始化过程中系统崩溃的问题就更难定位了。如果能使用gdb调试init,会极大提高定位效率。本文将详细阐释二次启动的标准系统如何使用gdb调试init。
1. 编译出带debug信息的调试版本
将gdb打包到系统镜像中。init不正常的情况下,系统无法正常启动工作,无法使用hdc工具加载gdb工具,所以直接在制作镜像时,将其打包到系统镜像bin目录下。修改device\board\hihope\rk3568\cfg\BUILD.gn打包脚本如下,注意保证gdb工具已放置在此本目录下。

2. 调试版本镜像带符号,需要修改镜像配置文件,修改其大小限制,尤其是system.img,编译失败时不会提示实际镜像大小,需要修改到5G以上。

3. 编译调试版本,打开版本调试开关
./build.sh --product-name=XXX --gn-args="is_debug=true use_unstripped_as_runtime_outputs=true"
上述debug版本只能调试普通功能而不能调试init,还需要对init服务的源码进行部分适配修改,init功能调试正常后,需将源码恢复。
首先,在init挂载好system、vendor等镜像,并将根目录切换到system镜像后,在启动第二阶段init时,切换到shell下,停止init初始化流程,见下图B处。源码详见base\startup\init\ services\init\standard\init.c。

注意:A处的CloseStdio()需要注释掉。
考虑用gdb启动init第二阶段,init绝大部分处理流程都在这一阶段,从这里开始就可以用gdb调试了,init第一阶段处理相对而言流程简单一些,代码走读和调试打印基本就能解决问题。
在init主函数中去掉“不等于进程1就返回的处理”,因为用gdb起init第二阶段时,其进程非1。源码详见base\startup\init\services\init\main.c。

init进程中不初始化Paramworkspace,前面pid=1的判断,在gdb调试init时条件不成立,所以此处增加判断init名就直接退出的处理。源码详见base\startup\init\services\param\base\param_base.c。

做好了上述准备,就可以用gdb调试init:
把系统启动,改造后的init初始化第一阶段完成后,会停在shell下,此时使用下述命令启动init第二阶段:
gdb --args /bin/init --second-stage
为了调试init的子进程,还需要gdb下述命令
set follow-fork-mode child

总结
本文章针对OpenHarmony系统在调试init初始化流程时,缺少高效的问题定位手段这一痛点,引入了嵌入式系统开发的主流调试工具——gdb,详细描述了这一方法涉及到的版本编译、适配点修改以及调试命令操作等细节处理,指导开发者提高定位init问题的效率。
需要注意,当前gdb调试init方法有局限,不适用轻量级系统、小型系统和一次启动的标准系统。

OpenHarmony系统使用gdb调试init的更多相关文章
- Linux系统下GDB调试
		GDB 一.gdb常用命令: 命令 描述 backtrace(或bt) 查看各级函数调用及参数 finish 连续运行到当前函数返回为止,然后停下来等待命令 frame(或f) 帧编号 选择栈帧 in ... 
- Mac os系统gdb调试器的安装与使用
		Mac os系统gdb调试器的安装与使用 1.简介 Mac os下的Terminal 终端中默认情况下并没有安装gdb调试器,但是可以通过gcc编译器进行代码编译,如果出错了就需要通过gdb调试器进行 ... 
- linux系统下gdb的简单调试
		当我们写完程序后,我们会运行程序,在这个过程中,可能程序会出现错误. 我们可以利用gdb调试去看我们运行的程序,并且我们新手通过gdb调试能更好地去读懂 别人的程序.让我们更好的学习. 我们看下面这条 ... 
- Linux多进程和多线程的一次gdb调试实例
		转载https://typecodes.com/cseries/multilprocessthreadgdb.html 1 原文整理 默认设置下,在调试多进程程序时gdb只会调试主进程.gdb7以上的 ... 
- 在qemu环境中用gdb调试Linux内核
		简介 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试.其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qem ... 
- 构建一个简单的Linux系统 MenuOs —— start_kernel到init进程(20135304刘世鹏)
		构建一个简单的Linux系统 MenuOs —— start_kernel到init进程 作者:刘世鹏20135304 <Linux内核分析>MOOC课程http://mooc.study ... 
- NOI Linux下Emacs && gdb调试方法
		1. 首先要配置emacs文件: (global-linum-mode t) (show-paren-mode t) (global-set-key (kbd "C-s") 'sa ... 
- Linux嵌入式GDB调试环境搭建
		======================= 我的环境 ==========================PC 端: CPU:x86_64, 系统:Ubuntu,IP:172.16.2.212开发 ... 
- gdb调试PHP扩展错误
		有时候,使用PHP的第三方扩展之后,可能会发生一些错误,这个时候,可能就需要更底层的方式追踪调试程序发生错误的地方和原因,熟悉linux下C编程的肯定不陌生gdb 首先,使用ulimit -c命令,查 ... 
- Linux——【转】gcc编译与gdb调试简要步骤
		原文:gcc编译与gdb调试简要步骤 一.Linux程序gcc编译步骤: Gcc编译过程主要的4个阶段: l 预处理阶段,完成宏定义和include文件展开等工作:(.i) l 根据编译参数进行不同程 ... 
随机推荐
- Qt+MPlayer音乐播放器开发笔记(二):交叉编译MPlayer以及部署到开发板播放演示
			前言 在ubuntu上arm交叉编译MPlayer播放器,并部署到开发板播放音乐. Demo Mplayer MPlayer是一款开源多媒体播放器,以GNU通 ... 
- macOS Monterey 与以下电脑兼容下载操作流程解析
			有时在开发iOS应用时我们时常遇到各种情况,比如手机升级了Xcode不支持这时候需要安装xcode但是xcode需要依奈相应系统本人小编整理了这种情况无法解决问题. 首相打开苹果标志进入到下面界面 进 ... 
- Fasfdfs搭建
			目录 介绍 参考 tracker-server: storage-server: group: meta data: 部署 FastDfs服务架构图 本地部署服务 安装 libfastcommon 和 ... 
- mongo Payload document size is larger than maximum of 16777216. 如何处理
			MongoDB中的文档大小限制为16MB(即16777216字节).如果你遇到Payload document size is larger than maximum of 16777216的错误,意 ... 
- vscode 自定义 当前行转大写快捷键 alt + shift + U
			vscode 自定义 当前行转大写快捷键 alt + shift + U 
- iView 表单验证 如果prop字段和表单里的字段对不上,会触发校验,提示错误信息
			iView 表单验证 如果prop字段和表单里的字段对不上,会触发校验,提示错误信息 原因: 在某些情况,没有id,只有文本的时候,需要返显文本,直接用input显示文本,就会出现,触发数据校验的问题 ... 
- js之实现页面内所有图片旋转
			javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=do ... 
- HISI3520DV300 折腾记录(三)之《终篇》
			PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ... 
- 基于C#的自动校时器 - 开源研究系列文章
			上次在公司的Windows7电脑上操作系统没有自动进行校时,导致系统时间老是快那么几分钟,于是想到了用C#开发一个系统时间自动校时器.这个应用不难,主要是能够校时那个操作类的问题. 1. 项目目录: ... 
- Android网络收集和ping封装库
			目录介绍 01.基础介绍 02.stetho大概流程 03.Android中应用 04.如何使用 05.案例截图如下 06.网络请求接口信息 07.如何使用ping 01.基础介绍 该工具作用 诸葛书 ... 
