发行版制作及Anaconda基础
Anaconda是用于Fedora, RHEL等Linux发行版的安装程序,可以实现通过LiveCD,PXE,NFS等方式安装Linux系统以及利用kickstart文件实现无人值守的无交互安装。 发行版制作(Fedoran系统环境) 选择所需的软件包。 制作自己的发行版首先要确定你的发行版需要安装哪些软件。决定之后需要把这些软件相应的RPM包拷贝到某个目录,然后在这个目录下执行createrepo命令来创建RPM软件源。 创建ks文件。 ks文件用于指定制作发行版时用到的软件源及软件包,具体语法可参考 kickstart语法,下面是一个简单的例子: 编译及安装 获取源码:git clone git://git.fedorahosted.org/git/anaconda.git 安装依赖包: sudo yum install libtool $(grep ^BuildRequires: anaconda.spec.in | awk ‘{print $2}’) 安装、配置transifex:sudo yum install transifex-client;tx i ...
QEMU 2: 参数解析
#一、使用gdb分析QEMU代码# 使用gdb不仅可以很好地调试代码,也可以利用它来动态地分析代码。使用gdb调试QEMU需要做一些准备工作: 1, 编译QEMU时需要在执行configure脚本时的参数中加入–enable-debug。 2, 从QEMU官方网站上下载一个精简的镜像——linux-0.2.img。linux-0.2.img只有8MB大小,启动后包含一些常用的shell命令,用于QEMU的测试。 $wget http://wiki.qemu.org/download/linux-0.2.img.bz2 $bzip2 -d ./linux-0.2.img.bz2 3, 启动gdb调试QEMU: gdb --args qemu-system-x86_64 -enable-kvm -m 4096 -smp 4 linux-0.2.img -smp指定处理器个数。 #二、参数解析用到的数据结构# QEMU系统模拟的主函数位于vl.c文件,无论是qemu-system-x86_64还是qemu-system-ppc64,都是从vl.c中的main函数开始执行。下面先介绍main ...
QEMU 1: 使用QEMU创建虚拟机
一、QEMU简介QEMU是一款开源的模拟器及虚拟机监管器(Virtual Machine Monitor, VMM)。QEMU主要提供两种功能给用户使用。一是作为用户态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码。二是作为虚拟机监管器,模拟全系统,利用其他VMM(Xen, KVM, etc)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。 用户可以通过不同Linux发行版所带有的软件包管理器来安装QEMU。如在Debian系列的发行版上可以使用下面的命令来安装: sudo apt-get install qemu 或者在红帽系列的发行版上使用如下命令安装: sudo yum install qemu -y 除此之外,也可以选择从源码安装。 ##获取QEMU源码## 可以从QEMU官网上下载QEMU源码的tar包,以命令行下载2.0版本的QEMU为例: $wget http://wiki.qemu-project.org/download/qemu-2.0.0.tar.bz2 $tar xjvf qemu-2.0.0.tar.bz2 如果需要参与到QEMU的开发中,最 ...
Linux系统中的信号量机制
1、信号量的定义: struct semaphore { spinlock_t lock; unsigned int count; struct list_head wait_list; }; 在linux中,信号量用上述结构体表示,我们可以通过该结构体定义一个信号量。 2、信号量的初始化: 可用void sema_init(struct semaphore *sem, int val);直接创建,其中val为信号量初值。也可以用两个宏来定义和初始化信号量的值为1或0: DECLARE_MUTEX(name) : 定义信号量name并初始化为1 DECLARE_MUTEX_LOCKED(name) : 定义信号量name并初始化为0 还可以用下面的函数初始化: void init_MUTEX(struct semaphore *sem); //初始化信号量的值为1 void init_MUTEX_LOCKED(struct semaphore *sem); //初始化信号量的值为0 3、信号量的原子 ...
基于Linux与lpc3250开发板的交叉开发环境搭建
###一、Bootloader的安装(在windows下进行) 1、什么是Bootloader: 要想弄明白什么是Bootloader,我们先从PC上的bootloader说起。PC上的BIOS和硬盘上的引导记录有着和嵌入式开发板中的bootloader类似的作用。PC的Bootloader由BIOS和MBR组成,BIOS固化在主板的一个芯片上,MBR则是硬盘的主引导扇区的缩写。PC启动后,首先执行BIOS的启动程序,根据用户的COMS设置,BOIS加载硬盘MBR的启动数据,并把系统的控制权交给保存在MBR中的OS Loader(如grub),最后再由OS Loader将控制权交给OS内核。 了解了什么是PC中的Bootloader,我们再来看什么是嵌入式系统中的Bootloader。嵌入式系统中没有与BIOS类似的芯片,这就需要开发人员自己设计Boootloader。不过,我们不必从零开始写这些代码,已经有公司和组织为大多数嵌入式系统写好了Bootloader。 2、lpc3250的Bootloader组成: kickstart:位于Flash的Block0,负责加载从Flas ...
ls命令实现分析
###一、ls命令的功能分析 使用man ls命令查看ls命令手册(功能描述和主要选项摘录如下): List information about the FILEs (the current directory by default).Sort entries alphabetically if none of -cftuvSUX nor –sort. 列出文件(默认当前目录)信息,如果没有-cftuvSUX和–sort选项,就按照字母顺序排序。 -a, --all do not ignore entries starting with .:不忽略以.开始的隐藏文件 -A, --almost-all do not list implied . and ..:不列出 .(当前目录)和..(上级目录) -B, --ignore-backups do not list implied entries ending with ~:忽略以~结尾的备份文件 -c with -lt: sort by, and show, ctime (time of last modificatio ...
FUSE分析总结
###FUSE简介及原理 FUSE(Filesystem in Userspace)是sourceforge上的一个开源项目,它可以为用户提供编写用户态文件系统的接口。使用FUSE,用户可以不必熟悉Kernel代码,使用标准C库、FUSE库以及GNU C库便可设计出自己需要的文件系统。 FUSE由三个部分组成:FUSE内核模块、FUSE库以及一些挂载工具。 FUSE内核模块实现了和VFS的对接,它看起来像一个普通的文件系统模块;另外,FUSE内核模块实现了一个可以被用户空间进程打开的设备,当VFS发来文件操作请求之后,它将该请求转化为特定格式,并通过设备传递给用户空间进程,用户空间进程在处理完请求后,将结果返回给FUSE内核模块,内核模块再将其还原为Linux kernel需要的格式,并返回给VFS。 FUSE库负责和内核空间的通信,它接收来自/dev/fuse的请求,并将其转化为一系列的函数调用,并将结果写回到/dev/fuse。 挂载工具用以实现对用户态文件系统的挂载。 当系统用户在输入ls /home/kelvin命令之后,最终会调用到Ext4文件系统内的相关函数来对文件进行处理 ...
NBD-网络块设备[翻译]
1997年4月,Pavel Machek 写了他的网络块设备代码,并被当时的Linux Kernel 2.1.55接受。Pavel 在随后的四个发行版(对应的内核版本为55、101、111、132)中维护并升级了他的代码。Andrzej M. Krzysztofowicz贡献了64位机上运行的版本,随后Stephen Tweedie 为其提出了许多的专业建议,尤其是引入了基于信号量的锁机制,使得代码在对称多处理器系统中能够安全的运行。作者们已将其增强以便于运用于工业环境之中。本文描述了网络块设备、驱动、以及它的开发历史。 NBD的驱动程序提供了一种在这个面向网络的世界中更为普遍的访问模型。它在本地客户端模拟了一个块设备,比如一个磁盘或者是一块磁盘分区,但实际提供物理支持的却是通过网络连接的远程服务器。在本地,该设备看起来是一个磁盘分区,但那只是远程服务器的表面。远程服务器是一段轻量级的守护进程代码,它提供对远程设备的访问,而且该守护进程并不需要运行在linux平台之上。本地操作系统必须是linux,而且要支持Linux内核NBD驱动,并且能够运行本地客户端进程。安装NBD可被用来进行远 ...
内核源码编译
编译内核的目的在于把纷繁复杂的内核源码编译成一个可执行的镜像文件。当然,内核功能复杂,并不是所有的 功能都需要用到,所以,我们在使用make对其编译前,要做一件事——配置。kconfig和make就好比将军和士兵。kconfig是指导方向的,make是干活的。kconfig对内核进行配置,告诉make,哪些功能需要编译进内核,哪些功能要作为模块编译,make便根据配置文件来进行编译。 ###编译步骤 获取内核源码(这几天kernel.org被黑了,该步骤方法暂时用不了): 1、使用git工具: ubuntu下安装git: sudo apt-get install git 使用git检出Linus分支的版本: git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.t.git 检出之后便可以通过下列命令进行升级: git pull 使用上述两个命令便可以获得内核源码的最新版本。 2、直接从kernel.org上下载源码包: 源码包有两种格式: linux-x.y.z.tar.bz2和linux ...
Linux基础知识总结
一:什么是Linux?Linux被称为类Unix操作系统,遵循POSIX标准。Linux与Unix的最大不同在于源代码的开放性和自由性。 Linux的发音:Linux发音 Linux的发展历史:1991年9月17日,Linus Torvalds 在网上发布了Linux的0.01版本。 1994年3月13日,在众多程序员的努力下,Linux 1.0版本正式发布。呵呵,人多力量大,要学会分享知识。 1996年,Linux 2.0发布,其重要特点是开始支持对称多处理器。 2004年12月18日,Linux2.6.0版本发布。 二:Linux所遵循的标准1、POSIX(Portable Oprating System Interface of Unix):即可移植操作系统接口,由IEEE于1988年发布。其作用是使在某一Unix版本下开发的应用程序也能应用于其他Unix版本,以此保证了软件代码的可移植性。 2、LSB(Linux Standard Base):由于Linux遵循POSIX标准,不同Linux发行版之间的源代码级有很好的兼容性,但二进制文件的兼容性不足,为解决这一 ...





