在windows下编译生成支持gdb stub的bochs以方便我的操作系统uwos调试
2010年06月14日
转载请注明作者:upwardit
忙了一晚上,终于成功了,早上六点了,先写个题目.现在要睡觉了,以后再详细叙述.
......
看到linux上,在bochs上可以用gdb远程调试操作系统内核.而在windows上,直接下载安装的bochs,GDB Stub Options里的Enable GDB stub灰色,不可用.这样用C写的内核调试起来,很不方便.本人只有上网找了,包括外国网站,全是linux上的,没发现windows上的.本人不习惯linux上的编辑器,尽管这些编辑器很好用,一点不比windows上的差.没有办法,只能自己想办法解决了.
试着将gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0加入到bochsrc.bsrc里.运行bochs提示不支持GDB stub.没办法,只有下载bochs源码,自己编译了.最初用VC2005的nmake编译源码里自带的MakeFile.可以生成bochs,但没有gdb stub.后来在linux上生成了带gdb stub的MakeFile.比较合并了两个MakeFile,用nmake编译不成功.又失败了.
看到源码里有不仅有.conf.win32-vcpp还有.conf.win32-cygwin,在.conf.win32-cygwin里加上"--enable-gdb-stub \"(注:没有引号)将--with-nogui删掉,哈哈.装cygwin,bin里面有好多与linux命令一样的exe,在windows下可以使用linux命令了,最好将cygwin\bin加到环境变量里,cool.我们使用sh .conf.win32-cygwin生成MakeFile.怎么来编译呢,我们不用vc了.用MinGW,这样就可以用gcc,g++,ld等.哈哈.将MinGW\bin下的mingw32-make,改名为make.然后make MakeFile.可是提示找不到等,没关系cygwin\usr\include里有.编译没问题了,可是link的时候,提示
Warning: .drectve `/DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized
undefined reference to `__security_cookie'
undefined reference to ` __security_check_cookie 4'
解决方法如下:
如果是VC,这跟GS编译选项有关,SDK的VC++编译器将GS开关打开。并且,在Platform SDK的很多库文件使用"/GS"开关生成的。在VC++中,缓冲区 检查 的代码是放在 C Runtime库中的,这是链接器默认使用的库。但是VC++自带的C Runtime,跟Platform SDK中的C Runtime,是不一样的。bufferoverflowU.lib 一般用户模式 bufferoverflowK.lib 内核模式 bufferoverflow.lib 服务>(注:VC的解决方法为转载)
但是我们用的是MinGW,需要为MinGW设置SDL库,下载SDL-devel-1.2.13-mingw32.tar.gz,否则系统使用的是VC的,就会报上面的错误。
打开MinGW\include,将SDL中include里面的SDL文件夹复制到里面。
然后,回到MinGW\lib的文件夹下,将SDL中lib文件夹下的libSDL.dll.a, libSDL.la和libSDLmain.a三个文件拷贝到MinGW的lib文件夹下。
最后,把SDL中bin文件夹下的SDL.dll文件拷贝到C:\WINDOWS\system32下。也可以将SDL.dll绑定到使用了SDL库编译的*.exe文件所在的文件夹中。
这样链接成功,设置一下GDB stub就可以使用了.
运行bochs显示如下:
Waiting for gdb connection on port 1234
我们运行gdb(需要下载GDB on Windows),键入target remote localhost:1234回车,bochs会显示如下.
Connected to 127.0.0.1
哈哈,成功了.大体过程就是这样,只记得这么多了,文章可能不是很详细,有时间的话,可能会整理一份带图的详细说明.有问题欢迎多多交流,欢迎在不改变文章内容的情况下转载,但请注明作者:upwardit,以尊重本人工作到早上六点的劳动成果,这方便别人,中午边吃饭边写了一个多小时文档的辛苦.关于bochs和gdb使用,就不详细说明了.请各位自己查阅相关资料.
2010年06月14日
转载请注明作者:upwardit
忙了一晚上,终于成功了,早上六点了,先写个题目.现在要睡觉了,以后再详细叙述.
......
看到linux上,在bochs上可以用gdb远程调试操作系统内核.而在windows上,直接下载安装的bochs,GDB Stub Options里的Enable GDB stub灰色,不可用.这样用C写的内核调试起来,很不方便.本人只有上网找了,包括外国网站,全是linux上的,没发现windows上的.本人不习惯linux上的编辑器,尽管这些编辑器很好用,一点不比windows上的差.没有办法,只能自己想办法解决了.
试着将gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0加入到bochsrc.bsrc里.运行bochs提示不支持GDB stub.没办法,只有下载bochs源码,自己编译了.最初用VC2005的nmake编译源码里自带的MakeFile.可以生成bochs,但没有gdb stub.后来在linux上生成了带gdb stub的MakeFile.比较合并了两个MakeFile,用nmake编译不成功.又失败了.
看到源码里有不仅有.conf.win32-vcpp还有.conf.win32-cygwin,在.conf.win32-cygwin里加上"--enable-gdb-stub \"(注:没有引号)将--with-nogui删掉,哈哈.装cygwin,bin里面有好多与linux命令一样的exe,在windows下可以使用linux命令了,最好将cygwin\bin加到环境变量里,cool.我们使用sh .conf.win32-cygwin生成MakeFile.怎么来编译呢,我们不用vc了.用MinGW,这样就可以用gcc,g++,ld等.哈哈.将MinGW\bin下的mingw32-make,改名为make.然后make MakeFile.可是提示找不到等,没关系cygwin\usr\include里有.编译没问题了,可是link的时候,提示
Warning: .drectve `/DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized
undefined reference to `__security_cookie'
undefined reference to ` __security_check_cookie 4'
解决方法如下:
如果是VC,这跟GS编译选项有关,SDK的VC++编译器将GS开关打开。并且,在Platform SDK的很多库文件使用"/GS"开关生成的。在VC++中,缓冲区 检查 的代码是放在 C Runtime库中的,这是链接器默认使用的库。但是VC++自带的C Runtime,跟Platform SDK中的C Runtime,是不一样的。bufferoverflowU.lib 一般用户模式 bufferoverflowK.lib 内核模式 bufferoverflow.lib 服务>(注:VC的解决方法为转载)
但是我们用的是MinGW,需要为MinGW设置SDL库,下载SDL-devel-1.2.13-mingw32.tar.gz,否则系统使用的是VC的,就会报上面的错误。
打开MinGW\include,将SDL中include里面的SDL文件夹复制到里面。
然后,回到MinGW\lib的文件夹下,将SDL中lib文件夹下的libSDL.dll.a, libSDL.la和libSDLmain.a三个文件拷贝到MinGW的lib文件夹下。
最后,把SDL中bin文件夹下的SDL.dll文件拷贝到C:\WINDOWS\system32下。也可以将SDL.dll绑定到使用了SDL库编译的*.exe文件所在的文件夹中。
这样链接成功,设置一下GDB stub就可以使用了.
运行bochs显示如下:
Waiting for gdb connection on port 1234
我们运行gdb(需要下载GDB on Windows),键入target remote localhost:1234回车,bochs会显示如下.
Connected to 127.0.0.1
哈哈,成功了.大体过程就是这样,只记得这么多了,文章可能不是很详细,有时间的话,可能会整理一份带图的详细说明.有问题欢迎多多交流,欢迎在不改变文章内容的情况下转载,但请注明作者:upwardit,以尊重本人工作到早上六点的劳动成果,这方便别人,中午边吃饭边写了一个多小时文档的辛苦.关于bochs和gdb使用,就不详细说明了.请各位自己查阅相关资料.