linux内核编程4部曲之一:linux内核编译(2.6.12版本)图文解说

linux内核编程4部曲之二:增加linux内核系统调用

linux内核编程4部曲之三:修改O(1)调度算法

linux内核编程4部曲之四:模块编程

一、编译环境

ubuntu 5.10,要编译的内核源码版本2.6.12 
二、下载并解压源代码 
首先从linux内核的官网www.kernel.org把源代码下载下来。为了和后面实验要求符合,我们要下载使用O(1)调度器的源码。因此这里下载了2.6.12版本源码。下载 下linux-2.6.12.tar.bz2,将下载源码放入/usr/src/目录下。如下图所示:
解压该源码:
   
三、构建编译环境
现在我们得到的只是源代码,只是许许多多的文本文件,要想使这些文件成为可以运行的程序,需要使用编译器进行编译以及链接。编译器有很多,但在里linux下一般都使用gnu的开源编译器套件,这里包括gcc等,现在我们安装基本的编译器套件,如图所示:
    
四、安装ncurses库
这里使用Ubuntu系统,因为系统自带的ncurses库在支持make menuconfig的时候会出错,所以,依然要安装ncurses库,这里我们从源码安装。首先去ncurses官网http://ftp.gnu.org/pub/gnu/ncurses/ 上下载源码。这里我们下载5.9版本,并通过简单的安装方式.configure   和make、make install方式安装。如下图所示:
   
五、配置内核
一切准备工作做完,现在我们就可以配置内核了,这里我们使用make menuconfig方式。如下图:
在使用make menuconfig这个命令后,会出现如下的字符界面,我们就可以在这个界面上对内核进行配置。但是如果这不是你第一次配置这个内核,那么请先运行:make mrproper来清除以前的配置,回到默认配置,然后再运行:make menuconfig.

在这里,我们以对cpu支持的配置为例,其余的选项就不一一详述,首先查看本机的cpu类型,如下图:

在这里我们可以看到,我的电脑的cpu是AMD Athlon的,因此我们在cpu选项里面选用AMD,如下图所示:

在这里需要注意的是:

A、 cpu的设置在linux内核编译过程中,不是必需的,即使保持默认的386选项(我们刚才把它改成了AMD),内核也能正常运行,只不过运行慢一些而已。

B、 一般容易出问题的地方在于Device Driver的设置。我在一开始就遇到了在内核编译完,通过grub引导系统过程中报 “ALERT! /dev/sda1 does not exist . Dropping to a shell!”的错误。这是因为硬盘驱动没有配置好而造成的。运行lspci命令,查看到下面这行:

由此确定,需要配置SCSI、PCI-X、Fusion-MPT驱动,需要在响应的驱动选项里将[M]设置为[*],因为硬盘驱动是在系统开机的时候加载,所以不能以模块形式加载。

把这几个驱动内部的选项全部改为[*]:

六、编译内核

对内核的配置完成之后,现在就可以开始编译内核了,只需要一个简单的make命令即可,之后我们就只能慢慢等,直到编译完成,在我的电脑上,大概用了25分钟。下图是运行make后的部分输出。

七、安装内核

编译完成之后,我们需要安装内核,主要分为如下几步:

1)、安装模块

安装模块,对于内核来说,每一个内核版本有自己的模块目录,默认在/lib/modules/内核版本号这个目录下,make modules_install会创建对应的目录,并把对应的模块文件拷贝过去。注意,这一步必须要在编译过内核再做。

2)、拷贝bzImage文件

bzImage文件是内核映像文件,是启动内核所必需的,我们应当把它拷贝到/boot目录下。在这里,我为自己新建了一个目录,我们把它拷贝过去,并且按照一般内核映像文件的命名方式为它改名为vmlinuz-2.6.12。

3)、制作initrd文件

initrd文件命名为initrd.img-2.6.12

4)、修改grub启动项

要能引导起我们的新系统,需要更改grub配置,增加启动选项。ubuntu 5.10的grub版本比较低,配置文件为/boot/grub/menu.lst,高版本的grub可能在/boot/grub/grub.cfg里。在原有启动项基础上,添加我们自己的启动项,并把它设为默认启动项,配置如下:

5)重启

不出意外的话,我们的内核已经正常加载了,运行uname -a,会发现,内核版本已经是2.6.12了。

linux内核编程4部曲之一:linux内核编译(2.6.12版本)图文解说相关推荐

  1. alin的学习之路(Linux系统编程:一)(Linux基础命令)

    alin的学习之路(Linux系统编程:一)(Linux基础命令) 1.Linux学习准备 操作系统的作用 向上给用户提供简单的操作计算机硬件的方式 对下管理硬件 承上启下 程序运行在操作系统上,程序 ...

  2. Linux驱动编程 step-by-step (十) Linux 内核链表

    终于可以清闲下来打理一下我的blog了,台资企业真的事情很多很烦-- 前几篇文章对字符设备有个简单介绍,并以简单的一个字符设备驱动作结尾,其实linux上大部分驱动程序都是字符设备程序,Linux源码 ...

  3. Linux网络编程(一):Linux内核

    Linux内核:进程调度.内存管理.虚拟文件系统.网络接口.进程通信 进程调度:系统对进程的多种状态之间的转换策略.   SCHED_OTHER 针对普通进程的时间片轮转调度策略.系统给所有的运行状态 ...

  4. Linux C 编程开发环境(工具链,编译,汇编,链接,库)基础知识与实践

    前言 本博文包括对下面书籍的学习笔记,以及实际上机编程练习,程序运行分析等的总结,作为日后工作的参考: <UNIX 环境高级编程(第三版)> <深度探索 Linux 操作系统:系统构 ...

  5. linux可视化编程,Kylix带你走进Linux可视化编程世界

    文/李雷鸣 Kylix是Borland于年初推出的Linux版本的Delphi,同样使用Object Pascal语言.它采用以Xwindow Qt开发组件为基础的新的组件架构CLX,与Red Hat ...

  6. linux c编程头文件,如何在Linux中找到C编程语言的头文件?

    小编典典 gcc -H ...将打印每个包含文件的完整路径,作为常规编译的副作用.-fsyntax- only另外使用使其不创建任何输出(它仍然会告诉您程序是否有错误).示例(Linux,gcc-4. ...

  7. linux环境编程做的是什么,Linux环境

    什么是环境: 我们所说的环境其实是shell环境,由于shell在shell会话中维护着大量的信息,所有这些信息就成为shell环境 存储在 shell 环境中的数据被程序用来确定配置属性.虽然大多数 ...

  8. linux内核编程(hello world示例程序)

    linux内核编程(hello world) Linux可加载内核模块是 Linux 内核的最重要创新之一.它们提供了可伸缩的.动态的内核.其它开发者可以不用重新编译整个内核便可以开发内核层的程序,极 ...

  9. linux内核编程(一)

    这些天在学习linux内核编程,就在这里小小的show以下. 首先编写如下的linux代码.并命名为hello.c 这里你应该注意亮点: 第一.linux内核编程,不同于普通的用户态下的编程:有一个入 ...

  10. linux有名管道数据异常,Linux系统编程—有名管道

    ▋****1. 管道的概念 管道,又名「无名管理」,或「匿名管道」,管道是一种非常基本,也是使用非常频繁的IPC方式. 1.1 管道本质 管道的本质也是一种文件,不过是伪文件,实际上是一块内核缓冲区, ...

最新文章

  1. windows下编译及使用libevent
  2. 台式机共享笔记本的无线网络(只需要一根网线)
  3. 如何做好一个开源项目(一)
  4. [leetcode]143. Reorder List
  5. 5. Zend_Log
  6. Node.js:POST请求、文件上传
  7. fatal error: alsa/asoundlib.h: 没有那个文件或目录
  8. displaytag分页中文处理
  9. win10打开无线网卡服务器,win10打不开无线网卡
  10. KindEditor上传图片及使用
  11. python表示倍数的英语句型_英语中“倍数表达法”和“长、宽、高句型”
  12. html中播放m3u8文件
  13. 在自己订阅的GOOGLE快讯中,看到自己的文章
  14. ERROR: [BD 41-237] VIVADO使用BD时报错
  15. 游戏数据库服务器 数据缓存 增量更新
  16. 分辨率并不是越高越好,因为人眼分辨能力存在极限
  17. 2021辽宁省大学生程序设计大赛部分题解
  18. word一直提示“缓存凭据已到期,无法上载或下载你的更改”问题---登入了两个onedrive账号(一个是个人的,一个是学校教育版的)发现编辑word后,文本无法保存
  19. 树的基本概念和2叉树中重要的几个性质
  20. 滨江学院c语言期中考试试题,南信大滨江学院linux期末作业.doc

热门文章

  1. JAVA实现网页版斗地主_使用Java实现简单的斗地主案例
  2. 怎么直接播放或编辑WEBM格式的视频
  3. java笔试题库_java笔试题50道 收藏版
  4. Mtlab 二次规划及其例子
  5. Android搜索关键字高亮显示
  6. c++坦克大战 代码免费复制(附源码)
  7. red hat linux没有库文件libiconv.so,libiconv库链接问题一则(备忘)
  8. OpenCV.js 快速入门指南
  9. InisghtFace 制作自定义数据集和模型训练评估
  10. Windows商店的Redis客户端G-dis3