Linux
- Linux内核发展回顾
-
软件世界 邹震
尽管有人认为Linux 2.4内核与其说是一个革命性的版本,不如说是一个进化版本,但现在全世界的Linux爱好者都在为之欢呼。此时此刻,我想做的是带大家回顾一下Linux内核的发展史。
是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖
- 分类:Linux 查阅全文
- Linux内核调试技术介绍
- Linux调试技术介绍
对于任何编写内核代码的人来说,最吸引他们注意的问题之一就是如何完成调试。
由于内核是一个不与某个进程相关的功能集,其代码不能很轻松地放在调试器中执
行,而且也不能跟踪。
本章介绍你可以用来监视内核代码和跟踪错误的技术。
用打印信息调试
最一般的调试技术就是监视,就是在应用内部合适的点加上printf调用。当你调试内
核代码的时候,你可以用pri
- 分类:Linux 查阅全文
- Linux内核编程实战经验谈
- 作者:李艳彬
---------------------------------------------------------
当前,在国产自主版权的操作系统这面大旗的倡导下,IT界掀起了一浪高过一浪的Linux编程热潮。Linux以其源码开放、配置灵活等不可多得的优越性吸引着越来越多的编程爱好者深入Linux的内核开发。笔者近来实践过一个Linux的实时化改造课题任务,积累
- 分类:Linux 查阅全文
- Linux内核编程(字符设备文件)
- 2.字符设备文件
那么,现在我们是原始级的内核程序员,我们知道如何写不做任何事情的内核模块。我们为自己而骄傲并且高昂起头来。但是不知何故我们感觉到缺了什么东西。患有精神紧张症的模块不是那么有意义。
内核模块同进程对话有两种主要途径。一种是通过设备文件(比如/dev 目录中的文件),另一种是使用proc文件系统。我们把一些东西写入内核的一个主要原因就是支持一些硬件设备,所以我们从设备文件开始
- 分类:Linux 查阅全文
- Linux内核编程(阻塞进程)
- 著者:Ori Pomerantz
翻译:徐辉
8.阻塞进程
如果有人让你做你一时做不到的事情你会怎么办呢?如果你是个人被另一个人打扰,你唯一可以做的就是对他说:“现在不行,我很忙,走开!”但是如果你是内核模块,被进程打扰,你就有另一种选择。你可以让这个进程去挂起直到你可以为之提供服务。毕竟,进程是在不停的被内核挂起或唤醒(这就是多个进程看上去同时在一个处理器上运行的方法)。
这
- 分类:Linux 查阅全文
- Linux内核编程(结论)
- 著者:Ori Pomerantz
翻译:徐辉
其他
Goods and Services
I hope nobody minds the shameless promotions here. They are all things which are likely to be of use to beginning Linux Kernel Module programme
- 分类:Linux 查阅全文
- Linux内核编程(和设备文件对话)
- 著者:Ori Pomerantz
翻译:徐辉
5.和设备文件对话(写和IOCTLS)
设备文件是用来代表物理设备的。多数物理设备是用来进行输出或输入的,所以必须由某种机制使得内核中的设备驱动从进程中得到输出送给设备。这可以通过打开输出设备文件并且写入做到,就想写入一个普通文件。在下面的例子里,这由device_write实现。
这不是总能奏效的。设想你与一个连向modem的
- 分类:Linux 查阅全文
- Linux内核编程(对称多处理)
- 著者:Ori Pomerantz
翻译:徐辉
12.对称多处理
提高硬件性能的最简单(最便宜)的方法是在主板上增加CPU。这可以让不同CPU做不同工作(非对称多处理)或者让它们并行运行,做相同工作(对称多处理,也叫 SMP)。有效的进行飞对称多处理需要有对计算机任务执行专业知识,但在一般操作系统比如Linux中这是不可知的。另一方面,对称多处理相对容易实现。所谓相对,就是说不是真的
- 分类:Linux 查阅全文
- Linux内核编程(调度任务)
- 著者:Ori Pomerantz
翻译:徐辉
10.调度任务
经常地,我们有必须定时做或者经常做的“家务事”。如果这个任务由一个进程完成,我们可以把通过把它放入crontab文件而做到。如果这个任务由一个内核模块完成,我们有两种可能的选择。第一种是把一个进程放入crontab文件,它将在必要的时候通过一个系统调用唤醒模块,比如打开一个文件。然而,这样做时非常低效的,我们需要运行一个
- 分类:Linux 查阅全文
- Linux内核编程(中断处理程序)
- 著者:Ori Pomerantz
翻译:徐辉
11.中断处理程序
除最后一章外,目前我们在内核中所做的事情就是响应一个进程的请求,可能通过处理一个特殊文件、发送一个ioctl或进行一个系统调用。但是内核的工作不只是响应进程请求,另一个也是很重要的工作是向连接到机器的硬件发布命令或消息。
CPU和其他硬件的交互有两种。第一种是CPU给硬件发命令。另一种是硬件需要告诉CPU一些
- 分类:Linux 查阅全文
- Linux内核编程(启动参数)
- 6.启动参数
在以前的许多例子里,我们要把一些东西强制地写入内核模块,比如/proc文件名或设备主码,以至我们可以用ioctl’s处理它。这样句违背了Unix以及Linux的原则:写用户可以自由设定的灵活程序。
在程序或者内核模块启动之前通知它一些消息是通过命令行参数做到的。在内核模块的情况下,我们没有argc和argv参数,而是有更好的东西。我们可以在内核模块里定义全局变量,insmod
- 分类:Linux 查阅全文
- Linux内核编程(系统调用)
-
著者:Ori Pomerantz
翻译:徐辉
7.系统调用
到此为止,我们做的事情就是使用定义好的内核机制来注册/proc文件和设备句柄。这在做内核常规处理的事情时是很理想的。但是如果你希望做一些非常规的事情、改变系统的行为的时候该怎么办呢?这就必须依靠自己。
这就是内核编程变得危险的地方。在写下面的例子的时候,我关闭了open系统
- 分类:Linux 查阅全文
- Linux内核编程(替换printk)
- 著者:Ori Pomerantz
翻译:徐辉
9.替换printk’s
在开始(第1章)的时候,我们说过X与内核模块编程并不混合。这开发内核的时候这是正确的,但是在实际应用中我们希望把消息送到给模块的命令发来的任何一个tty(注9.1)。这在内核模块被释放时确认错误是很重要的,因为它将会在所有内核中使用。
这样做的方法是使用当前的概念,一个指向当前运行任务的指针,从而得到当
- 分类:Linux 查阅全文
- Linux内核编程(使用/proc进行输入)
- 著者:Ori Pomerantz
翻译:徐辉
4.使用/proc进行输入
现在我们已经有了两种方法从内核模块中产生输出:注册一个设备驱动并且mknod一个设备文件,或者创建一个/proc文件。这可以使内核告诉我们任何信息。现在的问题是我们没有办法回答给内核。我们象内核输入的第一种方法是写给/proc文件。
因为proc文件系统主要是为满足内核向进程报告其状态的,没有为输入留出特
- 分类:Linux 查阅全文
- Linux内核编程(前言)
- 著者:Ori Pomerantz
翻译:徐辉
译者前言
这是我的第一次尝试,在此之前我还没有接触过Linux,所以翻译得很粗糙,有的地方我自己也不明白,只好照着翻下来。而且急急匆匆,毛毛草草,一定有许多错误或不当之处。我一向就是这么毛草的啦,总是给我的组织丢脸。所以如果你发现了有什么错误或者解释不清的地方,希望能够指正,敬请把您的金玉之言发到我的信箱里。
本人此
- 分类:Linux 查阅全文
- Linux内核编程(/proc文件系统)
-
3./proc文件系统
在Linux中有一个另外的机制来使内核及内核模块发送信息给进程——/proc文件系统。/proc文件系统最初是设计使得容易得到进程的信息(从名字可以看出),现在却被任意一块有内容需要报告的内核使用,比如拥有模块列表的/proc/modules和拥有内存使用统计信息的/proc/meminfo。
使用proc文件系统的
- 分类:Linux 查阅全文
- Linux内核重编译常见故障及其解决方法
- 内核重编译对很多Linux爱好者来说是一个不小的挑战。笔者认为,很多Linux用户对内核通常有一种误解,他们认为普通用户是不能调整内核的。其实,就实际情况而言,这种认识是不全面的。应该说,内核重编译是具有一定深度和复杂性的,同时也是易失败的配置工作。
如果大家留意那些比较权威的Linux参考工具书的话,就会发现很多原版书籍都把内核重编译作为一个很重要的章节进行介绍。本文将要向读者介绍的并不
- 分类:Linux 查阅全文
- Linux内核模块编程--替任务调度
- 任务调度
常常的,我们有‘家务管理’的任务需要在某个时间做或者偶尔经常如此。如果任务由进程完成,我们可以将它放在 crontab 文件中。如果任务由内核模块完成,我们有两种可能。第一个是在 crontab 文件中放置一个在必要的时候通过系统调用唤醒模块的进程,例如通过打开文件。这是非常低效的,然而--我们运行一个不在 crontab 中
- 分类:Linux 查阅全文
- Linux内核模块编程(二)
-
变量/函数的导出(export)
刚才讲的都是使用别人的 function 上遇到的名字 encode 问题。但是,如果我们自己的 module 想要 export 一些东西让别的 module 使用呢。很简单。在 default 上,在你的 module 里所有的 global variable 和 function 都会被认定为你要 e
- 分类:Linux 查阅全文
- Linux内核模块编程(一)
-
简介
模块(module)是在内核空间运行的程序,实际上是一种目标对象文件,没有链接,不能独立运行,但是可以装载到系统中作为内核的一部分运行,从而可以动态扩充内核的功能。模块最主要的用处就是用来实现设备驱动程序。
使用模块的优点:
l将来修改内核时,不必全部重新编译整个内核,可节省不少时间
2系统中如果需要使用新模块,不必重
- 分类:Linux 查阅全文