Suse环境下编译linux-2.6.24内核

1.下载linux-2.6.24内核源码:

https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.tar.gz

2.解压linux-2.6.24.tar.gz文件,会生成linux-2.6.24目录

tar –xzf linux-2.6.24.tar.gz

3.编译环境构建

一般linux系统都自带gcc和make等编译工具,这里我的编译环境为SUSE Linux、gcc version 4.8.5、GNU Make 4.0

4.配置内核

linux提供了多种内核配置工具, 最基础的是 make config工具, 它列出每个编译选项, 而且是基于文本的

目前一般都推荐使用主流的make menuconfig工具, 但它需要curse库的支持, 在suse中默认是没有的, 所以在这里我使用的是make config工具

执行make config命令,自动生成.config配置文件

可能遇到以下错误:

Makefile:434: *** mixed implicit and normal rules.  Stop.

解决方法:

修改根目录下Makefile文件的第434行

-config %config : scripts_basic outputmakefile FORCE

+config : scripts_basic outputmakefile FORCE

可能也会遇到错误:

Makefile:1503: *** mixed implicit and normal rules.  Stop.

解决方法同上

解决完以上错误后再次执行make config,会逐条列出每个编译选项,每个编译选项会有类似[M/n/y?]、[N/y/?]、[Y/n/?]的用户选项,位于首位的为内核推荐的配置,一直回车即可

配置完成后会显示 # configuration written to .config 字样,在根目录下可以看到 .config文件,可以手动打开查看并编辑

5.编译内核源代码

依次执行

make vmlinux  -j8(编译核心,-j指定使用多少线程进行gcc编译)

make bzImage (制作bzImage,这个是给initramfs用的)

make modules -j8 (编译模块)

make modules_install (模块安装)

make install(内核安装,修改grub等)

编译过程中的warning不用关注,关注error即可

遇到错误可以去stackoverflow上搜索,一般都能解决:

ü  gcc: error: elf_x86_64: No such file or directory

gcc: error: unrecognized command line option ‘-m’

解决方法:

修改arch/x86/vdso/Makefile文件中第20行

- cmd_syscall = $(CC) -m elf_x86_64 -nostdlib $(SYSCFLAGS_$(@F)) \

+ cmd_syscall = $(CC) –m64 -nostdlib $(SYSCFLAGS_$(@F)) \

ü  Error: .size expression for copy_user_generic_c does not evaluate to a constant scripts/Makefile.build:243: recipe for target 'arch/x86/lib/copy_user_64.o' failed

解决方法:

修改arch/x86/lib/copy_user_64.S文件第347行

-END(copy_user_generic_c)

+END(copy_user_generic_string)

ü undefined reference to `__mutex_lock_slowpath'

解决方法:

修改kernel/mutex.c文件中的第61行:

-static void fastcall noinline __sched

+static __used void fastcall noinline __sched

修改kernel/mutex.c文件中的第98行:

-static void fastcall noinline __sched

+static __used void fastcall noinline __sched

修改kernel/mutex.c文件中的第297行:

-static void fastcall noinline __sched

+static __used void fastcall noinline __sched

ü  error: conflicting types for ‘getline’

解决方法:

修改scripts/unifdef.c文件,将其中所有的getline替换成get_line,共计三处,分别位于209、515、529行

编译完成后可以在linux-2.6.24根目录下看到以下文件和其他的临时文件

vmlinux   :  未经压缩的原始linux内核镜像.

/arch/<arch>/boot/zImage(bzImage):  使用zlib压缩后的内核镜像.

注:不同的体系结构对压缩后内核镜像的默认命名不同,比如arm的是zImage,而i386的是bzImage.(z表示zlib, bz表示"big zlib")

执行 make install 后会发现/boot目录下多了linux-2.6.24的相关文件,自动更新了/boot/grub2、grub.cfg文件

之前的linux内核依然保留,两个内核版本同时存在

6.reboot重启选择新的内核进行启动即可

可能是由于我编译的linux内核的版本较老的缘故,

启动卡在了Loading Initial ramdisk….,新的内核无法启动,原因后续探究

此文的主要目的是体验linux的编译与安装流程

Suse环境下编译linux-2.6.24内核的更多相关文章

  1. ubuntu环境下编译linux内核问题解决备忘

    在使用比较新的gcc编译内核时,经常遇到这个问题: 问题一: 提示: mkimage" command not found - U-Boot images will not be built ...

  2. Redhat环境下编译安装Google Bazel

    Redhat环境下编译安装bazel 作者:Jack47 目前Google Bazel没有提供各个操作系统下的二进制安装包,只提供源代码,需要我们自己编译安装,详情可以见我翻译的中文版Google B ...

  3. 在SoCEDS环境下编译和更新preloader和uboot程序的方法

    在SoCEDS环境下编译和更新preloader和uboot程序的方法   前面有介绍preloader在HPS boot过程中的的作用,接下来讲述下用户在SoCEDS环境下改如何编译preloade ...

  4. Android 环境下编译FFmpeg

    Android 环境下编译FFmpeg 开发环境:Ubuntu 12.04.2 LTS , android-sdk-linux, android-ndk-r8e 一 .X264 编译 1.    X2 ...

  5. 如何在Windows环境下安装Linux系统虚拟机

    如何在Windows环境下安装Linux系统虚拟机 本篇经验写给想要入门学习C语言的小白们.Windows系统因为使用窗口图形化,操作简单,功能多样,所以我们在Windows环境下可以做到很多,但想要 ...

  6. Windows环境下使用Linux命令

    1.说明 如何在Windows环境下使用Linux命令, 这是一个屡见不鲜的问题, 而且已经有很多解决方法, 下面仅推荐几个我觉得好用的工具, 这些工具可能就是我们常用的软件, 而且已经在Window ...

  7. libCURL开源库在VS2010环境下编译安装,配置详解

    libCURL开源库在VS2010环境下编译安装,配置详解 转自:http://my.oschina.net/u/1420791/blog/198247 http://blog.csdn.net/su ...

  8. centos7.6环境下编译安装tengine-2.2.2的编译安装

    centos7.6环境下编译安装tengine-2.2.2的编译安装 .获取tengine2..2的源码包 http://tengine.taobao.org/download/tengine-2.2 ...

  9. Boost学习总结(一)VS2010环境下编译STLport和Boost

    Boost学习总结(一)VS2010环境下编译STLport和Boost Boost简介 Boost库是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库.1998年,Beman G.Da ...

随机推荐

  1. Excel小技巧(生成数字篇)

    1. 自动生成1-1000: =ROW() 2.随机生成 1-100 : =RANDBETWEEN(1,100) // 若要包含小数点n位,就把(MIN,MAX)改成 (MIN*10^n,MAX*10 ...

  2. Java实验报告&&课程报告

    Java实验报告 班级 计算机科学与技术二班 学号 20188450 姓名 李代传 完成时间 2019/9/19 评分等级 实验二 Java简单类与对象 实验目的 掌握类的定义,熟悉属性.构造函数.方 ...

  3. OS X更新Catalina 10.15.2后虚拟机黑屏(已解决)

    简述 问题:更新OS X 10.15.2后VM Ware进unbuntu 16.0黑屏,但是VM Ware 有显示,情况类似如下: 解决办法   重启系统,command+r 进入恢复模式,打开bas ...

  4. 2019牛客暑期多校训练营(第五场)- B generator 1 (齐次线性递推+矩阵快速幂)

    题目链接:https://ac.nowcoder.com/acm/contest/885/B 题意:已知齐次线性式xn=a*xn-1+b*xn-2,已知a,b,x0,x1,求xn,n很大,n<= ...

  5. 精通Java中的volatile关键字

    在一些开源的框架的源码当中时不时都可以看到volatile这个关键字,最近特意学习一下volatile关键字的使用方法. 很多资料中是这样介绍volatile关键字的: volatile是轻量级的sy ...

  6. mybatis插入数据返回主键

    原来之前一直用错了... keyProperty是表示将返回的主键设置为该方法参数的对应属性中去,而不是用返回值的形式的去获取.

  7. Spring MVC(一)Spring MVC的原理

    1.Spring MVC的目的 构建像Spring框架那样灵活和松耦合的Web应用程序. 2.Spring MVC中如何处理Request? 每当用户在Web浏览器中点击链接或者提交表单时,Reque ...

  8. Java 集合和泛型

    一.集合(Collections) Java使用集合来组织和管理对象. 1.Java的集合类 集合类主要负责保存.盛装和管理对象,因此集合类也被称为容器类. 集合类分为Set.List.Map和Que ...

  9. MySQL的简介、启动及其DDL

    MySQL的各项配置: 默认会启用TCP/IP网络: 默认客户端/服务器端口:3306: 将数据库的BIN目录写入Windows的的path环境变量: 默认不允许root用户在其他机器上远程登录: M ...

  10. 区间dp 整数划分问题

    整数划分(四) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近 ...