
linux
刘军卫
linux爱好者,主要致力于虚拟化云计算方面的研究,尤其专注于openstack,kvm,linux kernel等源码和架构的研究
微博:Marshal-Liu
展开
-
Fedora 15 缺少libc静态库解决方法
今天突然需要静态编译一个c文件,碰到了下面的错误:ld: can not find -lc很明显是提示找不到静态的c库libc.a,在系统中搜索了下确实没有发现这个库。解决方法:yum install glibc-static原创 2011-06-02 20:53:00 · 2609 阅读 · 0 评论 -
qemu中ELF文件的加载
前段时间分析了qemu中ELF文件的加载过程,个人感觉通过这个分析不但可以加深对ELF文件格式的理解,而且能够从侧面了解操作系统加载器的工作过程。一、ELF相关的背景知识1. ELF格式文件相关概念ELF格式文件主要包括以下三种类型的文件:可重定位的目标文件(.o文件) --> 用于链接生成可执行文件或动态链接库文件(.so)可执行文件原创 2011-12-13 20:34:46 · 9917 阅读 · 2 评论 -
qemu用户态仿真代码分析
1、 基本理论分析 qemu实现了两种模式的仿真:qemu系统仿真和qemu用户程序仿真。简单的理解,qemu系统仿真可以理解为仿真了一台PC,可以在上面安装OS,qemu用户程序仿真仅仅是对CPU的仿真,即可以运行不同体系结构的应用程序,可以理解为仿真了应用程序的运行环境。 下面通过实际的代码来分析qemu用户程序仿真的实现过程,在此之前,首先思考下可执行文件的加载执原创 2011-12-24 22:16:11 · 5969 阅读 · 3 评论 -
由匿名内存看swap分区
看代码的时候,从能看到通过mmap映射一段匿名内存,但是为什么非要映射一段匿名内存呢,匿名内存到底是干啥用的?对这个问题一直不解,今天google了很多资料,总结一下自己理解的内容。 1 匿名内存的定义 匿名内存是指那些在文件系统里没有相对应的”储备文件“的那些内存,堆和栈空间的内存都属于匿名内存。 2 匿名内存的用途 匿名内存来源于交换分区,即linux下的原创 2012-02-02 14:38:24 · 3093 阅读 · 0 评论 -
vim-latex 的安装与配置
由于习惯了vim的轻巧,不想在安装额外的tex编辑器,就按照自己的使用习惯对vim进行了相应的配置。1. vim-latex插件的安装下载地址:http://sourceforge.net/projects/vim-latex/files/将下载的vim-latex-1.8.23-20120125.768-git8b62284.tar.gz直接解压到~/.vim中2 vim配置原创 2012-02-14 21:59:12 · 17725 阅读 · 1 评论 -
CFS调度的总结 - (单rq vs 多rq)
近来和一个师兄谈到了CFS调度算法,我以前一直以为CFS的任务就绪队列是全局的,即有全局唯一的rq,但是师兄说是Per-CPU的,于是回来又仔细分析了下代码,发现果然是Per-CPU的。由这个简单的问题先来说说我为啥认为rq是全局唯一的,然后总结下CFS调度算法的一些关键点。 一、Per-CPU的rq和全局唯一的rq 在Linux-2.6内核时代,为了更好的支持多核,原创 2012-02-28 21:36:08 · 5331 阅读 · 3 评论 -
linux内核阅读总结
接着上篇CFS学习总结,下面对很久前看的一些Linux内核的主要模块写了个简单的总结,本总结个人针对某个模块的回忆,并不针对源码,主要目的是一方面加强自己的记忆,另一方面提炼出一些东西与大家分享(有时候代码看多了,对某个模块反而没有了一个整体的概念)。一、Linux 启动过程分析Linux的启动过程可以分为四个阶段:系统上电阶段, BIOS阶段,引导程序阶段,Linux内核原创 2012-02-28 21:37:01 · 2519 阅读 · 0 评论 -
浅谈Linux PCI设备驱动
注:理解PCI设备以及PCI驱动的一篇不错的文章 要弄清楚Linux PCI设备驱动,首先要明白,所谓的Linux PCI设备驱动实际包括Linux PCI设备驱动和设备本身驱动两部分。不知道读者理不理解这句话,本人觉得这句话很重要,对于PCI、USB这样的驱动来说,必须要理解这个概念,才能明白该如何看待Linux下的PCI和USB以及类似的总线型的驱动。 在http://t转载 2012-03-13 20:56:33 · 3439 阅读 · 0 评论 -
ubuntu 12.04 apt-get/wget/gem 使用代理安装软件
一、 apt-get 代理设置 由于公司通过代理上网,firefox的代理设置很容易就搞定了,但是通过apt-get安装软件还是不行,于是,查阅了很多资料,最多的方法就是网上流传的三种方法,试了一下还是失败,最后在详细阅读了apt-get的man之后终于成功了,与大家分享下。 每次可以通过下面的命令来安装软件。sudo apt-get i原创 2012-05-22 09:28:40 · 6674 阅读 · 0 评论 -
ubuntu 12.04下LAMP安装配置
有关LAMP的详细知识及技术参见网站:http://os.51cto.com/art/200804/71596.htm 1. LAMP 的安装sudo apt-get install apache2 mysql-server mysql-client php5 php5-gd php5-mysql由于LAMP大部分操作与/var/www目录相关,为了方便原创 2012-05-22 09:29:15 · 3341 阅读 · 0 评论 -
openssh 无密码访问配置
ubuntu下openssh的安装:sudo apt-get install openssh-server一、问题描述假设 A 为客户机器,B为目标机;要达到的目的:A机器ssh登录B机器无需输入密码;加密方式选 rsa|dsa均可以,默认dsa二、具体操作流程单向登陆的操作过程(能满足上边的目的):1、登录A机器 2、ssh-keygen -t [原创 2012-05-24 22:05:31 · 2437 阅读 · 0 评论 -
Redhat 使用CentOS的yum源进行升级或软件安装
Redhat默认的源不但速度不给力,而且软件版本陈旧,今天试着将Redhat默认源替换为CentOS的163源,发现速度能达到2M/s左右,而且版本都比较新,非常给力,与大家分享!(目前可以使用CentOS0-6.3软件仓库的软件)1. 删除原有的yum源# rpm -aq | grep yum|xargs rpm -e --nodeps原创 2012-07-19 15:54:48 · 6303 阅读 · 0 评论 -
简单理解LVM(Logical Volume Manager)的基本原理
早就想了解下LVM的原理,正好今天碰到个与LVM相关的问题,阅读了些LVM相关的资料,总结一下与大家分享!一. LVM 架构1.基本概念介绍:PP,物理分区(Physical Partition),如硬盘的分区,或 RAID 分区。PV,物理卷(Physical Volume),是 PP 的 LVM 抽象,它维护了 PP原创 2012-08-17 16:58:46 · 6925 阅读 · 2 评论 -
qemu指令翻译过程(1)-- ADD指令
本文通过qemu中add指令的翻译过程来加深了解向x86通用指令的结构以及qemu指令翻译的基本通过。1. x86通用指令的基本结构(摘自intel 手册)x86/x64 通用指令编码的核心是:Opcode,ModRM 以及 SIBOpcode 提供指令的操作码ModRM 提供操作数的寻址,以及对 opcode 进行辅助补充SIB 提供更丰富的 memory 寻址2.原创 2011-12-19 18:27:00 · 7089 阅读 · 1 评论 -
elf转化成bin后,bin文件变大的问题
在上一篇文章《位置无关代码(PIC)的思考》中提到,在elf文件转化成bin文件的过程中,输出段与段之间如果有空隙的话,objcopy会用0来填充段与段之间的空隙,也可以通过objcopy的选项--gap-fill= val来制定填充值的内容为val,这将会导致bin文件比elf文件大很多的问题,在很多嵌入式设备上将是无法接受的,因为嵌入式设备通常会将程序转化成bin烧写到FLASH中,这样做的目原创 2011-11-13 16:22:00 · 10767 阅读 · 4 评论 -
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 · 2844 阅读 · 0 评论 -
loop设备及losetup命令介绍
1. loop设备介绍 在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件原创 2011-10-16 18:31:44 · 43535 阅读 · 2 评论 -
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 · 40394 阅读 · 2 评论 -
Linux 新增系统调用的启示
最近在研究 Linux 内核的时间子系统,为下一篇长文《服务器程序中的日期与时间》做准备,无意中注意到了 Linux 新增的几个系统调用的对编写服务器代码的影响,先大致记录在这里。这篇博客也可算作前一篇《多线程服务器的常用编程模型》的一个注脚。1. 服务器程序的风格可能在变新的创建文件描述符的 syscall 一般都支持额外的 flags 参数,可以直接指定 O_NONBLOCK 和 FD转载 2011-11-02 22:11:43 · 1494 阅读 · 0 评论 -
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 · 1580 阅读 · 0 评论 -
系统调用和c库之间的关系
Tips: 用man查询函数时候有些并不能直接man + 函数名查到,例如:man fopen man 2 open所以可以用man+数字+函数名来试试,具体的内容可以查看 /usr/local/share/man/下面对应的目录___________________________________________________________________________原创 2011-11-03 22:27:29 · 9559 阅读 · 1 评论 -
linux编程之mprotect
mprotect: 设置内存访问权限mmap 的第三个参数指定对内存区域的保护,由标记读、写、执行权限的 PROT_READ、PROT_WRITE 和 PROT_EXEC 按位与操作获得,或者是限制没有访问权限的 PROT_NONE。如果程序尝试在不允许这些权限的本地内存上操作,它将被 SIGSEGV 信号(Segmentation fault,段错误)终止。在内存映射完成后,这些权限仍可原创 2011-11-06 22:46:12 · 22186 阅读 · 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 · 2270 阅读 · 0 评论 -
位置无关代码(PIC)的思考
应用程序必须经过编译、汇编和链接后才变成可执行文件,在链接时,要对所有目标文件进行重定位(relocation),建立符号引用规则,同时为变量、函数等分配运行地址。当程序执行时,系统必须把代码加载到链接时所指定的地址空间,以保证程序在执行过程中对变量、函数等符号的正确引用,使程序正常运行。在具有操作系统的系统中,重定位过程由操作系统自动完成。 在设计Bootloader程序时,必须在裸机环境中进原创 2011-11-13 11:49:46 · 15198 阅读 · 1 评论 -
Makefile常用函数总结
在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具 有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函 数的返回值可以当做变量来使用。 一、函数的调用语法函数调用,很像变量的使用,也是以“$”来标识的,其语法如下:$( ) 或是${ } 这里,就是函数名,make支持的函数不多。是函数的参数,参原创 2011-11-12 18:00:35 · 54223 阅读 · 4 评论 -
qemu源码分析之Makefile
通过分析qemu的Makefile可以了解qemu代码的组织方式以及qemu功能模块的划分,一方面,有助于理解qemu源代码设计思路,另一方面,有助于根据需求裁剪qemu代码,生成精简的符合制定要求的qemu。 为了更好的理解qemu的Makefile的设计,对于不熟悉makefile语法规则的同学建议阅读下面两篇文章: 1. 《Makefile常用函数分析》 2.原创 2011-11-12 18:06:57 · 6871 阅读 · 0 评论 -
ubuntu 11.10 安装systemtap
1. 从源安装systemtap$ sudo apt-get install systemtap2. 由于ubuntu 桌面版默认没有安装kernel-debug-info,所以安装了systemtap后仍然不能够追踪内核信息,因此需要手动安装kernel-debug-info包。 (1)查看当前内核版本$ uname -ar (2)下载对应内核版本的debug-info原创 2011-12-17 14:11:44 · 8583 阅读 · 12 评论