linux内核编程4部曲之一:linux内核编译(2.6.12版本)图文解说
linux内核编程4部曲之一:linux内核编译(2.6.12版本)图文解说
linux内核编程4部曲之二:增加linux内核系统调用
linux内核编程4部曲之三:修改O(1)调度算法
linux内核编程4部曲之四:模块编程
一、编译环境
在这里,我们以对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版本)图文解说相关推荐
- alin的学习之路(Linux系统编程:一)(Linux基础命令)
alin的学习之路(Linux系统编程:一)(Linux基础命令) 1.Linux学习准备 操作系统的作用 向上给用户提供简单的操作计算机硬件的方式 对下管理硬件 承上启下 程序运行在操作系统上,程序 ...
- Linux驱动编程 step-by-step (十) Linux 内核链表
终于可以清闲下来打理一下我的blog了,台资企业真的事情很多很烦-- 前几篇文章对字符设备有个简单介绍,并以简单的一个字符设备驱动作结尾,其实linux上大部分驱动程序都是字符设备程序,Linux源码 ...
- Linux网络编程(一):Linux内核
Linux内核:进程调度.内存管理.虚拟文件系统.网络接口.进程通信 进程调度:系统对进程的多种状态之间的转换策略. SCHED_OTHER 针对普通进程的时间片轮转调度策略.系统给所有的运行状态 ...
- Linux C 编程开发环境(工具链,编译,汇编,链接,库)基础知识与实践
前言 本博文包括对下面书籍的学习笔记,以及实际上机编程练习,程序运行分析等的总结,作为日后工作的参考: <UNIX 环境高级编程(第三版)> <深度探索 Linux 操作系统:系统构 ...
- linux可视化编程,Kylix带你走进Linux可视化编程世界
文/李雷鸣 Kylix是Borland于年初推出的Linux版本的Delphi,同样使用Object Pascal语言.它采用以Xwindow Qt开发组件为基础的新的组件架构CLX,与Red Hat ...
- linux c编程头文件,如何在Linux中找到C编程语言的头文件?
小编典典 gcc -H ...将打印每个包含文件的完整路径,作为常规编译的副作用.-fsyntax- only另外使用使其不创建任何输出(它仍然会告诉您程序是否有错误).示例(Linux,gcc-4. ...
- linux环境编程做的是什么,Linux环境
什么是环境: 我们所说的环境其实是shell环境,由于shell在shell会话中维护着大量的信息,所有这些信息就成为shell环境 存储在 shell 环境中的数据被程序用来确定配置属性.虽然大多数 ...
- linux内核编程(hello world示例程序)
linux内核编程(hello world) Linux可加载内核模块是 Linux 内核的最重要创新之一.它们提供了可伸缩的.动态的内核.其它开发者可以不用重新编译整个内核便可以开发内核层的程序,极 ...
- linux内核编程(一)
这些天在学习linux内核编程,就在这里小小的show以下. 首先编写如下的linux代码.并命名为hello.c 这里你应该注意亮点: 第一.linux内核编程,不同于普通的用户态下的编程:有一个入 ...
- linux有名管道数据异常,Linux系统编程—有名管道
▋****1. 管道的概念 管道,又名「无名管理」,或「匿名管道」,管道是一种非常基本,也是使用非常频繁的IPC方式. 1.1 管道本质 管道的本质也是一种文件,不过是伪文件,实际上是一块内核缓冲区, ...
最新文章
- windows下编译及使用libevent
- 台式机共享笔记本的无线网络(只需要一根网线)
- 如何做好一个开源项目(一)
- [leetcode]143. Reorder List
- 5. Zend_Log
- Node.js:POST请求、文件上传
- fatal error: alsa/asoundlib.h: 没有那个文件或目录
- displaytag分页中文处理
- win10打开无线网卡服务器,win10打不开无线网卡
- KindEditor上传图片及使用
- python表示倍数的英语句型_英语中“倍数表达法”和“长、宽、高句型”
- html中播放m3u8文件
- 在自己订阅的GOOGLE快讯中,看到自己的文章
- ERROR: [BD 41-237] VIVADO使用BD时报错
- 游戏数据库服务器 数据缓存 增量更新
- 分辨率并不是越高越好,因为人眼分辨能力存在极限
- 2021辽宁省大学生程序设计大赛部分题解
- word一直提示“缓存凭据已到期,无法上载或下载你的更改”问题---登入了两个onedrive账号(一个是个人的,一个是学校教育版的)发现编辑word后,文本无法保存
- 树的基本概念和2叉树中重要的几个性质
- 滨江学院c语言期中考试试题,南信大滨江学院linux期末作业.doc