我是内核开发的新手,我想知道如何使用QEMU和gdb运行/调试linux内核.我实际上正在阅读Robert Love的书,但遗憾的是它无法帮助读者如何安装适当的工具来运行或调试内核......所以我所做的就是按照本教程http://opensourceforu.efytimes.com/2011/02/kernel-development-debugging-using-eclipse /.我正在使用eclipse作为IDE在内核上开发,但我想首先让它在QEMU/gdb下运行.所以我到目前为止所做的是:
1)用以下代码编译内核:
make defconfig (then setting the CONFIG_DEBUG_INFO=y in the .config)
make -j4
Run Code Online (Sandbox Code Playgroud)
2)编译完成后,我使用以下命令运行Qemu:
qemu-system-x86_64 -s -S /dev/zero -kernel /arch/x86/boot/bzImage
Run Code Online (Sandbox Code Playgroud)
它以"停止"状态启动内核
3)因此我必须使用gdb,我尝试以下命令:
gdb ./vmlinux
Run Code Online (Sandbox Code Playgroud)
正确运行但是...现在我不知道该怎么办...我知道我必须在端口1234(Qemu使用的默认端口)上使用远程调试,使用vmlinux作为符号表文件调试.
所以我的问题是:我应该怎样做才能在Qemu上运行内核,将调试器附加到它上面,从而使它们协同工作,使内核开发更轻松.
我正在尝试使用kvm vm调试Linux内核.我收到一条错误消息"远程'g'数据包回复太长".我的主机是64位,我的虚拟机也是.
我的步骤:
有人遇到过这个问题吗?
我正在用C开发一个内核,并在屏幕上创建了一些在视频内存上打印的内容.我预计视频内存中的第一个字节将是要打印的字符,第二个字节将告诉颜色.但我的程序有一些不同但它的工作原理!! 这是非常意外和不寻常的.
我的内核代码 -
#define VIDEO_MEM 0xb8000
void write_string( int colour, const unsigned char *string );
void main()
{
unsigned char *vid = (unsigned char*) VIDEO_MEM;
int i=0;
for (i = 0; i < 2000; i++)
{
*vid = ' ';
*(vid+2) = 0x1f;
vid += 2;
}
write_string(0x1f,"The Kernel has been loaded successfully!!");
}
void write_string( int colour, const unsigned char *string ) {
unsigned char *vid = (unsigned char*) VIDEO_MEM;
while(*string != 0)
{
*(vid) = *string;
*(vid+2) …Run Code Online (Sandbox Code Playgroud)