原标题:网易视频云技术分享:UML调试Linux内核

网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,为客户提供稳定流畅、低时延、高并发的视频直播、录制、存储、转码及点播等音视频的PaaS服务。在线教育、远程医疗、娱乐秀场、在线金融等各行业及企业用户只需经过简单的开发即可打造在线音视频平台。现在,网易视频云转载相关文章,与大家分享。

概述

UML这里不是统一建模语言,而是UserMode Linux的缩写,从字面上看,是在用户态运行linux内核,即将内核当作一个应用程序在跑,这样我们就可以用调试应用层程序的方法调试内核了,应用层的强大调试工具gdb就派上用场了。很多时候我们写内核代码,当遇到算法比较复杂但又不涉及底层结构的时候总是喜欢现在应用层实现并调试,然后在写到内核层。为什么,就是因为用户层调试比内核调试方便。但是UML的最大局限性就是不能调试硬件关联性强的代码,但是还是有很多方面可以应用的,比如调度算法、VFS等。用gdb像跟踪用户程序一样跟踪这样的代码,相信你一定非常感兴趣,那么让我们马上开始第一步:搭建一个UML测试环境。

安装下载编译内核代码

1.首先从网上下载你感兴趣的内核代码版本,比如我下载的版本是2.6.36.4。

2.编译内核:在真正进入编译之前(make linux ARCH=um之前),需要先进行内核配置,具体配置可参考下图所示:

注意ARCH=um是必不可少的,否则就不是编译UML平台的内核了。如果编译过正常平台下(如amd64, i386,ppc等)的内核的人会发现,这个配置列表和以往的有一些不同,这就是ARCH=um的作用,我们现在要配置的是一个要跑在应用层的内核。除了选上你需要的功能对应选项以外,还有一些选项是必要为UML选的:

在UML-specific options—>Host Processor typefeatures—>Processor family里选择你的处理器平台,如果你发现有Generic x86 support配置(不一定会出现),请保证它不生效。

Character devices中的stderr console, Virtual serial line, nullchannel support, port channel support, pty channel support, tty channelsupport, xterm channel support等是需要选中的。

Enable loadable module support在UML中一般是不需要的,可以取消它,当然你不取消也没关系。

Networking support里的Amateur Radio support, IrDA (infrared)subsystem support, Bluetooth subsystem support等的也是可以去掉的。而UML Network Devices里的东西是需要依据具体情况而定的,我这里就使用了默认的配置,如果你有特殊需求还请根据自己的需求选。NetLabel subsystem support我选了,因为我需要调试网络标签。

Block Devices—> Virtual block devices需要选中。

File systems嘛……这个就比较复杂了,你需要什么就自己选吧。

SCSI device support中可以不需要。

Multiple devices driver support也可以不需要。

Kernel Hacking是一个比较重要的,需要选中Kernel debugging, Compile the kernel with debuginfo这两个需要选上,Show timing information on printks可以选上,其它的选项根据你要调试需求自己选择。

好了,配置好后你就可以保存退出了。

构建运行环境

让uml的内核跑在一个独立出来的运行环境中,我们需要一块磁盘,并在这块磁盘上作一个文件系统,即根文件系统,再在上面作一个可运行的最小系统(因为要让系统可运行,需要的不仅仅是一个内核,还有一些相关的运行环境的支持)。这里可以自己制作带最小系统的根文件系统,也可以从网上直接下载一个现成的,刚开始的时候我采用了自己制作的方法,但是系统运行没有成功,我便从网上down了一个现成的,最终算是大功告成。我在这里分别给出两种办法,任各位自己挑选。

手动制作方法:

1.首先创建一个设备用来作为文件系统的载体并格式化成想要的文件系统:mkdir disk dd if=/dev/zero of=disk/um-rootbs=1024K count=1000 mkfs.ext3 disk/um-root

2.挂载设备:创建目录挂载点目录并将上面已格式化的设备挂载mkdir -p mnt/ mount -o loop disk/um-rootmnt/

3.构建最小化系统debootstrap squeeze mnt/ (ubuntu上)

4.等到一切就绪以后,系统运行所需的一切条件就已经具备了。

网上下载办法:(推荐)

上面我们介绍了自己手动制作根文件系统的办法,这种办法可能会让你对系统有更深入的理解,但是出错的可能性也更大,我在第一次尝试的时候就出错了,而且找不到出错的原因,让我很是郁闷,于是选择了这种方法。这种办法非常简单,只需要从网上下载适合你的root_fs即可。下载地址为:,比如我下载的就是DebianSqueeze。

运行UML

上面一切准备工作就绪以后,就可以让UML跑起来了。再次申明,让UML跑起来需要的两个条件:

1.编译好的内核;

2.制作好的根文件系统,在我自己的系统中,我将他们存储在不同的目录下,编译好的内核位于目录kernel/linux-2.6.36.4下,而制作好的根文件系统位于disk下,名为root_fs。

运行UML很简单,直接输入下面的命令即可:./kernel/linux-2.6.36.4/linux ubda=disk/root_fs mem=256m UML执行的结果是会弹出一个登陆对话框,提示你输入用户名和密码,网上下载的根文件系统,默认用户名是root,密码为空,如下图所示:

等你正确输入用户名和密码以后,展现在你面前的就是一个用户态的linux系统了,你可以完成和普通操作系统的所有功能。

使用UML调试内核

搞清楚了如何使用UML以后,利用UML调试内核也就变得易如反掌了,我们使用的工具还是强大的GDB。使用GDB加载编译好的内核,然后设置断点,用法与gdb调试普通应用程序无异。这里不妨给出我的gdb调试截图:

Q&A

在编译使用和调试UML的过程中,可能会遇到很多意想不到的麻烦,这部分我将自己遇到过的意外贴在这里,希望对初学者有所帮助,如果你有任何的补充,希望你能给出问题以及行得通的解决方案并留言,我会不断补充。

问题1:

解决办法:tell gdb to ignore SIGSEGV:告诉gdb忽略SIGSEGV。在gdb命令框中输入:handle SIGSEGV noprint nostop pass

问题2:Program received signal SIGTRAP, Trace/breakpoint trap. 0x08066a4c in get_signals () atarch/um/os-Linux/signal.c:284

解决办法:在gdb命令框中输入:handle SIGTRAP nostop noprint

参考&引用

实践过程中参考了以下两篇博客,对博主表示感谢,这里给出链接:

更多技术分享,请关注网易视频云官方网站(http://vcloud.163.com/)或者网易视频云官方微信(vcloud163)进行交流与咨询。返回搜狐,查看更多

责任编辑:

linux内核视频 网易,网易视频云技术分享:UML调试Linux内核相关推荐

  1. 【华为云技术分享】关于Linux下Nginx的安装及配置

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务.其他信息请自行百度. 下面介绍一下,在CentOS7.4 的环境下,安装nginx-1 ...

  2. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 3

    4. 微观层面 4.1 个体动机 在开源软件发展之初, 商业组织的投入很少甚至没有, 完全是靠Richard Stallman 或者 linus Torvalds 这样的个人在努力推动开源软件艰难前行 ...

  3. hbase实战技术分享案例【网易视频云技术分享】

    网易视频云:HBase最佳实践-列族设计优化 http://jingyan.baidu.com/article/642c9d3414e5c8644a46f7f5.html 网易视频云:网易HBase基 ...

  4. 【技术分享篇】Linux内核——手把手带你实现一个Linux内核文件系统丨Linux内核源码分析

    手把手带你实现一个Linux内核文件系统 1. 内核文件系统架构分析 2. 行行珠玑,代码实现 [技术分享篇]Linux内核--手把手带你实现一个Linux内核文件系统丨Linux内核源码分析 更多L ...

  5. 融云技术分享:解密融云IM产品的聊天消息ID生成策略

    本文来自融云技术团队原创分享,原文发布于"融云全球互联网通信云"公众号,原题<如何实现分布式场景下唯一 ID 生成?>,即时通讯网收录时有部分改动. 1.引言 对于IM ...

  6. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 1

    前言 以互联网为代表的信息技术的迅猛发展对整个经济体系产生了巨大的影响.信息技术的发展一方面使知识的积累和传播更加迅速,知识爆炸性的增长:另一方面,使信息的获取变得越来越容易,信息交流的强度逐渐增加, ...

  7. 【华为云技术分享】三大前端技术(React,Vue,Angular)探密(下)

    [华为云技术分享]三大前端技术(React,Vue,Angular)探密(上) [Angular] Angular(通常被称为 "Angular 2+"或 "Angula ...

  8. 【华为云技术分享】Linux内核编程环境 (1)

    在上一期中,我们介绍了Linux内核的源码结构,这一期我们介绍Linux内核编程环境,首先介绍的是Linux内核的编译方法. 一.Linux内核编译方法 本期中我们以Linux 4.19.94版内核来 ...

  9. 【华为云技术分享】Linux内核源码结构(1)

    在上一期中,我们介绍了Linux内核发展的历史,也介绍了与其相关的UNIX和GNU的相关知识.从这一期开始,我们将介绍Linux内核的源码结构.我们将先根据Linux源码的目录结构进行分析,到本文章发 ...

最新文章

  1. 比特币ABC推出最新版本后讨论网络不兼容性
  2. tengine 调用php,nginx 或tengine 访问日志分割处理
  3. pth大小为0,占用空间不为0
  4. suse11/12关闭防火墙
  5. 【PAT乙级】1071 小赌怡情 (15 分)
  6. 中两个查询结果相减_MySQL 在查询结果中插入伪行
  7. SDO_Geometry 相关学习
  8. ASP.NET 网站管理工具中的“安全”制表页
  9. 编写Android.mk中的LOCAL_SRC_FILES,使其自动查找源文件,不需要手动添加
  10. ESX Server硬件升级步骤
  11. Python 爬取百度网盘所有热门分享文件
  12. JAVA语言程序设计课后习题----第八单元解析(仅供参考)
  13. SqlSessionFactoryBean
  14. XP教育网用户免费上网
  15. mo java_mojava和 high sierra系统区别?
  16. Python爬虫 | 2008-2018年各省专利统计数据
  17. 安徽大学计算机专业毕业论文格式,安徽大学本科毕业论文格式.doc
  18. zynqmp Linux + 裸机 (A53-0 Linux,A53-1 2 3 裸机大数据量实时处理,R5-0 协议处理,R5-1 屏幕显示逻辑等)填坑笔记
  19. 1.网络通讯-9种常用网络命令
  20. 拉丁方阵(内置问题,渴望求解!)

热门文章

  1. 任意输入一个整数,输出这个数的加法表
  2. TouchImageView 实现图片的缩放,双击放大缩小,多点触控的功能
  3. jquery mobile android浏览器,我们怎样使用jQuery Mobile实现手机新闻浏览器
  4. 梦幻西游广东区哪个服务器最稳定,梦幻西游:全服最体面的5开!玩了14年却终生免点卡,策划都无奈...
  5. 查找导致Simulink仿真缓慢的原因
  6. 在WordPress网站上添加图片点击放大效果
  7. 国外科学家使用深度学习还原古代文字代码开源
  8. B2C暴利行业之保健品行业
  9. PHP连接Mysql,实现基本的增、删、改、查——用户管理系统
  10. 产品升级丨12月产品持续创新,解锁更多场景功能