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

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

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

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

電子發(fā)燒友開源社區(qū) ? 來(lái)源:未知 ? 2022-12-26 12:10 ? 次閱讀
OpenHarmony適配新的開發(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ì)極大的提高定位效率。 本文簡(jiǎn)單描述了一下L2二次啟動(dòng)的系統(tǒng)如何使用gdb調(diào)試init
  1. 首先將gdb打包到系統(tǒng)鏡像中。
Init不正常的情況下,系統(tǒng)無(wú)法正常啟動(dòng)工作,無(wú)法使用hdc工具加載gdb工具,所以直接在制做鏡像時(shí),將其打包到系統(tǒng)鏡像bin目錄下。如下圖:985906b2-84d2-11ed-bfe3-dac502259ad0.png ?2. 調(diào)試版本鏡像帶符號(hào),需要修改鏡像配置文件,改大其大小限制。尤其是system.img,編譯失敗時(shí)不會(huì)提示實(shí)際鏡像大小,需要修改到5G以上。987359cc-84d2-11ed-bfe3-dac502259ad0.png ?3.編譯調(diào)試版本,打開版本調(diào)試開關(guān)
./build.sh --product-name=ita260  --gn-args="is_debug=true use_unstripped_as_runtime_outputs=true"
4. 在init掛載好system、vendor等鏡像,并將根目錄切換到system鏡像后,在啟動(dòng)第二階段init時(shí),切換到shell下,停止init初始化流程,見下圖B處。 988ad886-84d2-11ed-bfe3-dac502259ad0.png注意:A處的CloseStdio()需要注釋掉 考慮用gdb啟動(dòng)init第二階段,init絕大部分處理流程都在這一階段,從這里開始就可以用gdb調(diào)試了,init第一階段處理相對(duì)而言流程簡(jiǎn)單一些,代碼走讀和調(diào)試打印基本就能解決問(wèn)題。 5. 在init主函數(shù)中去掉“不等于進(jìn)程1就返回的處理”,因?yàn)橛胓db起init第二階段時(shí),其進(jìn)程非1。989b04cc-84d2-11ed-bfe3-dac502259ad0.png ?6. init進(jìn)程中不初始化Paramworkspace,前面pid=1的判斷,在gdb調(diào)試init時(shí)條件不成立,所以此處增加判斷init名就直接退出的處理。98b536f8-84d2-11ed-bfe3-dac502259ad0.png ?7. 系統(tǒng)啟動(dòng),init初始化第一階段完成后,會(huì)停在shell 下,此時(shí)使用下述命令啟動(dòng)init第二階段:gdb --args /bin/init --second-stage為了調(diào)試init的子進(jìn)程,還需要gdb下述命令set follow-fork-mode child98ca0646-84d2-11ed-bfe3-dac502259ad0.png ?當(dāng)前gdb調(diào)試init方法不適用L0、L1和一次啟動(dòng)的L2系統(tǒng)。 本文章針對(duì)OpenHarmony系統(tǒng)在調(diào)試init初始化流程時(shí),缺少高效的問(wèn)題定位手段這一痛點(diǎn),引入了嵌入式系統(tǒng)開發(fā)的主流調(diào)試工具-gdb。詳細(xì)描述了這一方法涉及到的版本編譯、適配點(diǎn)修改以及調(diào)試命令操作等細(xì)節(jié)處理,指導(dǎo)開發(fā)者提高定位init問(wèn)題的效率。需要注意,當(dāng)前gdb調(diào)試init方法有局限,不適用L0、L1和一次啟動(dòng)的L2系統(tǒng)。 更多熱點(diǎn)文章閱讀
  • 玩轉(zhuǎn)OpenHarmony PID:教你打造兩輪平衡車
  • 基于SDIO協(xié)議的WiFi模塊實(shí)現(xiàn)指南
  • ArkUI框架,更懂程序員的UI信息語(yǔ)法
  • 帶你玩轉(zhuǎn)OpenHarmony AI:基于Seetaface2的人臉識(shí)別
  • 帶你玩轉(zhuǎn)OpenHarmony AI:打造智能語(yǔ)音子系統(tǒng)

提示:本文由電子發(fā)燒友社區(qū)發(fā)布,轉(zhuǎn)載請(qǐng)注明以上來(lái)源。如需社區(qū)合作及入群交流,請(qǐng)?zhí)砑游⑿臙EFans0806,或者發(fā)郵箱liuyong@huaqiu.com。


原文標(biāo)題:OpenHarmony系統(tǒng)使用gdb調(diào)試init

文章出處:【微信公眾號(hào):電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 電子發(fā)燒友
    +關(guān)注

    關(guān)注

    33

    文章

    548

    瀏覽量

    32871
  • 開源社區(qū)
    +關(guān)注

    關(guān)注

    0

    文章

    93

    瀏覽量

    397

原文標(biāo)題:OpenHarmony系統(tǒng)使用gdb調(diào)試init

文章出處:【微信號(hào):HarmonyOS_Community,微信公眾號(hào):電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ESP32-C3使用命令行GDB調(diào)試出現(xiàn)報(bào)錯(cuò)的原因?

    = 0;void led_init(){ gpio_reset_pin(LED); gpio_set_direction(LED, GPIO_MODE_OUTPUT);}void led_blink
    發(fā)表于 08-01 07:47

    開源鴻蒙 編譯OpenHarmony輕量系統(tǒng)QEMU RISC-V版本

    本文將介紹如何為QEMU RISC-V虛擬平臺(tái)構(gòu)建OpenHarmony輕量系統(tǒng)。得益于QEMU的CPU指令集模擬執(zhí)行能力,該方法可以在沒有開發(fā)板的情況下調(diào)試和運(yùn)行OpenHarmony
    的頭像 發(fā)表于 07-15 10:36 ?961次閱讀
    開源鴻蒙 編譯<b class='flag-5'>OpenHarmony</b>輕量<b class='flag-5'>系統(tǒng)</b>QEMU RISC-V版本

    OpenHarmony之開機(jī)優(yōu)化

    OpenHarmony已經(jīng)支持了Bootchart工具,我們可以直接使用Bootchart工具,Bootchart工具介紹如下: 概述 Bootchart是一個(gè)用于系統(tǒng)啟動(dòng)過(guò)程性能分析的開源軟件工具
    發(fā)表于 07-01 16:39

    使用VSCode調(diào)試嵌入式程序:如何切換gdb server

    上文小編給大家介紹了一下如何使用VSCode結(jié)合cortex-debug插件進(jìn)行調(diào)試的方法。本篇就趁熱打鐵,進(jìn)一步深入了解一下如何切換gdb server。讓我們可以不僅僅使用JLinkGDBServer進(jìn)行調(diào)試
    的頭像 發(fā)表于 05-09 11:02 ?1770次閱讀
    使用VSCode<b class='flag-5'>調(diào)試</b>嵌入式程序:如何切換<b class='flag-5'>gdb</b> server

    OpenHarmony開發(fā)實(shí)例:【配置應(yīng)用簽名信息】

    使用真機(jī)設(shè)備運(yùn)行和調(diào)試OpenHarmony應(yīng)用前,需要對(duì)應(yīng)用進(jìn)行簽名才能正常運(yùn)行。
    的頭像 發(fā)表于 04-22 16:52 ?369次閱讀
    <b class='flag-5'>OpenHarmony</b>開發(fā)實(shí)例:【配置應(yīng)用簽名信息】

    為什么VSCODE使用GDB調(diào)試不顯示寄存器?

    VSCODE使用GDB調(diào)試不顯示寄存器
    發(fā)表于 02-22 06:46

    arm三個(gè)寄存器在gdb調(diào)試時(shí)的作用

    arm三個(gè)寄存器在gdb調(diào)試時(shí)作用? ARM是一種廣泛使用的微處理器架構(gòu),它廣泛應(yīng)用于移動(dòng)設(shè)備、嵌入式系統(tǒng)和其他高性能計(jì)算設(shè)備。當(dāng)我們?cè)谑褂?b class='flag-5'>gdb(GNU
    的頭像 發(fā)表于 01-31 10:44 ?860次閱讀

    如何使用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 ?2371次閱讀

    linux用gdb調(diào)試遇到函數(shù)調(diào)用怎么辦?

    linux用gdb調(diào)試遇到函數(shù)調(diào)用怎么辦? 在Linux上使用GDB調(diào)試時(shí),遇到函數(shù)調(diào)用是一個(gè)常見的情況。函數(shù)調(diào)用可能涉及到多個(gè)函數(shù)、多個(gè)文件,這就需要我們仔細(xì)審查代碼,理解函數(shù)之間的
    的頭像 發(fā)表于 01-31 10:33 ?669次閱讀

    簡(jiǎn)述GDB調(diào)試器提供的基本功能

    GDB是一個(gè)功能強(qiáng)大的源代碼級(jí)調(diào)試工具,它提供了多種基本功能,幫助程序員** **更好地理解程序的運(yùn)行機(jī)制和定位問(wèn)題** **。
    的頭像 發(fā)表于 01-28 17:44 ?1201次閱讀

    TLT507-GDB程序調(diào)試方法說(shuō)明

    TLT507-GDB程序調(diào)試方法說(shuō)明
    的頭像 發(fā)表于 01-26 10:11 ?923次閱讀
    TLT507-<b class='flag-5'>GDB</b>程序<b class='flag-5'>調(diào)試</b>方法說(shuō)明

    啟動(dòng)System Init進(jìn)入OpenHarmony系統(tǒng)過(guò)程分析與適配

    1 關(guān)鍵字 啟動(dòng)、Init、產(chǎn)品配置、啟動(dòng)配置 2 簡(jiǎn)要描述 本文檔主要以XX開發(fā)版為例分析OpenHarmony系統(tǒng)啟動(dòng)過(guò)程、產(chǎn)品配置、啟動(dòng)配置,并舉例說(shuō)明如何配置。 內(nèi)核加載Init
    發(fā)表于 01-26 10:04

    RK3568-GDB程序調(diào)試方法說(shuō)明

    RK3568-GDB程序調(diào)試方法說(shuō)明
    的頭像 發(fā)表于 01-19 16:16 ?1691次閱讀
    RK3568-<b class='flag-5'>GDB</b>程序<b class='flag-5'>調(diào)試</b>方法說(shuō)明

    腳本調(diào)試工具有哪些?腳本調(diào)試工具怎么用?

    腳本調(diào)試是軟件開發(fā)過(guò)程中非常重要的一環(huán),它能幫助開發(fā)者快速定位并解決代碼中的錯(cuò)誤。大多數(shù)編程語(yǔ)言都提供了各種各樣的腳本調(diào)試工具,本文將介紹一些常見的腳本調(diào)試工具以及它們的基本使用方法。 GDB
    的頭像 發(fā)表于 12-01 14:40 ?796次閱讀

    全志Tina Linux下busybox init簡(jiǎn)介

    tina 使用busybox init方式啟動(dòng),首先調(diào)用執(zhí)行pseudo_init(掛載文件系統(tǒng),如/proc、/tmp、/sys /etc、/usr),接著會(huì)調(diào)用/sbin/init
    的頭像 發(fā)表于 11-15 14:26 ?833次閱讀