移植ncurses库
本文使用的ncurses版本为ncurses-5.9.tar.gz
下载地址:https://ftp.gnu.org/gnu/ncurses/ncurses-5.9.tar.gz
1.将ncurses压缩包拷贝至Linux主机或使用wget命令下载并解压
tar-zxvfncurses-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:recipefortarget’../obj_s/lib_gen.o’failed
make[1]:***[../obj_s/lib_gen.o]Error1
make[1]:Leavingdirectory’…/ncurses-5.9/ncurses’
Makefile:109:recipefortarget’all’failed
make:***[all]Error2
需要进入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-zxvfgdb-7.12.tar.gz
2.解压后进入到ncurses-5.9目录下
cdgdb-7.12
3.生成Makefile文件
./configure-host=arm-none-linux-gnueabiCC=/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编译
lCC为交叉编译器绝对路径
l–enable-shared动态编译
lprefix=“$PWD/output/arm-linux”安装目录
l–disable-werror屏蔽werror报警
l–without-x取消xwindows支持
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目录可手动创建mkdirlib
2.将gdb程序拷贝至/bin目录下
测试调试
1.编写可执行测试程序,示例hello.c代码如下,该代码执行后会打印HelloWorld。
#include
intmain(intargc,char*argv[])
{
printf(“HelloWorld\n”);
return0;
}
2.使用交叉编译器进行编译,需要注意的是,要使用gdb调试程序,需要在使用交叉编译器编译源代码时加上”-g”参数保留调试信息,否则不能使用GDB进行调试且报如下最后一行所示错误:
/home#gdbhello
GNUgdb(GDB)7.12
Copyright(C)2016FreeSoftwareFoundation,Inc.
LicenseGPLv3+:GNUGPLversion3orlater
Thisisfreesoftware:youarefreetochangeandredistributeit.
ThereisNOWARRANTY,totheextentpermittedbylaw.Type”showcopying”
and”showwarranty”fordetails.
ThisGDBwasconfiguredas”arm-none-linux-gnueabi”.
Type”showconfiguration”forconfigurationdetails.
Forbugreportinginstructions,pleasesee:
.
FindtheGDBmanualandotherdocumentationresourcesonlineat:
.
Forhelp,type”help”.
Type”aproposword”tosearchforcommandsrelatedto”word”…
Readingsymbolsfromhello…(nodebuggingsymbolsfound)…done.
3.使用交叉编译器编译测试程序
arm-none-linux-gnueabi-gcc-g-ohellohello.c
4.将生成的hello文件拷贝至HDT3-EVM开发板上并使用sync命令保存
5.输入gbd命令启动gdb程序
/home#gdb
GNUgdb(GDB)7.12
Copyright(C)2016FreeSoftwareFoundation,Inc.
LicenseGPLv3+:GNUGPLversion3orlater
Thisisfreesoftware:youarefreetochangeandredistributeit.
ThereisNOWARRANTY,totheextentpermittedbylaw.Type”showcopying”
and”showwarranty”fordetails.
ThisGDBwasconfiguredas”arm-none-linux-gnueabi”.
Type”showconfiguration”forconfigurationdetails.
Forbugreportinginstructions,pleasesee:
.
FindtheGDBmanualandotherdocumentationresourcesonlineat:
.
Forhelp,type”help”.
Type”aproposword”tosearchforcommandsrelatedto”word”.
(gdb)
上述代码(gdb)为GBD内部命令引导符,表示等待用户输入gbd命令
6.使用”filehello”命令载入被调试的测试程序
(gdb)filehello
Readingsymbolsfromhello…done.
显示Readingsymbolsfromhello…done.表示被测程序加载成功
7.使用”r”命令执行调试测试程序
(gdb)r
Startingprogram:/home/hello
HelloWorld
[Inferior1(process849)exitednormally]
如上述代码显示”HelloWorld”即表示hello程序执行完成
(gdb)help
Listofclassesofcommands:
aliases–Aliasesofothercommands
breakpoints–Makingprogramstopatcertainpoints
data–Examiningdata
files–Specifyingandexaminingfiles
internals–Maintenancecommands
obscure–Obscurefeatures
running–Runningtheprogram
stack–Examiningthestack
status–Statusinquiries
support–Supportfacilities
tracepoints–Tracingofprogramexecutionwithoutstoppingtheprogram
user-defined–User-definedcommands
Type”help”followedbyaclassnameforalistofcommandsinthatclass.
Type”helpall”forthelistofallcommands.
Type”help”followedbycommandnameforfulldocumentation.
Type”aproposword”tosearchforcommandsrelatedto”word”.
Commandnameabbreviationsareallowedifunambiguous.