一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenHarmony系統(tǒng)如何使用gdb調(diào)試init

OpenHarmony技術(shù)社區(qū) ? 來(lái)源:OpenHarmony技術(shù)社區(qū) ? 2023-01-15 15:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

OpenHarmony 適配新的開(kāi)發(fā)板時(shí),啟動(dòng)流程 init 大概率會(huì)出現(xiàn)問(wèn)題。

其為內(nèi)核直接拉起的第一個(gè)用戶態(tài)進(jìn)程,問(wèn)題定位手段只能依賴代碼走讀和增加調(diào)試打印,初始化過(guò)程中系統(tǒng)崩潰的問(wèn)題就更難定位了。如果能使用 gdb 調(diào)試 init,會(huì)極大提高定位效率。

本文將詳細(xì)闡釋二次啟動(dòng)的標(biāo)準(zhǔn)系統(tǒng)如何使用 gdb 調(diào)試 init。

用 gdb 調(diào)試 init

①編譯出帶 debug 信息的調(diào)試版本

將 gdb 打包到系統(tǒng)鏡像中。init 不正常的情況下,系統(tǒng)無(wú)法正常啟動(dòng)工作,無(wú)法使用 hdc 工具加載 gdb 工具,所以直接在制作鏡像時(shí),將其打包到系統(tǒng)鏡像 bin 目錄下。

修改 deviceoardhihope k3568cfgBUILD.gn 打包腳本如下,注意保證 gdb 工具已放置在此本目錄下。

44ce7bc0-94a5-11ed-bfe3-dac502259ad0.png

②調(diào)試版本鏡像帶符號(hào)

需要修改鏡像配置文件,修改其大小限制,尤其是 system.img,編譯失敗時(shí)不會(huì)提示實(shí)際鏡像大小,需要修改到 5G 以上。

44dabc0a-94a5-11ed-bfe3-dac502259ad0.png

③編譯調(diào)試版本,打開(kāi)版本調(diào)試開(kāi)關(guān)

./build.sh--product-name=XXX--gn-args="is_debug=trueuse_unstripped_as_runtime_outputs=true"

上述 debug 版本只能調(diào)試普通功能而不能調(diào)試 init,還需要對(duì) init 服務(wù)的源碼進(jìn)行部分適配修改,init 功能調(diào)試正常后,需將源碼恢復(fù)。

首先,在 init 掛載好 system、vendor 等鏡像,并將根目錄切換到 system 鏡像后。

在啟動(dòng)第二階段 init 時(shí),切換到 shell 下,停止 init 初始化流程,見(jiàn)下圖 B 處。

44e7c602-94a5-11ed-bfe3-dac502259ad0.png

源碼詳見(jiàn) basestartupinit servicesinitstandardinit.c。注意:A 處的 CloseStdio() 需要注釋掉。

考慮用 gdb 啟動(dòng) init 第二階段,init 絕大部分處理流程都在這一階段,從這里開(kāi)始就可以用 gdb 調(diào)試了,init 第一階段處理相對(duì)而言流程簡(jiǎn)單一些,代碼走讀和調(diào)試打印基本就能解決問(wèn)題。

在 init 主函數(shù)中去掉“不等于進(jìn)程 1 就返回的處理”,因?yàn)橛?gdb 起 init 第二階段時(shí),其進(jìn)程非 1。

源碼詳見(jiàn)basestartupinitservicesinitmain.c。

44f51ef6-94a5-11ed-bfe3-dac502259ad0.png

init 進(jìn)程中不初始化 Paramworkspace,前面 pid=1 的判斷,在 gdb 調(diào)試 init 時(shí)條件不成立,所以此處增加判斷 init 名就直接退出的處理。

源碼詳見(jiàn) basestartupinitservicesparamaseparam_base.c。

45028e88-94a5-11ed-bfe3-dac502259ad0.png

做好了上述準(zhǔn)備,就可以用 gdb 調(diào)試 init。

把系統(tǒng)啟動(dòng),改造后的 init 初始化第一階段完成后,會(huì)停在 shell 下,此時(shí)使用下述命令啟動(dòng) init 第二階段。

gdb--args/bin/init--second-stage為了調(diào)試 init 的子進(jìn)程,還需要 gdb 下述命令:setfollow-fork-modechild

451325d6-94a5-11ed-bfe3-dac502259ad0.png

總結(jié)

本文章針對(duì) OpenHarmony 系統(tǒng)在調(diào)試 init 初始化流程時(shí),缺少高效的問(wèn)題定位手段這一痛點(diǎn),引入了嵌入式系統(tǒng)開(kāi)發(fā)的主流調(diào)試工具——gdb,詳細(xì)描述了這一方法涉及到的版本編譯、適配點(diǎn)修改以及調(diào)試命令操作等細(xì)節(jié)處理,指導(dǎo)開(kāi)發(fā)者提高定位init問(wèn)題的效率。

需要注意,當(dāng)前 gdb 調(diào)試 init 方法有局限,不適用輕量級(jí)系統(tǒng)、小型系統(tǒng)和一次啟動(dòng)的標(biāo)準(zhǔn)系統(tǒng)。
審核編輯:陳陳

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • gdb
    gdb
    +關(guān)注

    關(guān)注

    0

    文章

    60

    瀏覽量

    13607
  • init
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    3580
  • OpenHarmony
    +關(guān)注

    關(guān)注

    29

    文章

    3856

    瀏覽量

    18654

原文標(biāo)題:OpenHarmony上使用gdb調(diào)試init

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    QEMU+GDB調(diào)試ARM程序

    通過(guò)GDB調(diào)試代碼的便利性無(wú)需贅言。我們直接以調(diào)試meta-hypervisor為示例進(jìn)行說(shuō)明。
    的頭像 發(fā)表于 10-08 09:17 ?3442次閱讀

    使用GDB調(diào)試Linux應(yīng)用程序

    本篇講解使用GDB調(diào)試Linux應(yīng)用程序,以下以 `hellowld.c` 為例介紹 GDB調(diào)試入門(mén)。
    發(fā)表于 06-27 15:48 ?592次閱讀

    ubuntu下GDB調(diào)試GDB簡(jiǎn)介

    調(diào)試與圖像編程ubuntu下GDB調(diào)試Opencv3.x的基本應(yīng)用ubuntu下GDB調(diào)試GDB
    發(fā)表于 12-21 08:20

    OpenHarmony系統(tǒng)使用gdb調(diào)試init

    --second-stage為了調(diào)試init的子進(jìn)程,還需要gdb下述命令set follow-fork-mode child總結(jié)本文章針對(duì)OpenHarmony
    發(fā)表于 01-10 11:34

    OpenHarmony系統(tǒng)使用gdb調(diào)試launcher應(yīng)用程序

    代碼修改HAP應(yīng)用在初始化過(guò)程中由系統(tǒng)拉起,需要延緩其啟動(dòng)過(guò)程,方便使用gdb工具進(jìn)程跟蹤調(diào)試,修改下述部分代碼,以方便gdb的使用。(以下代碼在O
    發(fā)表于 04-10 09:26

    GDB調(diào)試命令手冊(cè)

    GDB調(diào)試命令手冊(cè),感興趣的可以下載看看。
    發(fā)表于 11-05 16:36 ?9次下載

    使用 GDB 調(diào)試多進(jìn)程程序

    GDB 是 linux 系統(tǒng)上常用的 c/c++ 調(diào)試工具,功能十分強(qiáng)大。對(duì)于較為復(fù)雜的系統(tǒng),比如多進(jìn)程系統(tǒng),如何使用
    發(fā)表于 04-02 14:33 ?675次閱讀

    嵌入式Linux系統(tǒng)GDB遠(yuǎn)程調(diào)試的實(shí)現(xiàn)

    遠(yuǎn) 程調(diào)試環(huán)境由宿主機(jī)GDB和目標(biāo)機(jī)調(diào)試stub共同構(gòu)成,兩者通過(guò)串口或TCP連接。使用GDB標(biāo)準(zhǔn)程串行協(xié)議協(xié)同工作,實(shí)現(xiàn)對(duì)目標(biāo)機(jī)上的
    發(fā)表于 04-02 14:38 ?542次閱讀

    Linux應(yīng)用的GDB調(diào)試的原理及過(guò)程分析

    GDB調(diào)試是應(yīng)用程序在開(kāi)發(fā)板上運(yùn)行,然后在PC機(jī)上對(duì)開(kāi)發(fā)板上得應(yīng)用程序進(jìn)行調(diào)試,PC機(jī)運(yùn)行GDB,開(kāi)發(fā)板上運(yùn)行GDBServer。在應(yīng)用程序調(diào)試
    發(fā)表于 03-05 09:44 ?3585次閱讀
    Linux應(yīng)用的<b class='flag-5'>GDB</b><b class='flag-5'>調(diào)試</b>的原理及過(guò)程分析

    OpenHarmony系統(tǒng)使用gdb調(diào)試init

    OpenHarmony適配新的開(kāi)發(fā)板時(shí),啟動(dòng)流程init大概率會(huì)出現(xiàn)問(wèn)題,其為內(nèi)核直接拉起的第一個(gè)用戶態(tài)進(jìn)程,問(wèn)題定位手段只能依賴代碼走讀和增加調(diào)試打印,初始化過(guò)程中系統(tǒng)崩潰的問(wèn)題就更
    的頭像 發(fā)表于 12-26 12:10 ?1209次閱讀

    ARM平臺(tái)如何玩轉(zhuǎn)GDB遠(yuǎn)程調(diào)試

    前言關(guān)于GDB工具GDB工具是GNU項(xiàng)目調(diào)試器,基于命令行使用。和其他的調(diào)試器一樣,可使用GDB工具單步運(yùn)行程序、單步執(zhí)行、跳入/跳出函數(shù)、
    的頭像 發(fā)表于 09-28 18:17 ?1276次閱讀
    ARM平臺(tái)如何玩轉(zhuǎn)<b class='flag-5'>GDB</b>遠(yuǎn)程<b class='flag-5'>調(diào)試</b>?

    Linux系統(tǒng)GDB單步調(diào)試

    單步調(diào)試 ???gdb?helloworld????????????????????? ???(gdb)?break?helloworld.c:18???????? ???(gdb)?
    的頭像 發(fā)表于 09-26 16:22 ?932次閱讀

    GDB調(diào)試工具的原理

    一、GDB調(diào)試工具的原理 1.1 未執(zhí)行進(jìn)程調(diào)試 啟用gdb調(diào)試運(yùn)行gdb ./test的時(shí)候,
    的頭像 發(fā)表于 11-09 17:04 ?1318次閱讀
    <b class='flag-5'>GDB</b><b class='flag-5'>調(diào)試</b>工具的原理

    如何使用GDB調(diào)試工具

    在對(duì)應(yīng)程序目錄中使用下面的命令 gdb test 2、調(diào)試已經(jīng)開(kāi)始運(yùn)行的程序進(jìn)程 調(diào)試已經(jīng)開(kāi)始運(yùn)行的程序進(jìn)程,首先先用top命令查看運(yùn)行的程序進(jìn)程的pid如下: 比如我要加載的程序
    的頭像 發(fā)表于 11-09 17:17 ?1249次閱讀
    如何使用<b class='flag-5'>GDB</b><b class='flag-5'>調(diào)試</b>工具

    如何使用linux下gdb來(lái)調(diào)試python程序

    如何使用linux下gdb來(lái)調(diào)試python程序? 在Linux下,可以使用GDB(GNU調(diào)試器)來(lái)調(diào)試Python程序。
    的頭像 發(fā)表于 01-31 10:41 ?3249次閱讀