公司簡介圖片模板seo營銷論文
文章目錄
- 文件目錄結(jié)構(gòu)
- 移植ncurses庫
- 移植gdb
- 移植到arm板
- 調(diào)試測試
linux主機:ubuntu-18.04
交叉編譯器:arm-buildroot-linux-gnueabihf
開發(fā)板kernel:Linux 5.4.0-150-generic x86_64
開發(fā)板:100ASK_STM32MP157_PRO開發(fā)板
arm-linux的gdb移植分為兩種情況,一種是交叉調(diào)試,一種是本地調(diào)試。
- 交叉調(diào)試模式:需要編譯一個arm-linux版本gdbserver (GDB的stub模塊),然后再編譯一個X86版本交叉調(diào)試的gdb,為了與桌面版本身的gdb 區(qū)別開來,一般改名為 arm-linux-gdb。兩者通過串口或者網(wǎng)絡(luò)進行互聯(lián)。
- 本地調(diào)試模式:這種模式把整個gdb移植成一個arm的本地版,直接在開發(fā)板上用gdb來調(diào)試。
兩種調(diào)試模式的具體差異查看博文:arm-linux的gdb移植,交叉調(diào)試模式編譯:嵌入式arm linux環(huán)境中g(shù)db+gdbserver調(diào)試
本博文介紹本地調(diào)試模式
文件目錄結(jié)構(gòu)
按照移植規(guī)范,ncurse放入libs目錄,gdb 解壓在項目目錄下
/home/book/Desktop/gdb (項目目錄)
|
|--output
| |-- arm-linux
|
|-- gdb-7.6.1
|
|-- libs|-- ncurses-5.9.tar.gz
移植ncurses庫
下載地址:http://ftp.gnu.org/gnu/ncurses/
下載版本: ncurses-5.9.tar.gz
進入下載目錄,輸入命令進行解壓
tar -zxvf ncurses-5.9.tar.gz
進入解壓后的目錄
cd ncurses-5.9
生成Makfile
./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD/output/arm-linux --enable-termcap --with-shared --without-ada
- –host表示交叉編譯器的前綴,根據(jù)交叉編譯器的不同需要進行更改
- –prefix表示的是目標(biāo)目錄,即編譯完成后生成的文件的位置
- –enable-termcap比較關(guān)鍵,gdb需要這個庫,
- -with-shared表示動態(tài)編譯
編譯
make
報錯:
In file included from ../ncurses/curses.priv.h:283,from ../ncurses/lib_gen.c:19:
_22148.c:835:15: error: expected ‘)’ before ‘int’
../include/curses.h:1594:56: note: in definition of macro ‘mouse_trafo’#define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)^
Makefile:794: recipe for target '../obj_s/lib_gen.o' failed
make[1]: *** [../obj_s/lib_gen.o] Error 1
make[1]: Leaving directory '/home/book/Desktop/gdb/ncurses-5.9/ncurses'
Makefile:109: recipe for target 'all' failed
make: *** [all] Error 2
解決方法:
進入ncurses-5.9/include文件夾,修改 curses.tail 文件:
將 extern NCURSES_EXPORT(bool) mouse_trafo (int*, int*, bool); /* generated */
改為 extern NCURSES_EXPORT(bool) mouse_trafo (int*, int*, bool);
也就是去掉注釋 /* generated */
安裝
make install
以上操作成功后,會在libncurses.so.5 庫應(yīng)該在/home/hxy/gdb/output/arm-linux/lib可執(zhí)行文件,libncurses.so.5就是我們要移植到arm板上的文件。
cp libncurses.so.5 /home/book/nfs_rootfs/
前提是使用nfs,或者使用其他工具移植到開發(fā)板中
移植gdb
下載gdb源代碼:http://ftp.gnu.org/gnu/gdb/
下載版本: gdb-7.6.1.tar.gz
進入下載目錄解壓
tar -xvf gdb-7.6.1.tar.gz
進入解壓目錄
cd gdb-7.6.1
生成Makefile
./configure --host=arm-buildroot-linux-gnueabihf CC=/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-gcc --enable-shared --prefix=$PWD/output/arm-linux --disable-werror --without-x --disable-gdbtk --disable-tui --without-included-regex --without-included-gettext LDFLAGS="-L$PWD/../output/arm-linux/lib" CPPFLASS="-I$PWD/../output/arm-linux/include"
- –enable-shared 動態(tài)編譯
- CC 是交叉編譯器的絕對路徑,為了避免找不到交叉編譯器的錯誤
- –without-x 取消x windows 支持
- –disable-gdbtk 取消gdbtk,應(yīng)該也是圖形界面相關(guān)的
- –disable-tui 取消tui 界面
- –disable-werror 屏蔽werror報警
- –without-included-regex 關(guān)閉正則表達式庫
- –without-included-gettext 去掉用于多語言處理的 gettext庫。正則表達式/gettext暫時不需要
- –host=arm-buildroot-linux-gnueabihf 用arm-buildroot-linux-gnueabihf編譯
- –prefix=“$PWD/output/arm-linux” 安裝目錄
- "LDFLAGS=XXX"指定的是前面交叉編譯完成的ncurse的lib目錄的路徑
- "CPPFLAGS=XXX"指定的是前面交叉編譯完成的ncurse的include目錄的路徑;
編譯
make
安裝
make install
最終的可執(zhí)行程序gdb應(yīng)該在/home/book/Desktop/gdb/output/arm-linux/bin下面
剛剛編譯出來的gdb空間相當(dāng)大,因此必須要用arm-buildroot-linux-gnueabihf-strip 來把空間減少
arm-buildroot-linux-gnueabihf-strip gdb
移植到arm板
將生成的動態(tài)庫和可執(zhí)行文件libncurses.so.5、gdb拷貝到arm板上,給予可執(zhí)行權(quán)限
chmod +x libncurses.so.5 gdb
并將libncurses.so.5放在arm板的/usr/lib目錄下
cp libncurses.so.5 /usr/lib
并將gdb放在arm板的/bin目錄下
cp gdb /bin
調(diào)試測試
在Ubuntu環(huán)境下編寫一個簡單的C程序,命名為test.c,在Ubuntu環(huán)境下打開命令行進行交叉編譯
arm-buildroot-linux-gnueabihf-gcc -g test.c -o test
將生成的可執(zhí)行文件test拷貝到arm板上,給予可執(zhí)行權(quán)限。然后進行g(shù)db調(diào)試,
gdb test
參考博文:
將本地調(diào)試gdb移植到arm板
移植gdb到arm板
gdb移植到arm開發(fā)板
安裝 arm-linux-gdb7.5 & 可能出現(xiàn)的兩類問題解決