Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器 软件资源

软件开发小程序制作系统集成与运维空间租用硬件开发视频监控技术咨询与支持——联系电话:0311-88999002/88999003

首页 / 操作系统 / Linux

Linux 内核调试1-UML

Linux 内核调试1-UML

最近看了些Linux内核源码,之前认为最好的调试内核源码最好的方式使用Qemu虚拟机,结合GDB调试,虽然在网上也看到一些这种调试方式的弊端,但感觉虚拟机支持调试是最完美的事情,虽然Bochs更为灵活甚至内置调试器,但速度太慢。之前一直觉得KGDB这种双机调试的方式很不完美,还必须使用一个调试机,不过在Windows下使用WinDbg调试虚拟机多了,感觉这种方式很合理,起 码被调试机当机的情况下,调试机还是活的。而且这样看上去很酷,而且比SoftICE这样...
Linux 内核调试2-UML调试内核

Linux 内核调试2-UML调试内核

今天的特别汗,首先,之前UML在64位系统下没有编译通过,编译器和内核源码都应该不会犯这样低级的错误,那最有可能的原因就是gcc版本和 linux内核版本不匹配,gcc 4.4.4版本算是高版本了,而内核版本2.6.34已非最新,抱着侥幸心里下载了2.6.36版本编译,居然顺利通过,看来64位与32位编译并没什么 区别。另外一个问题是昨天启动UML失败的问题,原来是我的命令行写错了,ubda指定根文件系统,我错写成了udba,以至无法加载文件系统,经过纠正...
Linux 内核调试3-UML网络配置

Linux 内核调试3-UML网络配置

UML支持多种方式的网络,一般使用tap/tun模拟UML虚拟机中的eth0驱动,仅仅这种方式也能分为桥接和NAT等等,手工配置网络也有助于理解网络的运行方式。根据官方文档 Simple UML Networking 下载 uml_utilities ,其实也就使用了一个工具 tunctl,这个工具很简单,就是启动 tun 驱动,首先得先查看是否加载 tun 驱动,当然首先需要有root权限:# 查看用户 ID (tunctl 使用)[cpp@dark t...
Linux 内核调试4-Qemu调试Linux内核

Linux 内核调试4-Qemu调试Linux内核

通过UML可以方便的在本机调试Linux内核,UML是一种特殊的虚拟机,另外一种更为灵活的虚拟机是Qemu,Qemu是一种完全仿真虚拟机, 可以在i386平台仿真任意其他处理器构架,而且支持GDB调试,这里尝试一下使用Qemu调试Linux内核,Qemu参数-kernel可以直接指定 内核启动,这与UML有相似之处。首先需要编译安装Qemu,这里并没有什么疑惑之处,直接从官方网站下载源码,使用Linux最常用的编译命令即可:# 默认选项会编译所有处理器构架...
Linux 内核调试5-UML和Qemu调试模块

Linux 内核调试5-UML和Qemu调试模块

这次来看如何调试内核模块,也就是驱动程序,模块的调试跟普通程序略有不同,不论是内核还是普通应用程序,在连接之后便以得知代码将要加载的位置,用户态程序有虚拟地址映射机制,而内核独占物理内存。内核运行与共享的内核地址空间,所以不能使用相同的线性地址,只能由内核加载模块时指定起始地址,模块中都以此为偏移运行。所以内核的调试不能使用普通的方式,需要知道模块的加载地址。而且Qemu的调试原理与UML相似,也可用相同的方法进行模块的调试,这里仅以UML模块调试举例首先...
Linux 内核调试6-使用KGDB双机调试

Linux 内核调试6-使用KGDB双机调试

虽然使用UML或者Qemu可以调试Linux内核,但UML和Qemu毕竟是一个模拟,调试硬件驱动总是用虚拟硬件总不成事,而且Qemu据传闻 对于时钟和中断的处理也有问题,所以对于处理真实硬件的问题,最完美的调试方式就是双机调试,被调试内核在完全真实的环境中运行,排除虚拟机制的不稳定因素,而且使用内核自带的KGDB机制,更具有可靠性,类似Windows下的WinDbg调试方式。这里使用VirtualBox虚拟机进行调试,但所提 及的方法完全适用于诸如VMWa...
Objective-C语法之KVO的使用

Objective-C语法之KVO的使用

简介:上篇我们讲到了KVC(见 http://www.linuxidc.com/Linux/2012-07/66456.htm),这篇我们学习KVO,全名为:Key Value Observing,直译为:基于键值的观察者。那它有什么用呢?KVO主要用于视图交互方面,比如界面的某些数据变化了,界面的显示也跟着需要变化,那就要建立数据和界面的关联。ObjC中提供的KVO就是解决这种问题的。以下用显示页面观察学生的课程名称变化的例子来说明KVO的使用。学生类命...
String.Format 源字符串包含大括号的小问题

String.Format 源字符串包含大括号的小问题

在使用String.Format()的过程中,一直没有遇到这种类型的问题,直到在写一个小sample的过程中,需要动态生成一段javascript代码并且通过ScriptManager.RegisterCliemtScriptBlock方法将其注册到前台,这里使用String.Format来区分动态和静态部分,并且生成最终的脚本代码。在编程中发现带有“{”和“}”符号的脚本代码在String.format()过程中会报错,提示输入字符串不正确。反复检查了j...
Qt creator 不同类 之间参数的传递

Qt creator 不同类 之间参数的传递

Qt creator 方法一:使用extern 传递参数args三个文件 a.h a.cpp 和 b.cpp1、在a.cpp 中定义参数 int args;2、在a.h 中继承参数extern int args;3、在b.cpp 中添加#include "a.h"然后你就能使用args 这个参数了,这个办法项目qt 中的Signal 和 Slot 来说的有点,就是他不需要你实时触发,只需要你最后监听args 的值,然后产生相应的动作就行。情况2, 在主界面...
Android中不被硬件加速支持的操作

Android中不被硬件加速支持的操作

开启硬件加速之后,Android中的2D渲染管道可以支持绝大部分常用的Canvas的绘画操作函数以及那些很少被使用的操作函数。所有的那些用来呈现Android中的应用程序的绘画操作、默认的部件和布局以及常见的高级视觉效果(比如反射和纹理)都被支持。以下列表是已知的不被硬件加速所支持的操作:* Canvas ** clipPath() ** clipRegion() ** drawPicture() ** drawTextOnPath() ** drawVe...
Android getWidth() getHeight() 方法返回的值为0

Android getWidth() getHeight() 方法返回的值为0

使用一个view的getWidth() getHeight() 方法来获取该view的宽和高,返回的值却为0。如果这个view的长宽很确定不为0的话,那很可能是你过早的调用这些方法,也就是说在这个view被加入到rootview之前你就调用了这些方法,返回的值自然为0.解决该问题的方法有很多,主要就是延后调用这些方法。可以试着在onWindowFocusChanged()里面调用这些方法。以下是stack overflow中的回答。Anyhow, the ...
Android 4.1 强制使用720dp的布局

Android 4.1 强制使用720dp的布局

机器升级为Android 4.1,10寸的平板跟以前的布局没有什么两样,但是7寸的就出了点问题。谷歌Nexus 7也是7寸,默认使用的layout跟手机有些相似,但不全是手机布局。Nexus 7是1280 x 800,DPI 为213,这样经过计算,宽度换算为DP就是800 * 160 / 213 = 600; 4.1中对于600 ~ 719 dp的分辨率使用一种新的布局,姑且叫做Phone Tablet吧。我们的平板是1024 x 600分辨率。DPI ...
<< 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 >>