编译Linux内核2.6.36-程序员宅基地

技术标签: 网络  运维  操作系统  

编译Linux内核2.6.36

一直以来,都是从事Linux用户空间的程序开发,对于Linux的了解仅限于基本Linux内核的经典书籍的阅读。由于目前从事的工作主要是TCP/IP 4层以上的处理,所以对内核的接触也不多。但近日空闲时间较多了,于是决定要好好研究研究Linux内核,主要集中在Linux内核的TCP/IP协议栈。

那么从今天开始,一方面是为了鞭策自己,另一方面也是给自己的学习过程做些记录,我要坚持把学习过程遇到的问题以及自己的收获记录下来。

那么,开始吧。

第一步,自然是编译内核。我选择的是当前最新的稳定版本Linux 2.6.36。我只有在很久之前,大概刚刚毕业的时候编译过内核,当时还是2.4.18呢————这个版本我记得很清楚。所以,具体步骤还得上google搜一下,结果发现大体上都差不多,但是每个人的介绍都有些细微的区别。

恩。。。那么,还是直接看linux的文档为上——这个最官方——其实就是源目录下的README,里面说得很清楚。

1. make mrproper:Make sure you have no stale .o files and dependencies lying around。用于清除以前的编译结果和依赖文件;

2. make O=/home/my_dir/works/linux_kernel/kernel menuconfig: 配置内核的编译选项。
这里的O=/home/my_dir/works/linux_kernel/kernel是指定生成的目录。如果没有该选项,就在默认目录生成。需要注意的是,如果使用了该选项,那么后面的命令中都要带有这个选项。

3. make O=/home/my_dir/works/linux_kernel/kernel:老版本的Linux还要使用make bzImage来生成image。但是新版本的Linux使用make就可以了。这与用户空间的make风格统一了。
这个make就可以生成压缩版本的kernel镜像。

4. make O=/home/my_dir/works/linux_kernel/kernel install: 如果有合适lilo,那么可以直接使用make install来进行镜像的安装。如果没有的话,只能自己动手赋值了。

如果在配置kernel的时候,有任何一个部分是配置成module的形式,那么还需要在make install之前执行make modules_install

到此ok,linux的编译过程其实很简单,重点是在配置内核上。大家根据自己的硬件尝试吧。最好使用虚拟机,这样即使出了问题,也很容易解决。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34321977/article/details/89867143

智能推荐

编写代码的「八荣八耻」- 以开关上线为荣,以自信编码为耻-程序员宅基地

背景"我的代码太完美了,不可能有bug!" 不知道大家有没有过这样的自信。我们团队的代码观:“是代码一定是有bug的。要考虑好充分的兜底以及紧急预案。”不能将碰运气当成战略 --《SRE Google运维解密》WHAT编写代码的「八荣八耻」1. 产品命名:以简单有趣为荣,以平庸难记为耻。2. 单个方法:以短小精悍为荣,以冗长费神为耻。3. 代码维护:以持续重构为..._代码做了开关,是否刷数就可以解决,无语重新上线

Mybatis全局配置文件元素详解(二)_请列举5个mybaits配置文件中的主要元素-程序员宅基地

(一)Mybatis全局配置文件简介通常在项目中只配置一个Mybatis全局配置文件,并且编写后不会轻易改写。Mybatis全局配置文件通常用来配置数据库连接和加载Mapper.xml资源文件。 参考:Mybatis官方文档(二)Mybatis全局配置文件主要元素如图所示 项目结构1. <properties>元素<propertie..._请列举5个mybaits配置文件中的主要元素

PHP 中 json_encode 处理数组的返回信息为 NULL 时的处理_php json_encode null-程序员宅基地

今天在处理消息队列逻辑时,因为连接不上服务器,返回的错误信息中存在中文乱码,以前的处理方式,就是对返回的信息,使用 json_encode() 编码处理,记录到 错误日志中,方便后期问题排查,但是,此时发现,json_encode() 返回的是 false|NULL ,无法满足我的需求。通过网上的建议,找到一种解决方案 :【PHP json_decode/json_encode 中文内容为NULL或乱码】_php json_encode null

labview对dll的调用_labview中vi快速转换成dll-程序员宅基地

LabVIEW调用DLL文件  LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用。比如,在实际的工程项目中,用户可以用C++语言实现软件的运算部分,并把这些功能构建在DLL文件中,然后再使用 LabVIEW编写程序的界面部分,并通过调用编写好的DLL来调用运算部分的功能。  LabVIEW 中是通过Call Library Function Node(CLN)节点来完成DL_labview中vi快速转换成dll

Asp.Net是啥_asp.net是什么-程序员宅基地

什么是框架?在软软件领域,框架,即framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。 框架的概念最早起源于Smalltalk环境,其中最著名的框架是Smalltalk 80的用户界面框架MVC(Model-View-Controller)。为什么要用框架?因为软件系统发展到今..._asp.net是什么

随便推点

青蛙跳台阶问题&&斐波那契数列问题-程序员宅基地

斐波那契数列: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39 斐波那契数列公式: F(n)=F(n-1)+F(n-2)public class Solution { public int Fibonacci(int n) { if (n <= 0) return 0; else if (n

USB2.0协议简述-程序员宅基地

文件名:USB2.0协议简述1 USB 规范描述 1-1. 简述 1-2. USB包括三部分 1-3. 数据传输 1-4. USB HUB 提供了低复杂度的USB接口扩展方法 1-5. 功能分层和数据传输2 数据传输具体描述 2-1. 控制传输 2-2. 中断传输 2-3. 批量传输 2-4. 同步传

org.apache.catalina.startup.VersionLoggerListener.log Java Home /*/jre,后面多了一个jre-程序员宅基地

配置阿里云服务器的时候,将tomcat装好,jdk装好,然后运行tomcat,然后就是访问不了。redhat的tomcat中java_home多了一个jre查看日志发现JAVA_HOME 变为/u01/jdk1.8/jdk1.8.0_102/jre 后面有了jre。14-Jul-2019 20:19:58.764 INFO [main] org.apache.catalina.startup..._org.apache.catalina.startup.versionloggerlistener.log

3.6 51单片机-动态数码管_51单片机动态数码管接线-程序员宅基地

3.6动态数码管3.6.1 数码管原理图图3-6-1图3-6-2注意:使用排线连接时,排线有金属触点的一片必须朝右开发板连线说明:J21跳线帽接左边、JP165跳线帽断开、JP10(P0)接J12、JP16(右排)接JP8。(数码管控制线)JP10接线详细说明:P0.0-->A P0.1--->B …….(数码管片选线)JP16接线详细说明:P1.0--->1 P1.1 --->2 ………..3.6.2 数码管动态显示介绍..._51单片机动态数码管接线

qt creator如何以debug模式调试工程(或如何使断点起作用)_qt creator 调试_榴莲小怪兽的博客-程序员宅基地

原文链接:https://jingyan.baidu.com/article/95c9d20d726eeeec4e756108.html(一)原因首先,检查源码路径是否包含中文,例如:/桌面/,不要包含中文。其次,只有在Debug模式(F5,图标如下有个甲壳虫的)下才会进入断点。(二)如何加断点调试1、设置断点设置好断点后,按下F5或者左下角的调试按钮开始调试,这时程序先进行构建再进入调试模式。其中界面上有些按钮,例如继续按钮、停止调试按钮、单步跳过按钮、单步进入按钮、单步跳出按钮等,还会显_qt creator 调试

android学习杂记.2-程序员宅基地

用回调实现adapter 与fragment或activity间的数据传输。在adapter 写一个内部接口private IDeleteListener deleteListener;public void setDeleteLinstener(IDeleteListener listener) { this.deleteListener = listener;}pub