linux内核有两种版本:稳定的和处于开发中的。
linux通过一种简单的命名机制来区分稳定的和处于开发中的内核,使用3个或者4个“.”分割的数字来代表不同内核版本。
如:2.6.26.1:第一个数字是主版本号,第二个数字是从版本号,第三个数字是修订版本号。第四个可选的数字为稳定版本号。
从副版本号可以反映出该内核是一个稳定版本还是一个处于开发中的版本:如果是偶数,则内核就是稳定版本;如果是奇数,那么它就是开发板。
获取内核源码:http://www.kernel.org,
如果压缩形式为bzip2,结尾为:tar.bz2,解压形式:
tar xvjf linux-x.y.z.tar.bz2
如果压缩形式是GNU的zip,结尾为:tar.gz解压
tar xvzf linux-x.v.z.tar.gz
解压后的源代码位于linux-x.v.z.目录下。
编译内核:
(1)先配置因为linux源码随手可得,那么意味着在编译它之前可以配置和定制。在编译内核之前,首先你必须配置它。
make config //字符界面下配置,耗时长
make menuconfig //高效,直观,简单
make gconfig //基于gtk+的图形工具
make defconfig //基于默认的配置为你的体系结构创建一个配置
make oldconfig //
(2)编译
make
make -jn //这里,n是要衍生的作业数,在实际中,每个处理器上一般衍生出一个或者2个作业。例如,在一个16核处理器上,你可以输入如下命令:
make -j32
printk(KERN_ERR "this is an error! ") //注意KERN_ERR和要打印的消息之间没有逗号,这样写是别有用意的 。优先级是预处理程序定义的一个描述性字符串。
定义一个内联函数的时候,需要使用static作为关键字,并且用inline限定它。
如:static inline void wolf(unsigned long tail_size)
内联函数必须在使用之前就定义好,否则编译器就没法把这个函数展开。在内核中,为了类型安全和易读性,优先使用内联函数而不是复杂的宏
linux的内核混合使用了C语言和汇编语言。在偏近体系结构的底层和对执行时间要求严格的地方,一般使用的是汇编语言。而内核其他部分的大部分代码是用C语言编写的。
如果一个用户程序试图进行一次非法的内存访问,内核就会发现这个错误,发送SIGSEGV信号,并结束整个进程。
在内核中,不要轻易使用浮点数。