linux内核与编程
文章平均质量分 63
快乐的霖霖
一个人默默的奋斗者
展开
-
linux内核对象管理
linux内核对象管理 内核中很多地方都需要跟踪记录C语言中结构的实例。尽管这些对象的用法大不相同,但各个子系统的某些操作都非常类似,如引用计数,内核为了减少代码复制,采用了一般性的方法来管理内核对象。所引入的框架并不只是为了减少代码复制,同时也为内核不同部分管理的对象提供了一致的视图。 一般性的内核对象机制可用于执行下列对象操作: 1. 引用计数;原创 2012-02-24 17:10:48 · 1179 阅读 · 0 评论 -
DMA映射
DMA映射DMA映射一个DMA映射是要分配的DMA缓冲区与为该缓冲区生成的、设备可访问地址的组合。DMA映射建立了一个新的结构类型---dma_addr_t来表示总线地址。dma_addr_t类型的变量对驱动程序是不透明的,唯一允许的操作是将它们传递给DMA支持例程以及设备本身。根据DMA缓冲区期望保留的时间长短,PCI代码有两种DMA映射:原创 2012-02-25 12:07:53 · 1360 阅读 · 0 评论 -
kobject编程模式
kobject编程模式 在sysfs中创建一个简单的子目录/sys/kernel/foo/,在这个目录下,还创建了1个文件:value。如果往这些文件中写入一个整数,随后可以读出。 kobject编程模式包括以下几个步骤。 1. 定义内核对象结构 我们将这个内核对象结构命名为foo,前面提到,应该将struct kobject作为它的一个域,此原创 2012-02-25 10:18:56 · 931 阅读 · 0 评论 -
linux2.6.29 CFS调度详细分析
linux2.6.29 CFS调度详细分析 众所周知,linux最新的内核采用了CFS的调度机制,网上也有不少文章对CFS调度的源码做了详细的分析,但是大部分的文章太注重细节了,所以没有把CFS的原理进行一下从整体上的概括,基于这个原因,本文要从CFS调度的基本原理以及在公平调度类的整个执行过程为主线来进行详细的说明。 CFS(completely fair schedule),故名思原创 2012-03-12 15:21:47 · 957 阅读 · 0 评论 -
CPU亲和力--affinity
CPU亲和力--affinityCPU亲合力就是指在Linux系统中能够将一个或多个进程绑定到一个或多个处理器上运行. 一个进程的CPU亲合力掩码决定了该进程将在哪个或哪几个CPU上运行.在一个多处理器系统中,设置CPU亲合力的掩码可能会获得更好的性能. 一个CPU的亲合力掩码用一个cpu_set_t结构体来表示一个CPU集合, 下面的几个宏分别对这个掩码集进行转载 2012-03-12 16:53:56 · 2130 阅读 · 0 评论 -
2.6内核的通用的编译步骤
2.6内核的通用的编译步骤(1)下载源码并解压 虽然我们可以将内核源码存放在任何自己找得到的地方,但通常还是会将内核源码下载到/usr/src目录并解压。 #cd /usr/src #wget ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2原创 2012-03-29 20:38:55 · 737 阅读 · 0 评论 -
container_of 详解
container_of 详解 我们经常在linux内核中看到container_of宏,使用这个宏的就可以很容易地获得某数据结构中某成员的入口地址。 #define container_of(ptr, type, member) ({ / const typeof( ((type *)0)->member ) *__mptr =原创 2012-03-13 19:45:14 · 1029 阅读 · 0 评论 -
在Linux下安装多个版本的gcc
在Linux下安装多个版本的gcc1.查看当前linux版本 内核版本:cat /proc/version 或者:uname -a2.查看gcc的版本 gcc -v 或者: gcc --version 或者:查看当前安装的gcc的各个版本: ls /usr/bin/gcc* -l3.安装多个版本的gcc 例如当前原创 2012-03-30 13:39:44 · 2177 阅读 · 0 评论 -
linux kernel文件系统数据结构file_system_type
linux kernel文件系统数据结构file_system_type 文件系统类型用于表示各种不同的文件系统,如fat, sysfs, proc等等,对于每个不同的文件系统,都以struct file_system_type进行描述,内核将它们以单链表的形式链接起来,其表头由全局变量file_systems表示。 文件系统类型的 数据结构位:file_system原创 2012-04-08 21:55:13 · 4932 阅读 · 0 评论 -
如何参与LINUX内核开发
如何参与LINUX内核开发英文版: http://www.kernel.org/doc/Documentation/HOWTO英文版维护者: Greg Kroah-Hartman 翻译者: 李阳 Li Yang 维护者: 李阳 Li Yang 校译者: 钟宇 TripleX Chung 陈琦 Maggie Chen 王聪 Wang转载 2012-04-14 08:48:05 · 1717 阅读 · 0 评论 -
linux设备驱动之构造和运行模块
构造和运行模块 今天开始学习《linux设备驱动程序》第三版这本书,在看到第二章的构造和运行模块的时候,我在linux平台上做了一个小测试。下面就让我说下。 在宿主机上安装开发工具和下载linux源码(要求版本号和目标机上的linux内核版本一致)。开发工具主要有gcc、gdb、make等,这些工具在redhat或fc中默认就安装了,在debian或Ubun原创 2012-04-19 11:30:00 · 1247 阅读 · 0 评论 -
linux下保护模式之CPL,RPL,DPL总结
linux下保护模式之CPL,RPL,DPL总结 先说下特权级的概念,在保护模式下,系统依靠特权级来实施代码和数据的保护,相当于权限啦。特权级共有4 个级别,0,1,2,3,数字越小特权越高。 较为核心的代码和数据放在较高(靠内)的层级中,处理器用此来防止较低特权的任务在不被允许的情况下访问处于高特权级的段。为了防止概念混淆,我们不用特权级大小来说明,改为内层(高),原创 2012-05-29 10:36:10 · 1305 阅读 · 0 评论 -
RHEL 6.0(6.1等)使用CentOS yum源
RHEL 6.0(6.1等)使用CentOS yum源 1、删除RHEL原有的yum rpm -aq|grep yum|xargs rpm -e --nodeps #删除 2、下载新的yum安装包 #这里我们使用CentOS的yum源 wget http://mirrors.163.com/centos/6/os/x86_64/Packages/python-in原创 2012-06-04 10:22:29 · 1906 阅读 · 0 评论 -
ubuntu10.04下Eclipse&pydev搭建python环境
ubuntu10.04下Eclipse&pydev搭建python环境 ubuntu10.04已经自带了python,用户可以在命令行中输入python,就启动了python,就可以写程序来测试了,也可以通过用gedit写一些脚本,然后在命令行中测试。由于大部分用户习惯了windows下的集成开发环境,其实在linux下也有很多程序的集成开发环境,例如python就有IDE,下面原创 2012-05-10 16:48:45 · 1549 阅读 · 0 评论 -
x86中内存管理寄存器
x86中内存管理寄存器 处理器提供了4个内存管理寄存器(GDTR、LDTR、IDTR和TR),用于指定内存分段管理所用系统表的基地址,如图4-2所示。处理器为这些寄存器的加载和保存提供了特定的指令。 GDTR、LDTR、IDTR和TR都是段基址寄存器,这些段中含有分段机制的重要信息表。GDTR、IDTR和LDTR用于寻址存放描述符表的段。TR用于寻址一个特殊的任原创 2012-05-25 21:36:06 · 1019 阅读 · 0 评论 -
linux命令之ar—创建静态库.a文件
linux命令之ar—创建静态库.a文件用途说明: 创建静态库.a文件。 常用参数:格式:ar rcs libxxx.a xx1.o xx2.o参数r:在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中有一个模块在库中不存在,ar显示一个错误消息,并不替换其他同名模块。默认的情况下,新的成员增加在库的结尾处,可以使用其他原创 2012-06-15 20:27:03 · 3644 阅读 · 0 评论 -
gdb基本命令
gdb基本命令 命令 描述backtrace(或bt) 查看各级函数调用及参数finish 连续运行到当前函数返回为止,然后停下来等待命令frame(或f) 帧编号原创 2012-06-16 16:13:05 · 797 阅读 · 0 评论 -
编译出错 "undefined reference to" .
编译出错 "undefined reference to" .klib.c:(.text+0xda): undefined reference to `__stack_chk_fail'貌似是说 _stack_chk_fail 我们有一个未定义的函数引用?可是我们没有用过这个函数啊?左思右想,看来似乎不是我们程序的问题了。来看看网上怎么说的:一些版本的gcc编译时常会出现 unde原创 2012-06-19 23:45:36 · 2720 阅读 · 0 评论 -
linux如何解压缩文件的命令
linux如何解压缩文件的命令 大致总结了一下linux下各种格式的压缩包的压缩、解压方法。但是部分方法我没有用到,也就不全,希望大家帮我补充,我将随时修改完善,谢谢! .tar 解包:tar zxvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) --------------原创 2012-06-19 23:29:39 · 836 阅读 · 0 评论 -
orange's一个操作系统的实现的前五章文件组织整理
Orange's一个操作系统的实现的前五章文件组织整理Tree:|---Makefile ||---a.img (虚拟软盘)||---bochsrc (bochs虚拟机配置)||___boot| |----boot.asm (编译为boot.bin文件后被BIOS加载到内存,然后在a.img中\| |原创 2012-06-21 14:15:01 · 1704 阅读 · 0 评论 -
Ubuntu下中文输入法ibus的安装
Ubuntu下中文输入法ibus的安装 ubuntu 默认提供的中文输入法非常不好,几乎不能用。所以我就选用安装拼音输入法ibus-pinyin。 在终端输入命令:sudo apt-get install ibus-pinyin ibus-pinyin-db-android 安装完成后点击左上角的系统->首选项->IBUS首选项切换到输入法选项卡,点添加左边的下拉列表框原创 2012-06-24 22:08:05 · 1022 阅读 · 0 评论 -
pthread相关简介
pthread相关简介 int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void*(*start_routine)(void*), void *arg);参数tid用于返回新创建线程的线程号;start_routine是线程函数指针,线程从这个函数开始运行;arg是传递给线程函数的参数。由于start_ro原创 2012-06-26 09:35:22 · 795 阅读 · 0 评论 -
Ubuntu下搭建java开发环境
Ubuntu下搭建java开发环境 下面是Ubuntu 10.04下的搭建SUN JAVA配置步骤 注明:系统也已经自带了java开发环境,但是好像不能用,特别是使用javac -version的时候就说找不到javac了。 到oracle官网下载jdk-6u20-linux-i586.bin文件 将jdk-6u20-linux-i586.bin复制到/us原创 2012-06-27 09:57:18 · 1867 阅读 · 0 评论 -
Ubuntu下的防火墙简要记录
Ubuntu下的防火墙简要记录1.安装 sudo apt-get install ufw2.启用 sudo ufw enable #启用 系统启动自动开启sudo ufw default deny #默认所有外部对本机的访问3.开启/禁用sudo ufw allow|deny [service]打开或关闭某个端口,例如:sudo ufw allow smtp #25原创 2012-06-25 22:03:58 · 1360 阅读 · 0 评论 -
readline 命令行程序
readline 命令行程序一、readline简介readline 是一个强大的库,只要使用了它的程序,都可以用同一个配置文件配置,而且用同样的方法操作命令行,让你可以方便的编辑命令行。readline 方法:从 命令行中获取一整行(一直到换行符,但不包括换行符),并返回由此得到的字符串。 二、示例代码[cpp] view plaincopyprint?转载 2012-06-27 22:22:28 · 2107 阅读 · 0 评论 -
内核同步机制-优化屏障和内存屏障
内核同步机制-优化屏障和内存屏障优化屏障 编译器编译源代码时,会将源代码进行优化,将源代码的指令进行重排序,以适合于CPU的并行执行。然而,内核同步必须避免指令重新排序,优化屏障避免编译器的重排序优化操作,保证编译程序时在优化屏障之前的指令不会在优化屏障之后执行。Linux用宏barrier实现优化屏障,gcc编译器的优化屏障宏定义列出如下(在include/linux/com原创 2012-07-15 21:16:30 · 921 阅读 · 0 评论 -
linux内存映像
linux内存映像内存映像其实就是在内存中创建一个和外存文件完全相同的映像。用户可以将整个文件映射到内存中也可以部分映射到内存。系统会将对内存映像的改动如实的反映到外存文件中。从而实现了通过内存映像对外存文件的操作。 内存映像的特点:1、 可以加快对IO的操作速度。2、 用户可以通过指针对文件进行操作,间接~~~3、 实现了文件数据的共享,将外存文件映射到共享内存中原创 2012-09-06 17:27:30 · 1347 阅读 · 0 评论 -
如何在C语言中调用shell命令
如何在C语言中调用shell命令 在linux操作系统中,很多shell命令使用起来非常简单,这些shell命令的程序实现已经被底层实现好。有时候需要在程序中调用shell命令,这样可以就不用在控制台上手动输入shell命令了,下面就以三个函数为例来讲解如何在C语言中调用shell命令。1、system(执行shell 命令)相关函数 fork,execve,w原创 2012-09-06 16:50:46 · 2988 阅读 · 0 评论 -
linux下libxml库的安装及编译
linux下libxml库的安装及编译1. 下载和安装LIBXML2 Libxml2是个C语言的XML程式库,能简单方便的提供对XML文件的各种操作,并且支持XPATH查询,及部分的支持XSLT转换等功能。Libxml2的下载地址是http://xmlsoft.org/,完全版的库是开源的,并且带有例子程式和说明文件。最佳将这个库先下载下来,因为这样能查看其中的文件和例原创 2012-09-07 10:58:30 · 8039 阅读 · 1 评论 -
Ubuntu10.10配置与安装DHCP服务器
Ubuntu10.10配置与安装DHCP服务器 DHCP基于客户/服务器模式。当DHCP客户端启动时,它会自动与DHCP服务器通信,由DHCP服务器为DHCP客户端供给自动分配IP地址的服务。 安装了DHCP服务软件的服务器称为DHCP服务器,而启用了DHCP功效的客户机称为DHCP客户端,DHCP服务器是以地址租约的方法为DHCP客户端供给服务的,它有以下两种方法原创 2012-09-29 16:20:13 · 1307 阅读 · 0 评论 -
C/C++宏定义的可变参数
C/C++宏定义的可变参数编写代码的过程中,经常会输出一些调试信息到屏幕上,一般会调用printf这类的函数。但是当调试解决之后,我们需要手工将这些地方删除或者注释掉。最近在看《Linux C编程一站式学习》这本书,就想到一个方法:void myprintf(char* fmt, ...){}#ifdef DEBUG#define printf(fm原创 2012-10-02 10:47:07 · 4518 阅读 · 0 评论 -
makefile 自动处理头文件的依赖关系
makefile 自动处理头文件的依赖关系 现在我们的Makefile写成这样:all: mainmain: main.o stack.o maze.ogcc $^ -o $@main.o: main.h stack.h maze.hstack.o: stack.h main.hmaze.o: maze.h main.hclean:-rm m原创 2012-10-07 11:15:04 · 2429 阅读 · 0 评论 -
Linux下C编译系统
Linux下C编译系统编译过程概述了解一些编译知识的读者都知道,所谓编译,就是在编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件感谢格式的要求链接生成可执行程序。UNIX环境下的C编译系统所遵循的也是这么一个一般的过程。值得注意的是这个过程并不是有某个单个程序完成的,而是有多原创 2012-09-19 14:44:58 · 1603 阅读 · 0 评论 -
Linux下编译链接多个源文件
Linux下编译链接多个源文件add.c 的内容int Add(int a,int b){ int result; result=a+b; return result;} minus.c 的内容 int Minus(int a,int b){ int result; result=a-b; return r原创 2012-09-19 15:08:00 · 1103 阅读 · 0 评论 -
字符设备驱动程序
字符设备驱动程序 下面以一个简单的例子来讲解下字符设备驱动程序,首先需要有内核环境。 Linux下的设备驱动程序被组织为一组完成不同任务的函数的集合,通过这些函数使得Windows的设备操作犹如文件一般。在应用程序看来,硬件设备只 是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作,如open ()、close ()、read ()、wr原创 2012-10-16 16:57:18 · 924 阅读 · 0 评论 -
Relayfs介绍
Relayfs介绍relayfs介绍Relay 是一种从 Linux 内核到用户空间的高效数据传输技术。通过用户定义的 relay 信道,内核空间的程序能够高效、可靠、便捷地将数据传输到用户空间。通过灵活运用改造也可双向传输。Relay 特别适用于内核空间有大量数据需要传输到用户空间的情形。Relay 的前身是 RelayFS,即作为 Linux 的一个新型文件系统,即用虚拟文原创 2012-10-29 09:03:27 · 2328 阅读 · 0 评论 -
linux内核调试中的printk()函数详解
linux内核调试中的printk()函数详解我们在使用printk()函数中使用日志级别为的是使编程人员在编程过程中自定义地进行信息的输出,更加容易地掌握系统当前的状况。对程序的调试起到了很重要的作用。(下文中的日志级别和控制台日志控制级别是一个意思)printk(日志级别 "消息文本");这里的日志级别通俗的说指的是对文本信息的一种输出范围上的指定。日志级别一共有8原创 2012-10-30 14:19:04 · 3086 阅读 · 0 评论 -
/dev/zero 简介
/dev/zero 简介dev/zero是Linux提供的一个特殊的字符设备,它的特点是可以永远读该文件,每次读取的结果都是二进制0。下面的命令可以生成一个100M的空镜像文件:dd if=/dev/zero of=100M.img bs=1M count=100100+0 records in100+0 records out1原创 2012-10-30 11:17:10 · 1178 阅读 · 0 评论 -
undefined reference to ceil 链接错误
undefined reference to ceil 链接错误原因今天编译一个C文件,输入下面的代码后GOP12.c文件代码大致为#include #include #include int main(int argc,char *argv[]) { //某个地方用到了数学函数 } GCC编译该文件gcc -o g原创 2012-10-23 08:58:56 · 6270 阅读 · 2 评论 -
linux内核定时器机制详解
linux内核定时器机制详解Linux内核2.4版中去掉了老版本内核中的静态定时器机制,而只留下动态定时器。相应地在timer_bh()函数中也不再通过run_old_timers()函数来运行老式的静态定时器。动态定时器与静态定时器这二个概念是相对于Linux内核定时器机制的可扩展功能而言的,动态定时器是指内核的定时器队列是可以动态变化的,然而就定时器本身而言,二者并无本质的区别。考虑到原创 2012-11-02 11:31:55 · 988 阅读 · 0 评论