博客專欄

        EEPW首頁 > 博客 > gdb本地調試版本移植至ARM-Linux系統

        gdb本地調試版本移植至ARM-Linux系統

        發布人:武漢萬象奧科 時間:2023-12-12 來源:工程師 發布文章

        QQ截圖20231212142320.jpg

        移植ncurses庫

        本文使用的ncurses版本為ncurses-5.9.tar.gz

        下載地址:https://ftp.gnu.org/gnu/ncurses/ncurses-5.9.tar.gz

         

        1.       將ncurses壓縮包拷貝至Linux主機或使用wget命令下載并解壓

         

        tar-zxvf ncurses-5.9.tar.gz

         

        2.       解壓后進入到ncurses-5.9目錄下

         

        cdncurses-5.9

         

        3.       在ncurses-5.9目錄下創建編譯完成后生成文件位置

        mkdiroutput

        cdoutput

        mkdirarm-linux

         

        4.       生成Makefile文件

        ./configure--target=arm-none-linux-gnueabi --prefix=$PWD/output/arm-linux  --enable-termcap --with-shared --without-ada

        l  --target表示編譯器的前綴,需要根據編譯的不同需求進行修改

        l  --prefix表示編譯完成后生成文件的位置

        l  --nable-termcap表示 關鍵代碼使用 termcap(terminalcapabilities)數據庫 [自動檢測]

        l  --with-shared表示動態編譯

         

        5.       編譯

        make

        當遇到如下報錯時

        Makefile:794:recipe for target '../obj_s/lib_gen.o' failed

        make[1]:*** [../obj_s/lib_gen.o] Error 1

        make[1]:Leaving directory '.../ncurses-5.9/ncurses'

        Makefile:109:recipe for target 'all' failed

        make:*** [all] Error 2

         

        需要進入ncurses-5.9/include文件夾,修改 curses.tail 文件下的如下內容,將注釋 /* generated */ 去掉

        externNCURSES_EXPORT(bool)    mouse_trafo(int*, int*, bool);         /* generated*/

         

        6.       安裝

        Makeinstall

         

        7.       安裝完成后會在/output/arm-linux目錄下生成庫文件,我們只需將lib目錄下的libncurses.so.5 庫拷貝至開發板

         

         

        移植gdb

        本文使用的gdb版本為gdb-7.12.tar.gz

        下載地址:https://ftp.gnu.org/gnu/gdb/gdb-7.12.tar.gz

         

        1.       將gdb壓縮包拷貝至Linux主機或使用wget命令下載并解壓

         

        tar-zxvf gdb-7.12.tar.gz

         

        2.       解壓后進入到ncurses-5.9目錄下

         

        cdgdb-7.12

         

        3.       生成Makefile文件

        ./configure -host=arm-none-linux-gnueabi CC=/home/vanxoak/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-gcc  --enable-shared--prefix=$PWD/output/arm-linux --disable-werror --without-x --disable-gdbtk--disable-tui --without-included-regex --without-included-gettextLDFLAGS="-L$PWD/../output/arm-linux/lib"CPPFLASS="-I$PWD/../output/arm-linux/include"

         

        l  --host=arm-none-linux-gnueabi 用arm-none-linux-gnueabi編譯

        l  CC為交叉編譯器絕對路徑

        l  --enable-shared 動態編譯

        l  prefix=“$PWD/output/arm-linux” 安裝目錄

        l  --disable-werror 屏蔽werror報警

        l  --without-x 取消x windows 支持

        l  --disable-gdbtk 取消gdbtk

        l  --disable-tui 取消tui 界面

        l  --without-included-gettext 去掉用于多語言處理的gettext庫

        l  "LDFLAGS=XXX"指交叉編譯完成的ncurse的lib目錄路徑

        l  "CPPFLAGS=XXX"指是交叉編譯完成的ncurse的include目錄路徑

         

        4.       編譯

        make

         

        5.       安裝

        makeinstall

         

        安裝完成后會在.../gdb-7.12/output/arm-linux/bin/目錄下生成gdb可執行程序。

         

        移植至HDT3-EVM 開發板

        1.       將libncurses.so.5庫 文件拷貝至/usr/lib目錄下,若/usr目錄下無lib目錄可手動創建mkdir lib

        2.       將gdb程序拷貝至/bin目錄下

        T3.JPG

         

        測試調試

        1.  編寫可執行測試程序,示例hello.c代碼如下,該代碼執行后會打印Hello World。

        #include<stdio.h> 

        intmain(int argc, char *argv[]) 

            printf("Hello World\n"); 

            return 0; 

        }

         

        2.  使用交叉編譯器進行編譯,需要注意的是,要使用gdb調試程序,需要在使用交叉編譯器編譯源代碼時加上 " -g " 參數保留調試信息,否則不能使用GDB進行調試且報如下最后一行所示錯誤:

        /home# gdb hello

        GNUgdb (GDB) 7.12

        Copyright(C) 2016 Free Software Foundation, Inc.

        LicenseGPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

        Thisis free software: you are free to change and redistribute it.

        Thereis NO WARRANTY, to the extent permitted by law. Type "show copying"

        and"show warranty" for details.

        ThisGDB was configured as "arm-none-linux-gnueabi".

        Type"show configuration" for configuration details.

        Forbug reporting instructions, please see:

        <http://www.gnu.org/software/gdb/bugs/>.

        Findthe GDB manual and other documentation resources online at:

        <http://www.gnu.org/software/gdb/documentation/>.

        Forhelp, type "help".

        Type"apropos word" to search for commands related to "word"...

        Readingsymbols from hello...(no debugging symbols found)...done.

         

        3.       使用交叉編譯器編譯測試程序

        arm-none-linux-gnueabi-gcc-g  -o hello hello.c

         

        4.       將生成的hello文件拷貝至HDT3-EVM 開發板上并使用sync命令保存

         

        5.       輸入gbd命令啟動gdb程序

        /home# gdb

        GNUgdb (GDB) 7.12

        Copyright(C) 2016 Free Software Foundation, Inc.

        LicenseGPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

        Thisis free software: you are free to change and redistribute it.

        Thereis NO WARRANTY, to the extent permitted by law. Type "show copying"

        and"show warranty" for details.

        ThisGDB was configured as "arm-none-linux-gnueabi".

        Type"show configuration" for configuration details.

        Forbug reporting instructions, please see:

        <http://www.gnu.org/software/gdb/bugs/>.

        Findthe GDB manual and other documentation resources online at:

        <http://www.gnu.org/software/gdb/documentation/>.

        Forhelp, type "help".

        Type"apropos word" to search for commands related to "word".

        (gdb)

         

        上述代碼(gdb)為GBD內部命令引導符,表示等待用戶輸入gbd命令

         

        6.       使用 " file hello " 命令載入被調試的測試程序

        (gdb)file hello

        Readingsymbols from hello...done.

         

        顯示Reading symbols from hello...done.表示被測程序加載成功

         

        7.       使用 " r "命令執行調試測試程序

        (gdb)r

        Startingprogram: /home/hello

        HelloWorld

        [Inferior1 (process 849) exited normally]

        如上述代碼顯示 " Hello World " 即表示hello程序執行完成

         

         

        (gdb)help

        Listof classes of commands:

         

        aliases-- Aliases of other commands

        breakpoints-- Making program stop at certain points

        data-- Examining data

        files-- Specifying and examining files

        internals-- Maintenance commands

        obscure-- Obscure features

        running-- Running the program

        stack-- Examining the stack

        status-- Status inquiries

        support-- Support facilities

        tracepoints-- Tracing of program execution without stopping the program

        user-defined-- User-defined commands

         

        Type"help" followed by a class name for a list of commands in that class.

        Type"help all" for the list of all commands.

        Type"help" followed by command name for full documentation.

        Type"apropos word" to search for commands related to "word".

        Commandname abbreviations are allowed if unambiguous.



        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。




        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 龙岩市| 晋中市| 南江县| 庆元县| 桐城市| 耿马| 临夏市| 团风县| 沙湾县| 松滋市| 噶尔县| 台中县| 临朐县| 蕉岭县| 商都县| 常熟市| 柘荣县| 赣州市| 商城县| 新密市| 阳信县| 蕲春县| 永州市| 崇义县| 土默特左旗| 贞丰县| 竹北市| 杂多县| 喜德县| 义乌市| 阿鲁科尔沁旗| 肥东县| 南郑县| 贺州市| 绥化市| 东兰县| 新营市| 铜鼓县| 榕江县| 出国| 宜兴市|