Linux 环境下编译 0.11版本内核 kernel

2024-06-19 10:18

本文主要是介绍Linux 环境下编译 0.11版本内核 kernel,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我的系统配置:

  UBUNTU 9.04 +gcc 4.33

最近在看《linux内核0.11完全注释》一书,尝试下了个0.11版本的 kernel下来尝试编译一把。

linux-0.11.tar.gz 下载地址:ftp://ftp.kernel.org/pub/linux/kernel/Historic/old-versions/

下面开始工作:

参照是网上的帖子说明的

原文链接

http://www.cnblogs.com/hummersofdie/p/3645218.html

他做的确实很不错,但是,在我的电脑上没有编译通过(可能是我的系统配置和他的不一样)。。。所有我采用了第二种方式编译,经过两天时间,终于编译通过了

我的方法如下:

利用赵炯博士在http://www.oldlinux.org/Linux.old/kernel/0.1x/ 这里提供了修改 linux-0.11-060618-gcc4.tar.gz  好的 0.11版本的内核进行编译,只要修改:

步骤0:配置系统环境:

安装软件as(汇编器) ld(链接器)

具体方法:

sudo apt-get install bin86

注意:由于我使用的Ubuntu版本系统比较旧,但是Ubuntu不支持旧系统的维护,所以需要自己修改软件源,我现在在学校,使用的教育网,你可以参照你的环境配置更新的软件源,这个我就不再赘述了,当然你可以将我的Ubuntu拷过去(如果需要可以联系我)

步骤1:所有 Makefile 里 -mcpu=i386 为 -march=i386 

步骤2:将 kernel/blk_drv/blk.h 文件第87行 将 #elif 修改为 #else 

步骤3:同时:linux-0.11所有目录下的makefile和Makefile的CFLAGS都要加上-fno-stack-protector选项

步骤4:make

    ld -m elf_i386 -Ttext 0 -e startup_32 boot/head.o init/main.o \
     kernel/kernel.o mm/mm.o fs/fs.o \
     kernel/blk_drv/blk_drv.a kernel/chr_drv/chr_drv.a \
     kernel/math/math.a \
     lib/lib.a \
     -o tools/system
    nm tools/system | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aU] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)'| sort > System.map 
    gcc -Wall -O -fstrength-reduce -fomit-frame-pointer \
     -o tools/build tools/build.c
    objcopy -O binary -R .note -R .comment tools/system tools/kernel
    tools/build boot/bootsect boot/setup tools/system > Image
    Root device is (3, 6)
    Boot sector 512 bytes.
    Setup is 312 bytes.
    System is 128323 bytes.
    rm tools/kernel -f
    sync

    编译 linux 内核 0.11 版本成功了!

就可以编译通过了。

 (同时需要可编译程序,可以联系我)

总 结:编译需要一个过程,学习也是同样需要一个过程。虽然可以利用赵博士修改好的 kernel-0.11 版快速的编译内核,但是那样就不会遇到太多有价值的编译问题,而解决这些问题就是一个学习过程,相信赵博士在编译0.11版本内核的时候也遇到了这些问 题。这样我想起了高中解数学难题的时候,高手解体时总是省略了一些因式分解的过程,而对于菜鸟来说这些省略的过程是非常重要

这篇关于Linux 环境下编译 0.11版本内核 kernel的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1074743

相关文章

Linux之systemV共享内存方式

《Linux之systemV共享内存方式》:本文主要介绍Linux之systemV共享内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、工作原理二、系统调用接口1、申请共享内存(一)key的获取(二)共享内存的申请2、将共享内存段连接到进程地址空间3、将

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

Linux命令之firewalld的用法

《Linux命令之firewalld的用法》:本文主要介绍Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux命令之firewalld1、程序包2、启动firewalld3、配置文件4、firewalld规则定义的九大

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文