ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:1.01MB ,
资源ID:7023409      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-7023409.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Linux内核调试和工具使用Word格式.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

Linux内核调试和工具使用Word格式.docx

1、VMmware自带一个工具可实现虚拟机系统与pc系统进行文件共享,无论虚拟机装的是linux系统还是windows或其他系统。不过要实现该功能前必须确定Vmware软件所在目录有对应系统vmare-tools的镜像文件,如linux.iso。下面介绍如何实现虚拟机linux系统与pc进行文件共享方法。1. 准备工作在虚拟机linux系统启动后,选择菜单VM-Install VMware Tools将安装文件linux.iso载入光驱,这时在linux系统中的光盘驱动器会显示出Vmware-tools的安装软件包,例如VMwareTools-8.1.4-227600.tar.gz(不同版本文件名

2、略有不同)。2. 安装软件包注意应该安装后者,即VMwareTools-8.1.4-227600.tar.gz。打开终端,在命令行中通过命令进行安装。(1) 将软件包拷贝到临时文件夹cp VMwareTools-5.5.2-29772.tar.gz /tmp(2)进入/tmp文件夹cd /tmp (3) 解压软件 tar zxf VMwareTools-5.5.2-29772.tar.gz这时/tmp下回出现一个叫vmware-tools-distrib的文件夹(4) 进入vmware-tools-distribcd vmware-tools-distrib(5) 安装软件./vmware-i

3、nstall.pl后面的步骤中会出现很多让你选择的项,一路回车即可。安装成功之后会显示Enjoy the VMware team。3. 共享文件夹软件包安装好之后,需要在Window下共享文件夹以便在Linux下可以访问。选择菜单VM-Settings,在弹出的Virtual Machine Settings对话框中选择Options属性页,在Settings中选择Shared Folers来设置共享文件夹,后面的步骤太简单就不说了。4. 在Linux中查看共享文件进入/mnt,你会发现这里多了一个名为hgfs的文件夹,这个目录下就可以找到你在Windows下的共享的文件。3.3. 扩容虚拟机

4、磁盘容量 一般我们在安装一台虚拟机时,一开始给它分配的硬盘空间不会很多,比如8G或更少,但在工作中可能因为编译升级内核、装载工具时,原先分配的空间被使用完,需要更多的硬盘空间。这时候除了重装一个虚拟机外,我们可以使用在线扩容磁盘空间容量的方法实现。以下介绍两种扩容方法:a. 要扩容虚拟机的硬盘容量,首先要让虚拟机能检查到它有额外的硬盘空间可以使用,这里有两种方法来增加虚拟机的硬盘容量a) 使用Vmware-tools工具增加硬盘容量,这种方式比较简单。1, 点击工具栏VM-setting,在Hardware页点击Add按钮,选择Hard Disk增加一个磁盘,后面操作看你磁盘的实际分配情况了,

5、可按如下图设置:可按实际需求增加一个或多个磁盘(做raid磁盘阵列就是这样增加磁盘的):b) 上图出现了好多硬盘,可能有人看了烦,那么这里就介绍另一种方法,直接对一个虚拟硬盘进行扩容,这个方法复杂点。1,首先要使用vmware的自带工具vmware-vdiskmanager.exe,我们可以在windos的命令行中进入到vmware的安装目录,也就是vmware-vdiskmanager.exe所在目录,执行 vmware-vdiskmanager -x 20Gb “Other Linux 2.6.x kernel-cl3.vmdk”其中 -x 20Gb 表示扩大至20Gb,详细帮助输入 vm

6、ware-vdiskmanager 回车即可查看。Other Linux 2.6.x kernel-cl3.vmdk为虚拟硬盘完整路径名,路径中含空格,所以需用引号引起来。若你有两个vmdk文件,其中一个比另一个多-flat,如 Red Hat Linux.vmdk和 Red Hat Linux-flat.vmdk,选择不带- flat的那个。命令敲完会显示虚拟磁盘扩容的执行进度,这个过程比较慢,耐心等待。2,虚拟磁盘扩容成功后,会显示如下信息,表示磁盘扩容成功,可以看到我们硬盘已经扩容到20G:3,虚拟磁盘扩容成功后只表示这个磁盘有20G的容量,但除了之前的8G已经被使用,剩下的12G是未被

7、使用的原始空间,也没有没分区,必须先将其分区后linux系统才能发现该部分磁盘空间,这里就用到了分区工具,这里使用的是gparted-live-0.6.4-1.iso(下载地址4,首先按F2进入虚拟机的BIOS设置(如果进不去一直按Ctrl+Alt+Insert键,然后快速按F2,或者在工具栏选择WM-power-power on to BIOS),将虚拟机的启动方式首选为cd启动(待分区调整结束后需改回原样,或将Hard Drive调作第一启动项):5,进入系统后按默认选择GParted Live (Default settings),直接Enter。6,默认不更改keymap,直接Ente

8、r。7,系统语言设置,输入26,回车。注:26 表示简体中文。8,选择图形系统模式,按默认的(0),直接回车。9,这时候就进入磁盘分区界面,可以显示当前虚拟机有多少个磁盘以及分区的情况(右边的12G是我已分区完并加入逻辑卷的,本来是一片白色的空磁盘空间):b,使用gparted分区工具的好处是能够动态扩容某一格式的文件系统大小,也就是如果我硬盘里还有未被分区的磁盘空间,我们可以直接增加到已有分区中(方法很简单,操作时按照提示就可完成)。还有另一种简单方法是创建一个某种文件系统类型的磁盘分区,并在linux系统中将其mount到一个文件夹中使用。1,但如果一个分区的文件系统使用的是lvm格式,那

9、么就不能使用这个工具直接扩展它的大小,必须在linux系统中进行扩容,因为centos系统就是使用lvm管理分区,我们就介绍lvm的扩容方法,所以这里就直接将空闲的12G空间直接右击-新建,格式化成一个无文件系统的分区/dev/sda3,也就如下图的/dev/sda4(/dev/sda3在先前已被我加入到逻辑卷中了,所以文件系统会显示lvm2)2,退出系统,双击Exit,选择shutdown,OK。提示取出CD,恢复VMware Workstation BIOS 第一启动项为硬盘启动。3,进入系统后,打开终端,显示当前的硬盘信息,会发现新创建的一个分区/dev/sda3:4,现在我们将新创建的

10、分区sda3加入到已有的逻辑卷中,这里涉及到LVM的基础知识,想了解更多的可以google学习。下面是简单操作:pvcreate /dev/sda3 /* 初始化一个物理卷*/vgextend VolGroup00 /dev/sda3 /* 将这个物理卷添到逻辑卷组中 */lvextend -L +12G /dev/VolGroup00/LogVol00 /* 将该逻辑卷组中的一个逻辑卷扩容12G */resize2fs /dev/VolGroup00/LogVol00 /* 重新设置文件系统大小*/5,操作完后使用df命令查看磁盘使用情况,可以看到磁盘逻辑卷已经扩容成功:3.4. 打印内核调

11、试信息方法在调试linux内核代码时,我们经常会用printk将调试信息打印到终端上,但如果我们调试的代码会随内核启动时一起启动,或者调试模块时出bug死机了,这时就不能查看死机前打印的全部信息了。下面就介绍将内核调试信息打印到另一台虚拟机上。 1,首先要clone或重新安装一台虚拟机,两台内核版本可以不一致。要调试内核代码的虚拟机叫做目标机,用于查看调试信息的虚拟机叫做调试机(暂且随kgbd的叫法),目标机要增加一个串口设备,配置如下:而开发机也要增加一个串口设备,配置如下:2,进入目标机的/boot/grub/grub.conf,这是linux系统的启动引导配置文件,将某个内核的调试信息输

12、出到终端重定向输出到串口,如下图:3,进入调试机,打开一个终端确认一下系统是否已经安装minicom,如果没有请自行安装。4,配置minicom(需要root用户),执行minicom s后出现配置界面使用向下键选择serial port setup(串口设置),按回车出现设置界面按A,设置串口设备为/dev/ttyS0按E:设置为115200。按F:设置为No按回车,保存设定,回到主菜单,可以选择Save setup as df1(设为默认配置)。设置完成后选择Exit退出5,直接输入minicom,就可以像使用Windows的超级终端一样操作了。我们还可以将当前信息保存到一个文件中作为bu

13、g信息使用,按住ctrl + A + L:4. Linux内核升级与kgdb调试环境的搭建4.1. linux内核升级 Linux内核升级的关键是要配置好makefile的config文件,根据不同环境我们对内核可能需要添加或删除一些模块,这就要具体问题具体分析。这里只介绍简单的内核升级,我们在升级前直接将旧内核的.config文件拷贝到新内核源码中(在/usr/src/kernels/对应内核版本目录就好)。1,终端进入要升级的内核源码目录下,敲make menuconfig配置config文件,以下是几个配置点,其他都不用操作,按原先内核配置就可。(1)Loadable Module su

14、pport选项中,选上“Module unloading”和“Automatic kernel module loading”这两项; (2)Device Drivers-Block Devices中选上“Loopback device support”; Device Drivers-Multi-device support(RAID and LVM)处要选上“device mapper support”;Graphics support,一定要选上“ Support for frame buffer devices”; Device Drivers -USB support选上“USB M

15、ass Storage support”(如果是在实环境中,想要更多USB支持,就全选吧。我的是在虚拟机中,用不着了);Network device supportEthernet (10 or 100Mbit) AMD PCnet32 PCI support (3)File system-(以下9个选项是关于ext2和ext3文件系统配置,全部选上) Second extended fs support Ext2 extended attributes Ext2 POSIX Access Control Lists Ext2 Security Labels Ext3 journalling

16、file system support Ext3 extended attributes Ext3 POSIX Access Control Lists Ext3 Security Labels JBD (ext3) debugging support File system-DOS/FAT/NT Filesystems选上“NTFS file system support”;注意:ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你reboot时机器就会当掉,出现如下错误信息: kernel panic : no init found ,t

17、ry passing init = option to kernel.或者是: VFS:Cannot open root device hdxy or unknow-block(0,0) Please append a correct root= boot option kernel panic:VFS:Unable to mount root fs on unknown-block(0,0) mount: error 19 mounting ext3 pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2 umount /initr

18、d/proc fail: Freeing unused kernel memory: 244k freed Kernel panic not syncing: No init found. Try passing init = option to kernel (4)如果你在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选:Device Drivers -SCSI device support (此项不选的话,下面两项就选择不上)SCSI device support -SCSI disk supportDevice Drivers-SCSI device support-SCS

19、I low-level drivers- BusLogic SCSI support2,执行以下命令编译该内核:make bzImage & make modules & make modules_install & make install3,编译完成后可以修改启动项,以决定启动选项,我们可以将我们升级的内核当成默认的启动项:4.2. kgdb调试环境的搭建 kgdb 实用程序是基于 gdb 的调试器,允许双机远程调试内核和内核模块驱动。kgdb 可帮助在内核代码中放置断点,这样就可以逐步通过断点来观察变量等操作。我们可以利用两台虚拟机对修改的内核模块代码进行调试。1,首先要确定你的内核版本

20、,2.6.25以前的内核是没有添加kgdb补丁包的,必须要手动下载和添加对应内核版本的补丁包,如2.6.15.5的内核对应的kgdb是/linux-2.6.15.5-kgdb-2.4。同样,首先将其解压后放入到/usr/src/目录下。然后进入内核目录内,为内核打上kgdb的支持补丁,具体可以参考patch中README,选择需要得patch:# cd /usr/src/linux-2.6.15.5# patch -p1 General setup Prompt for development and/or incomplete code/driversCONFIG_KGDB = y Kern

21、el hacking KGDB: kernel debuggerCONFIG_KGDB_SERIAL_CONSOLE = y (使用串口进行通信) use kgdb over the serial consoleCONFIG_DEBUG_RODATA = n该选项是将内核的一些内存区域空间设置为只读,这样可能导致kgdb的设置软断点功能失效。所以推荐将该选项关闭。最后将这两项打上*号:CONFIG_DEBUG_INFO = y该选项可以使得编译的内核包含一些调试信息,使得调试更容易。CONFIG_FRAME_POINTER = y该选项将使得内核使用帧指针寄存器来维护堆栈,从而就可以正确地执行

22、堆栈回溯,即函数调用栈信息。设置完成后,可以查看.config对应配置确保有如下配置: CONFIG_DEBUG_RODATA =n CONFIG_FRAME_POINTER=y CONFIG_KGDB=y CONFIG_KGDB_SERIAL_CONSOLE=y CONFIG_KGDB_KDB=y CONFIG_KDB_KEYBOARD=y5,当编译完后,进行虚拟机clone,生成一个相同内核的开发机,同时目标机与开发机的串口设备配置与3.4内容一致。6,当编译完后,修改启动项,跟2.6.25以前的内核版本有点不同,它的配置命令如下:7,重新启动内核,这时候目标机将会处于等待gdb连接的状况

23、:8,这时候进入开发机内核源码主目录下启动gdb: Gdb ./vmlinux设置串口速率: (gdb) set remotebaud 115200连接到被调试机: (gdb) target remote /dev/ttyS09,若连接成功, 则开发机屏幕显示如下(不同版本显示可能有所不同):Remote debugging using /dev/ttyS0breakpoint () at kgdbstub.c:10051005 atomic_set(&kgdb_setting_breakpoint, 0);warning: shared library handler failed to enable breakpoint(gdb)输入以下命令,设置符号文件的搜索路径:

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2