- 博客(307)
- 资源 (53)
- 收藏
- 关注
原创 qemu源码分析之Makefile
通过分析qemu的Makefile可以了解qemu代码的组织方式以及qemu功能模块的划分,一方面,有助于理解qemu源代码设计思路,另一方面,有助于根据需求裁剪qemu代码,生成精简的符合制定要求的qemu。 为了更好的理解qemu的Makefile的设计,对于不熟悉makefile语法规则的同学建议阅读下面两篇文章: 1. 《Makefile常用函数分析》 2.
2011-11-12 18:06:57 6811
原创 Makefile常用函数总结
在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具 有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函 数的返回值可以当做变量来使用。 一、函数的调用语法函数调用,很像变量的使用,也是以“$”来标识的,其语法如下:$( ) 或是${ } 这里,就是函数名,make支持的函数不多。是函数的参数,参
2011-11-12 18:00:35 54145 4
原创 linux编程之mprotect
mprotect: 设置内存访问权限mmap 的第三个参数指定对内存区域的保护,由标记读、写、执行权限的 PROT_READ、PROT_WRITE 和 PROT_EXEC 按位与操作获得,或者是限制没有访问权限的 PROT_NONE。如果程序尝试在不允许这些权限的本地内存上操作,它将被 SIGSEGV 信号(Segmentation fault,段错误)终止。在内存映射完成后,这些权限仍可
2011-11-06 22:46:12 22092 1
原创 linux编程之定时器
创建一个定时器:int timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid) 进程可以通过调用timer_create()创建特定的定时器,定时器是每个进程自己的,不是在fork时继承的。clock_id说明定时器是基于哪个时钟的,*timerid装载的是被创建的定时器的ID。该函数创
2011-11-06 21:29:00 2247
原创 系统调用和c库之间的关系
Tips: 用man查询函数时候有些并不能直接man + 函数名查到,例如:man fopen man 2 open所以可以用man+数字+函数名来试试,具体的内容可以查看 /usr/local/share/man/下面对应的目录___________________________________________________________________________
2011-11-03 22:27:29 9486 1
原创 Linux 新api eventfd
eventfd 在内核版本,2.6.22以后有效。查看内核版本可以用命令 uname -r 。1 #include int eventfd(unsigned int initval, int flags);这个函数会创建一个 事件对象 (eventfd object), 用来实现,进程(线程)间 的 等待/通知(wait/notify) 机制. 内核会为这个对象维护一个
2011-11-02 22:26:19 1563
转载 Linux 新增系统调用的启示
最近在研究 Linux 内核的时间子系统,为下一篇长文《服务器程序中的日期与时间》做准备,无意中注意到了 Linux 新增的几个系统调用的对编写服务器代码的影响,先大致记录在这里。这篇博客也可算作前一篇《多线程服务器的常用编程模型》的一个注脚。1. 服务器程序的风格可能在变新的创建文件描述符的 syscall 一般都支持额外的 flags 参数,可以直接指定 O_NONBLOCK 和 FD
2011-11-02 22:11:43 1474
原创 fcntl设置FD_CLOEXEC标志作用
通过fcntl设置FD_CLOEXEC标志有什么用?close on exec, not on-fork, 意为如果对描述符设置了FD_CLOEXEC,使用execl执行的程序里,此描述符被关闭,不能再使用它,但是在使用fork调用的子进程中,此描述符并不关闭,仍可使用。eg:jamie@jamie-laptop:~$ cat test.c#include #include
2011-11-02 22:11:05 40311 2
原创 loop设备及losetup命令介绍
1. loop设备介绍 在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件
2011-10-16 18:31:44 43385 2
原创 configure: error: GRUB requires a working absolute objcopy; upgrade your binutils 解决方法
编译grub-0.97时,执行configure后,出现如下错误: configure: error: GRUB requires a working absolute objcopy; upgrade your binutils 错误提示upgra
2011-10-16 16:14:41 4478 3
原创 ubuntu 11.10 Texlive 2011 + Lyx 2.0.1 + Xetex 环境配置
texlive 2011 安装首先,下载texlive 2011套装(texlive2011.iso),并卸载系统上任何相关的texlive、latex等的安装包。我系统上默认没有安装,所以可以进行安装。此外,需要安装用于texlive图形安装的perl-tk包。
2011-10-16 11:00:17 7328 7
原创 ubuntu 11.10 创建启动器
由于ubuntu 11.10采用了gnome shell,所以移除右键中的创建启动器,那怎么创建某个程序的启动器呢? 方法: 活动 --》 main menu 然后在指定的目录下创建item,并修改item的属性
2011-10-15 15:29:24 2946 1
转载 Ubuntu下修改Chrome字体(不使用stylist)
Ubuntu下修改Chrome字体(不使用stylist):编辑~/.config/google-chrome/Default/User StyleSheets/Custom.css文件添加如下几行:@charset "utf-8";body * {font-
2011-10-15 11:03:54 3129
原创 硬盘安装ubuntu 11.10
以前多次硬盘安装过Ubuntu,所以下载了ubuntu 11.10后就按照以前常用的方法进行安装,结果老是出现panic,后来google了下,发现有新的硬盘安装方法,测试了下成功安装,与大家分享下! 1 旧的硬盘安装Ubuntu的方法 (1) 下载ubun
2011-10-15 09:44:04 3510
原创 安装 Adobe Flash Player 11 64-bit in Ubuntu 11.04/11.10
1 添加第三方源 sudo add-apt-repository ppa:sevenmachines/flash2 更新源 sudo apt-get update3 安装64bit flash player sudo apt-get inst
2011-10-15 09:24:29 2765
原创 qemu源码分析之五-- TCG动态翻译技术
1. TCG简单介绍TCG(Tiny Code Generator)最早被用于C编译器的后端。在TCG相关的代码中,target指的是我们通常说的host,这一点需要注意,并不是我们理解的被仿真的平台。2. TCG动态翻译技术的几个概念(1)与dyngen一样,TCG
2011-10-12 22:03:50 15294 4
原创 qemu源码分析之四--dyngen动态翻译技术
由于刚刚接触qemu,所以前面几篇文章仅仅是肤浅的介绍qemu的一些背景知识,今天突然感觉前面说的太没有条理了,而且大部分是读别人的文章,一知半解,没有自己的总结体会,今天感觉稍微有点心得,敬请指教。1. 明确guest和host 对于qemu而言,被仿真的平台成为
2011-10-09 21:34:00 11201 7
转载 QEMU源码分析系列(三)
从QEMU-0.10.0开始,TCG成为QEMU新的翻译引擎,使QEMU不再依赖于GCC3.X版本,并且做到了“真正”的动态翻译(从某种意义上说,旧版本是从编译后的目标文件中复制二进制指令)。TCG的全称为“Tiny Code Generator”,QEMU的作者Fabrice
2011-09-27 20:52:40 10755 1
原创 qemu源码分析系列(二)
在qemu源码分析系列(一)简单介绍了下qemu相关的背景知识,本文将详细分析qemu的核心 -- 动态翻译器。为了更容易理解动态翻译技术,我们暂时忽略掉qemu的其他模块,如用户交互模块,硬件模拟等模块,而是从数据结构的设计,数据结构之间的操作及其应用等方面来进行详细地分析
2011-09-23 23:17:38 15074 6
原创 QEMU源码分析系列(一)
1 qemu概述 qemu是一种快速的多体系结构仿真器,通过动态翻译的技术达到了优异的仿真速度。目前,qemu支持两种操作模式:全系统仿真模式。在这种模式下,qemu完整的仿真目标平台,此时,qemu就相当于一台完整的pc机,例如包括一个或多个处理器以及各种外围
2011-09-18 21:51:52 27339 5
原创 重新开始写博客啦!
由于前段时间刚开始工作,而且公司也不能上网,以致很长时间没有发blog了。计划从下周起重新写blog,初步的打算是分析qemu的源代码,希望有兴趣的同学一块讨论,共同进步。
2011-09-15 22:26:33 1486 1
原创 kthread_create和kernel_thread的区别和总结
在看linux驱动代码的时候,经常惠会碰到kthread_create这个函数,google一下,发现很多人在讲二者的区别,但是都在讲源码的区别而已,总结不够,感觉没有说出二者之间的本质区别,自己总结下。 一. 源码分析(linux-2.6.39)1. kthread_create源码分析#define kthread_create(threadfn, data,
2011-06-15 16:14:00 7963
原创 Fedora 15解决标题栏太宽的问题
Fedora 15的标题栏非常宽,严重影响美观,今天终于找到了解决方法,贴出来与大家分享。在终端下输入下面命令,注销或重启即可。sed -i "/title_vertical_pad/s/value=/"[0-9]/{1,2/}/"/value=/"0/"/g" /usr/share/themes/Adwaita/metacity-1/metacity-theme-3.xml
2011-06-05 12:04:00 2821
原创 texlive 中文字体bug解决方法
texlive不能识别字体文件名,所以在安装texlive后,需要修改文件: /usr/local/texlive/2010/texmf-dist/tex/latex/ctex/fontset/ctex-xecjk-winfonts.def,才能正确的使用中文字体,修改成fc-list显示的中文字体名,比如我的名称的内容如下:1 % ctex-xecjk-winfonts.def: Windows 的 xeCJK 字体设置,默认为六种中易字体2 % vim:ft=tex3 4 /setCJKmainfont
2011-06-02 20:54:00 6212
原创 Fedora 15 缺少libc静态库解决方法
今天突然需要静态编译一个c文件,碰到了下面的错误:ld: can not find -lc很明显是提示找不到静态的c库libc.a,在系统中搜索了下确实没有发现这个库。解决方法:yum install glibc-static
2011-06-02 20:53:00 2565
原创 Fedora 15 kvm网桥
由于fedora 15(x86_64)更改了网络设备的命名规则,本来以为网桥配置要很麻烦的,没想到是换汤不换药,按照以前的配置基本没有问题,现在总结一下配置步骤。1. 安装网桥必备的软件yum install bridge-utils.x86_64 tunctl.x86_642. 网络配置(1)首先关闭网络设备 ifdown eth0(2)添加网络设备配置文件因为fedora 15 修改了网络设备的命名规则,将ethx --> emx, 所以/etc/sysconfig/network-s
2011-05-27 09:13:00 3540
原创 Fedora 15 正式版可以下载啦!
<br />下载按地址:http://torrent.fedoraproject.org/torrents/
2011-05-24 11:11:00 1183
原创 我的vim配置文件
<br />和大家分享下我的vim配置文件:<br />http://blog.chinaunix.net/space.php?uid=20940095&do=blog&id=279722
2011-05-03 09:21:00 1438
原创 workqueue原理和源码分析
<br />workqueue,中文称其为工作队列,是一个用于创建内核线程的接口,通过它创建的内核线程来执行内核其他模块排列到队列里的工作,创建的内核线程被称为工作者线程。要理解工作队列的实现,重点在于理解相关的三个数据结构的含义及关系。 1 表示工作队列类型的数据结构:struct workqueue_struct/*<br /> * The externally visible workqueue abstraction is an array of * per-CPU workqueues: */
2011-04-29 09:56:00 4584
原创 等待队列的原理与源码分析
等待队列(wait queue)用于使进程带等待某一特定的事件发生,而无需频繁的轮询操作,进程在等待时间内睡眠,在等待的事件发生时由内核自动唤醒。 一、 等待队列相关数据结构 每一个等待队列都由两部分组成:等待队列头(struct wait_queue_head_t)和等待队列成员(struct wait_queue)。struct __wait_queue_head {<br /> spinlock_t lock; /*因为等待队列可以在中断时随时修改,因此设置一个自旋锁
2011-04-29 09:55:00 3043
原创 tasklet原理和源码分析
<br /> 在文章《softirq原理和源码分析》中对中断的下半部机制softirq进行了简单分析,在Linux内核中比较有名的中断下半部机制还有tasklet和workqueue等,本文重点围绕tasklet的原理和源码进行了详细的分析。 一 tasklet基本概念 tasklet是建立在softirq基础上的一种中断的下半部机制,在本质上与softirq基本相同,但却有简单的编程接口和宽松的锁规则。 tasklet是通过两种softirq来实现的,即HI_SOFTIRQ和TASKLET_S
2011-04-24 15:50:00 3274 2
原创 softirq原理以及源码分析
<br /> Linux 的softirq机制是与SMP紧密不可分的。为此,整个softirq机制的设计与实现中自始自终都贯彻了一个思想:“谁触发,谁执行”(Who marks,Who runs),也即触发软中断的那个CPU负责执行它所触发的软中断,而且每个CPU都由它自己的软中断触发与控制机制。这个设计思想也使得softirq 机制充分利用了SMP系统的性能和特点。 多个softirq可以并行执行,甚至同一个softirq可以在多个processor上同时执行。 一、softirq的实现 每个s
2011-04-19 17:06:00 7033 3
原创 Linux网络驱动源码分析(二)
上次讲到如何从pci核心驱动一步一步的进入了rtl8139网络驱动,并且调用的第一个函数是驱动的probe函数,即rtl8139_init_one,本文就从这里入手,简单的介绍rtl8139网络驱动的相关原理和源码分析。1 rtl8139_init_one 上文讲到当实现了驱动和设备的匹配后,需要设备和驱动做一些相应的工作,如正常使用前的初始化操作等,rtl8139_init_one就实现了一些初始化操作,原则上probe函数应该尽可能的短,尽量避免执行耗时的操作。rtl8139_
2011-04-17 20:27:00 7974 1
原创 Linux网络驱动源码分析(一)
<br /> 网络驱动是一种典型的PCI设备驱动,无论在嵌入式平台还是在PC领域,网络相关的项目开发有着比较广阔的前景,因此,分析当前Linux内核中网络设备的驱动,不但能了解网络相关的基本原理,而且可以借鉴Linux内核的先进的技术,将其应用到嵌入式或其他领域。本文以Linux内核中的rtl8139网络驱动为例,对网络驱动的源码进行了简单分析,并对其中涉及的相关概念和技术进行了简单的介绍。<br />一、PCI设备驱动模型<br /> rtl8139是典型的PCI设备,Linux内核的PCI
2011-04-17 16:17:00 7189
原创 Linux热插拔处理机制
一、 udev在2.6内核里,使用了udev来取代hotplug。据udev的作者Greg K.H说,之所以废弃了hotplug原因是sysfs的出现,这个东西会产生非常多的hotplug事件,远远超过了2.4的内核(只要实现了了kobject模型的设备驱动都回产生该事件)。所以hotplug变得复杂,而且因为hotplug都是bash所写,所以开始变得没有效率。于是出现了一个名叫hotplug-ng的项目,就是为了解决这个过于复杂以及缺乏效率的问题,ng应该是next generation的意思。但这个项
2011-04-08 16:01:00 2695
原创 usb驱动程序分析
<br />usb驱动是linux内核中比较复杂的驱动之一,因此,大多数usb教程建议从usb-skeleton开始学习usb驱动。个人认为这是相当正确的,usb-sekelton提供了一个usb驱动开发的模板,而且代码量较少,很适合初学者的学习。 记住,对于c语言的程序设计说,数据结构是整个程序的灵魂。因此,分析别人编写的代码的简洁的入口点就是高清代码中主要数据结构之间的关系。分析以usb-skeleton为例的完整的usb驱动框架,我们就从主要的几个数据结构入手。 一、usb驱动框架的主要数据结构
2011-03-30 19:47:00 6332 1
原创 completion使用方法
<br />Linux系统提供了一种比信号量更好的同步机制,即completion,它用于一个执行单元等待另一个执行单元执行完某事。Linux系统中与completion相关的操作主要有以下4种:<br /> (1) 定义completion<br /> struct completion my_completion;<br /> (2) 初始化completion<br /> init_completion(&my_completion);<br />
2011-03-28 17:06:00 4018
原创 KVM中使用usb设备
<br />进来学习usb驱动,看到网上都在分析usb-skeleton.c的驱动框架,就想对其调试一下,看一下其函数调用流程。要想调试usb-skeleton,首先需要kvm能够探测到usb设备;其次,在kvm中编译usb-skeleton.c;最后,卸载默认的usb-storage.ko,加载usb-skeleton.ko.1. kvm中使用usb设备要想在kvm中使用usb设备,只需在启动参数中增加usb选项即可。下面是我的kvm驱动命令,红色字体为新添加的参数:sudo kvm -drive f
2011-03-28 16:20:00 6212
原创 Request_irq和setup_irq的区别
<br /><br />Linux 内核提供了两个注册中断处理函数的接口:setup_irq和request_irq。这两个函数都定义在kernel/irq/manage.c里。<br /> <br /><br />/*<br /> * Internal function to register an irqaction - typically used to<br /> * allocate special interrupts that are part of the architecture.
2011-02-28 14:20:00 2728
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人