日志列表

  • 机制与策略-内核执行机制之析

    腾龙 (吉林) 发表于 2008-06-04

    开源-展现在我们面前的是数以千计的代码,在那一行行的代码背后,到底蕴藏着怎样的设计思想,高手们曾怎样苦思冥想。在一堆堆的代码面前,有时候,我们很容易迷失曾经进来的入口,而掉入符号,变量以及函数堆积成的沼泽地。操作系统的本质是什么?管理者?亦或服务者?但,归根结底,它是一个执行者:执行用户程序-所谓为用户服务;执行中断-所谓为外设... ...全文

  • 内核调试(一)

    腾龙 (吉林) 发表于 2008-06-04

    艰苦的调试工作是内核级的开发区别于用户级开发的一个显著特点。相对于用户级开发,内核开发确实要艰苦得多。更要命的是,内核的一个错误往往马上就能让系统崩溃——一点情面都不会留。    越来越轻车熟路地驾驭内核调试的能力——当然,最终是为了能够成功的开发内核——很大一部分取决于你的经验和对整个操作系统的把... ...全文

  • 内核调试(二)

    腾龙 (吉林) 发表于 2008-06-04

    记录缓冲区内核消息都被保存在一个LOG_BUF_LEN大小的环形队列中。该缓冲区大小可以在编译时通过CONFIG_LOG_BUF_SHIFT进行调整。在单处理器的系统上其默认值是16K字节。换句话说,就是内核在同一时间只能保存16K字节的内核消息。如果它已经放满而又接收到了新的消息,旧消息就会被覆盖。这个记录缓冲区之所以称为环形是因为它的... ...全文

  • Linux内核书籍点评

    腾龙 (吉林) 发表于 2008-06-04

    从99年开始带学生分析Linux内核,一路走来,积累了不少资料,也编写和翻译了近10本相关书籍,一直在摸索怎样才能使大家尽快走入内核,但似乎没有捷径。尤其是内核版本的不断更新,更是不少内核爱好者无所适从。我们初次接触的内核资料是“The Linux Kernel”( kernelbook.sourceforge.net),介绍的是Linux2.0,尽管其中的内容过于概略,但其引导... ...全文

  • 内核级程序开发的特点

    腾龙 (吉林) 发表于 2008-06-04

    相对于用户空间内应用程序的开发,内核开发有很大的不同。这种差异给开发内核带来了了挑战,但这并不意味着开发内核就比开发应用程序难多少。这种差异使内核成了一只性格迥异的猛兽。一些常用的准则被颠覆了,而又必须建立许多全新的准则。尽管有许多差异一目了然(人人都知道内核可以做它想做的任何事),但还是有一些差异晦暗不明。最... ...全文

  • Linux内核可移植性(一)-概述

    腾龙 (吉林) 发表于 2008-06-04

    Linux是一个可移植性非常好的操作系统,它广泛支持了许多不同体系结构的计算机。可移植性是指代码从一种体系结构移植到另外一种不同的体系结构上的方便程度。我们都知道Linux是可移植的,因为它已经能够在各种不同的体系结构上运行了。但这种可移植性不是凭空得来的—它需要在做设计时就为此付出诸多努力。现在,这种努力已经开始... ...全文

  • Linux内核可移植性(二)-回顾历史

    腾龙 (吉林) 发表于 2008-06-04

    当Linus最初把Linux带到这个无法预测的大千世界的时候,它只能在i386上运行。尽管这个操作系统通用性很强,代码也写得不错,可是可移植性在那时算不上是一个关注焦点。实际上,Linus一度还建议让Linux只在i386体系结构上驰骋。不过,人们还是在1993年开始把Linux向Digital Alpha体系结构上移植了。Digital Alpha是一种高性能现代计算... ...全文

  • Linux内核可移植性(二)-回顾历史

    腾龙 (吉林) 发表于 2008-06-04

    当Linus最初把Linux带到这个无法预测的大千世界的时候,它只能在i386上运行。尽管这个操作系统通用性很强,代码也写得不错,可是可移植性在那时算不上是一个关注焦点。实际上,Linus一度还建议让Linux只在i386体系结构上驰骋。不过,人们还是在1993年开始把Linux向Digital Alpha体系结构上移植了。Digital Alpha是一种高性能现代计算... ...全文

  • Linux内核可移植性(三)-字长和数据类型

    腾龙 (吉林) 发表于 2008-06-04

    暂无  能够由机器一次就完成处理的数据被称为字。这和我们在文档中用字符(8位)和页(许多字,通常是4K或8K)来计量数据是相似的。字是指位的整数数目——比如说,1,2,4或8等。但人们说某个机器是多少“位”的时候,他们其实说的就是该机的字长。比如说,当人们说奔腾是32位芯片时,他们的意思是奔腾的字长为32位,也就是4字节。 ... ...全文

  • Linux内核可移植性(四)-数据对齐

    腾龙 (吉林) 发表于 2008-06-04

    对齐是跟数据块在内存中的位置相关的话题。如果一个变量的内存地址正好是它长度的整数倍,它就被称作是自然对齐的。举例来说,对于一个32位类型的数据,如果它在内存中的地址刚好可以被4整除(也就最低两位为0),那它就是自然对齐的。也就是说,一个大小为2n字节的数据类型n,它地址的最低有效位的后n位都应该为0。一些体系结构对对齐的要... ...全文

  • Linux内核可移植性(五)-字节顺序

    腾龙 (吉林) 发表于 2008-06-04

    字节顺序是指在一个字中各个字节的顺序。处理器在对字取值时既可能将最低有效位所在的字节当作第一个字节(最左边的字节),也可能将其当作最后一个字节(最右边的字节)。如果最高有效位所在的字节放在最高字节位置上,其他字节依次放在低字节位置上,那么该字节顺序称作高位优先(big-endian)。如果最低有效位所在的字节放在最高字节位置上... ...全文

  • Linux内核可移植性(六)-时间、页长度及处理器排序

    腾龙 (吉林) 发表于 2008-06-04

    1.时间绝对不要假定时钟中断发生的频率,也就是每秒产生的jiffies数目。相反,应该使用Hz来正确计量时间。这一点至关重要,因为不但不同的体系结构之间定时中断的频率不同,即使是在同一种体系机构上,两个不同版本的内核之间这种频率也不尽相同。举个例子,在x86系统上,Hz设定为1000。也就是说,定时中断每秒发生1000次,也就是每毫秒一次。... ...全文

  • Linux内核可移植性(七)-总结

    腾龙 (吉林) 发表于 2008-06-04

    简而言之,要想写出可移植性好、简洁、合适的代码,要注意以下两点:* 编码尽量选取最大公因子:假定任何事情都可能发生,任何潜在的约束也都存在。* 编码尽量选取最小公约数:不要假定给定的内核特性是可用的,仅仅需要最小的体系结构功能。编写可移植的代码需要考虑许多问题:字长、数据类型、对齐、字节次序、页大小、处理器排序等等。对... ...全文

  • 内存空间探测

    腾龙 (吉林) 发表于 2008-06-04

    让参与Linux内核毕业设计的学生写一个内核模块,能够对Linux启动以后的内存分布情况进行探测,用到内核数据结构E820。 例如,能够显示如下信息: BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) *  BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)  BIOS-e820: 00000000000e0000 - 00000000001000... ...全文

  • Linux如何处理共享中断

    腾龙 (吉林) 发表于 2008-06-04

    Linux可以让多个设备共享一个中断号,而且共享同一中断的中断处理程序形成一个链表,内核对每个中断处理程序都要执行,那么,没有产生中断的设备本 该靠边站的,它的中断处理程序也被执行了?到底是怎么会事?实际上:     共享的处理程序与非共享的处理程序在注册和运行方式上比较相似,但差异主要有以下三处: * request_irq()的参... ...全文

  • 内核模块编程之入门(一)-话说模块

    腾龙 (吉林) 发表于 2008-06-04

    内核模块编程之入门(一)-话说模块 2008-02-20 12:00:55 / 个人分类:释义Linux内核   内核模块是Linux内核向外部提供的一个插口,其全称为动态可加载内核模块(Loadable Kernel Module,LKM),我们简称为模块。Linux内核之所以提供模块机制,是因为它本身是一个单内核(monolithic kernel)。单内核的最大优点是效率高,因为所有的内容都... ...全文

  • 内核模块编程之入门(二)—必备知识

    腾龙 (吉林) 发表于 2008-06-04

    模块编程属于内核编程,因此,除了对内核相关知识有所了解外,还需要了解与模块相关的知识。1.应用程序与内核模块的比较为了加深对内核模块的了解,表一给出应用程序与内核模块程序的比较。表一 应用程序与内核模块程序的比较 C语言应用程序   内核模块程序 使用函数   Libc库    内核函数 运... ...全文

  • 内核模块编程之入门(三)-模块实用程序简介

    腾龙 (吉林) 发表于 2008-06-04

    modutils是管理内核模块的一个软件包。可以在任何获得内核源代码的地方获取Modutils(modutils-x.y.z.tar.gz)源代码,然后选择最高级别的patch.x.y.z等于或小于当前的内核版本,安装后在/sbin目录下就会有insomod、rmmod、ksyms、lsmod、modprobe等实用程序。当然,通常我们在加载Linux内核时,modutils已经被载入。1.Insmod命令 ... ...全文

  • 内核模块编程之进阶(四)-编写带参数的中断模块

    腾龙 (吉林) 发表于 2008-06-04

    在此,我们将编写一个模块,其中有一个中断函数,当内核接收到某个 IRQ 上的一个中断时会调用它。先给出全部代码,读者自己调试,把对该程序的理解跟到本贴后面。 ---------------------------------------- #include <linux/module.h>#include <linux/init.h>#include <linux/interrupt.h>static int irq;static ... ...全文

  • 内核模块编程之进阶(五)-授人以渔

    腾龙 (吉林) 发表于 2008-06-04

    在上一部分“编写带有参数的中断模块”中,这个看似简单的程序,你调试并运行以后思考了哪些方面的问题?(1)给模块传递参数,使得这个模块的扩展和应用有了空间,例如,在我的机器上查看/proc/interrupts             CPU0         0:   10655925 ... ...全文

721/41234>

内核技术

内核技术