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

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

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

概述

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

安装下载编译内核代码

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

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

a6ca61e85b645533bb07e1b7f07b58a8.png

注意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可以选上,其它的选项根据你要调试需求自己选择。

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

90f2b5860132ae544268be81f7b7ce32.png

构建运行环境

让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。

90f2b5860132ae544268be81f7b7ce32.png

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

6ee3bc5947add65ee139bb06f39feffe.png

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

使用UML调试内核

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

d32e9f61938c2eaa05930c205b98b8df.png

Q&A

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

问题1:

b1e04495567fd8330110195be71a9d52.png

解决办法: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)进行交流与咨询。返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值