热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

kgdb和qemu

1.编译linux下载内核sudomkdir-p/usr/src/worksudochmod777/usr/src/work-Rcd/usr/src/work配置内核选项$sudomakedefconfig//你可以选择你需要的版本,生成.config$sudomakemenuconfig//配置内核确保如下的选项是打

1. 编译 linux

下载内核
    sudo mkdir -p  /usr/src/work
    sudo chmod 777 /usr/src/work -R
    cd /usr/src/work
配置内核选项
    $ sudo make defconfig
        //你可以选择你需要的版本,生成.config
    $ sudo make menuconfig    
        //配置内核
    确保如下的选项是打开的:
    CONFIG_EXPERIMENTAL = y
    CONFIG_KGDB = y
    CONFIG_KGDB_SERIAL_COnSOLE= y (使用串口进行通信)
    建议关闭的选项: 
    CONFIG_DEBUG_RODATA = n
该选项是将内核的一些内存区域空间设置为只读,这样可能导致kgdb的
        设置软断点功能失效。所以推荐将该选项关闭。
    建议打开的选项:
    CONFIG_KGDB_LOW_LEVEL_TRAP = y                                         
使能该选项可以kgdb不依赖notifier_call_chain()机制来获取断点异常,
这样就可以对notifier_call_chain()机制实现相关的函数进行单步调试。
    CONFIG_DEBUG_INFO = y
该选项可以使得编译的内核包含一些调试信息,使得调试更容易。
    CONFIG_FRAME_POINTER = y
该选项将使得内核使用帧指针寄存器来维护堆栈,从而就可以正确地执行堆栈回溯,即函数调用栈信息。
        arm体系的配置中没有找到这个选项.
    CONFIG_MAGIC_SYSRQ = y (如果你选择了KGDB_SERIAL_CONSOLE,这个选项将自动被选上)
        激活"魔术 SysRq"键. 该选项对kgdboc调试非常有用,kgdb向其注册了‘g’魔术键来激活kgdb 。
        当你想手动激活kgdb时,你可以触发SysRq的g键, 如:
            $ echo "g" > /proc/sysrq-trigger
    注意:打开make menuconfig后,按 '/'并将选项(如:CONFIG_KGDB)复制到搜索框,然后回车就可找到
        关于该选项的有关信息。
        GCOV-based kernel profiling 在general 下
    保存配置退出.

编译内核 
    # sudo make
    ( 如果你是双核可以 加上 -j2 速度更快 )
    error: ld: final link failed: No space left on device
内核在编译时编出来的临时文件,占用的是源码所在的分区而不是/tmp/分区
        将源码复制到其他分区,编译
    编译完成后,复制bzImage和vmlinux到工作目录下备用
    $ sudo cp arch/x86/boot/bzImage /usr/src/work
    $ sudo cp vmlinux /usr/src/work

2. 制作自己的文件系统
    下载busybox
去busybox站点(http://www.busybox.net/downloads/)下载一个busybox源码包,并解压。
        # wget http://www.busybox.net/downloads/XXX
        # tar -jxvf busybox-1.17.2.tar.bz2
    编译busybos
        # sudo cd busybox-1.17.2
        # sudo make menuconfig
        Busybox Settings  --->
   Build Options  --->
        [ * ] Build BusyBox as a static binary (no shared libs)
   Installation Options  --->
        [ * ] Don't use /usr
    Miscellaneous Utilities  --->
    [ ] flashcp
    [ ] flash_lock
    [ ] flash_unlock
    [ ] flash_eraseall
    注:[ ] 表示不选择
        保存配置文件后开始编译和安装
        # sudo make
我的编译错误:cannot find -lcrypt
            解决:yum install glibc-static //fedora
            make 后显示
LINK    busybox_unstripped
            Trying libraries: crypt m
 Library crypt is not needed, excluding it
 Library m is needed, can't exclude it (yet)//可以不必理会,我不知到为什么
        # sudo make install     制作文件系统
使用如下命令来创建一个虚拟文件系统磁盘文件,在当前目录下创建一个名为busybox.img,大小为100M的文件,并
        将其格式化为ext3的文件系统
        # cd /usr/src/work
        # sudo dd if=/dev/zero of=./busybox.img bs=1M count=100
            解释: dd: Copy a file, converting and formatting according to the operands.
      if=FILE read from FILE instead of stdin
      of=FILE write to FILE instead of stdout
      bs=BYTES read and write BYTES bytes at a time
        # sudo mkfs.ext3 busybox.img
            解释:mkfs - build a Linux file system
将这个虚拟磁盘文件到本地系统中,这样我们可以像访问本地文件一样访问它,
        并将生成好的busybox的文件拷贝到这个文件里。
        # sudo mkdir /mnt/disk
        # sudo mount -o loop /usr/src/work/busybox.img /mnt/disk
解释:    Loopback设备 是linux中的一个可以用来像其他媒体设备一样的虚拟设备。
媒体设备的例子像硬盘分区,例如/dev/had1,/dev/had2,dev/sda1,或者像/dev/fd0软
盘分区一样的整个磁盘。这些设备全部都可以用来储存文件以及目录。它们可以被格式
        化成需要的文件格式(ext2fs, msdos, ntfs等)然后被mount。
Loopback文件系统就是把一个文件和另外的一个文件系统联系起来,就像一个完整像系
统一样。它可以被格式化和mount成以上所提到过块设备.(原文:http://www.dzshebei.com
        /bbs/33424.html)
        # sudo cp -rf /usr/src/work/busybox-1.17.2/_install/* /mnt/disk
        创建必须的文件系统目录
        # cd /mnt/disk/
        # sudo mkdir dev sys proc etc lib mnt
        使用busybox默认的设置文件
            # sudo cp -a /usr/src/work/busybox-1.17.2/examples/bootfloppy/etc/* /mnt/disk/etc
            # sudo vim /mnt/disk/etc/init.d/rcS
将下面内容拷贝到rcS里:
    #! /bin/sh
    /bin/mount -a
    /bin/mount -t  sysfs sysfs /sys
    /bin/mount -t tmpfs tmpfs /dev
    #动态添加虚拟机环境中的设备
    /sbin/mdev -s
    解释: 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
        做完上面对工作后,我们就可以卸载虚拟磁盘文件了
            # cd /usr/src/work
            # sudo umount /mnt/disk

3. 安装qemu
    有关 qemu的介绍:http://www.askarali.org/qemu_howto.html
 http://wiki.qemu.org/Main_Page
    Ubuntu/Debian:
        $ sudo apt-get install qemu
    Fedora:
        # yum install qemu/
4. 使用qemu运行自己编译的内核
    $ sudo qemu  -kernel /usr/src/work/bzImage -append "root=/dev/sda" -boot c -hda /usr/src/work/busybox.img -k en-us
     解释:-boot a”的意思是从软盘启s动。你还可以用“-boot c”来表示从硬盘启动
    note:
    根据你硬盘的种类选择使用 "root=/dev/hda" 或者 "root=/dev/sda".
    这样就能正常启动.
    如果顺利的话,自己编译的内核+文件系统就会在那qemu黑乎乎的窗口里展现出来,
    我的提示:
    This kernel requires an x86-64 CPU, but only detected an i686 CPU. Unable to boot -please
     use a kernel appropritate for your CPU.
 [参考:https://bugzilla.redhat.com/show_bug.cgi?id=494286
http://www.oschina.net/bbs/thread/7740
     ]
     # qemu -cpu ?
x86           qemu32
x86              486
x86          pentium
x86         pentium2
x86         pentium3

    error 1 :
    Could not open '/dev/kqemu' - QEMU acceleration layer not activated: No such file or directory
    Warning : unable to open an initial console
    解决:   
    $ sudo apt-get install  kqemu-source kqemu-common
5. 开始调试   
    $ sudo qemu -kernel /usr/src/work/bzImage -append "root=/dev/hda kgdboc=ttyS0,115200 kgdbwait" -boot c -hda /usr/src/work/busybox.img -k en-us -serial tcp::4321,server
   打开另外一个终端
    $ gdb /usr/src/work/vmlinux
    如果正确则显示如下:
    (gdb) target remote localhost:4321
    Remote debugging using localhost:4321
    kgdb_breakpoint () at kernel/debug/debug_core.c:983
    983        wmb(); /* Sync point after breakpoint */
    (gdb)


推荐阅读
  • 系统安装Debian系统的安装方式和Ubuntu系统的安装方式几乎是一样的,毕竟Ubuntu系统是基于Debian的,就如同CentOS基于Redhat ... [详细]
  • 如何将CentOS8转换为CentOSStream
    CentOS Stream是一个持续交付的Linux发行版,它在RHEL之前处于领先地位。它将具有滚动发布,即不断进行更改。CentOS将成为一个上游版本,它将具有测试补丁和更新。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • python3.7 安装pip3_python3的pip3安装
    ---恢复内容开始---pip3的安装需要对应一整套python的编译工具库,所以安装好的pip3是这个样子:inearAi:~$pip3-Vpi ... [详细]
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
  • 本文主要介绍关于linux文件描述符设置,centos7设置文件句柄数,centos7查看进程数的知识点,对【Linux之进程数和句柄数】和【linux句柄数含义】有兴趣的朋友可以看下由【东城绝神】投 ... [详细]
  • docker安装到基本使用
    记录docker概念,安装及入门日常使用Docker安装查看官方文档,在"Debian上安装Docker",其他平台在"这里查 ... [详细]
author-avatar
zhuzhu-2012_389
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有