参考:http://www.arm.linux.org.uk/docs/kerncomp.php

一. 内核编译
1) linux 2.4
make clean/make mrproper
make dep
make zImage
make modules //编译模块
2) linux 2.6
make clean/make mrproper
make // 编译内核同时编译了模块
3) 模块安装
上述步骤完成后,模块分布在各个内核目录下,通过下面命令安装到具体目录下:
make modules_install INSTALL_MOD_PATH=./mod_dir
其中./mod_dir为模块安装目录,禁止为“/”(安装到本机host上)。

注:可通过make help查看make选项。
clean Remove most generated files but keep the config and enough build support to build external modules
mrproper Remove all generated files + config + various backup files
distclean mrproper + remove editor backup and patch files

二. 镜像文件介绍
一般情况下,先编译链接生成顶层目录的vmlinux,再把vmlinux精简压缩成piggy.gz,然后加上自引导程序链接生成arch/$(ARCH)/boot/zImage,这样就得到一个具备自启动能力的linux内核映像。
>>vmlinux 内核在虚拟空间运行时代码真实反应。
不具备引导能力,需要借助其他Bootloader引导启动。
位于顶层目录。
注:linux内核运行在虚拟地址空间
>>Image vmlinux去除调试信息后的镜像
>>vmlinuz 即zImage
可引导的压缩的内核映像。
大多数包含两部分:压缩的vmlinux和自引导程序。
vmlinuz通过自引导程序初始化系统,并且解压启动vmlinux。
vmlinuz采用gzip压缩格式,包含gzip解压缩函数。
>>uImage uboot格式的内核镜像,zImage前增加64字节
>>System.map 一个特定内核的内核符号表,包含内核全局变量和函数的地址信息。
$nm vmlinux >System.map
可提供给klogd/loof/ps等使用。
/proc/ksyms使用
CONFIG_ALLSYMS => 内核映像将包含符号表。

三. 内核补丁
上一个版本的linux内核源码,通过打补丁可以得到下一个版本。
linux-2.6.14 –> linux-2.6.15 =>patch-2.6.14.15
打补丁
bzcat ../patch-2.6.14.15.bz2 | patch –p1
四. 编译内核模块2.6内核
linux2.6内核的模块采用新的加载器,它使用内核编译机制,生成一个*.ko(内核目标文件,kernel object)模块文件,而不是一个*.o模块目标文件。
内核编译系统首先编译这些模块,然后链接上vermagic.o。这样就在目标模块创建了一个特殊区域,用来记录编译器版本号、内核版本号、是否使用内核抢占等信息。
新的内核编译系统如何来编译并加载一个简单的模块呢?举例说明。
#drivers/char/hello/hello.c
void init_module(void)
{
printk( “Hello module!\n”);
}

void cleanup_module(void)
{
printk( “Bye module!\n”);
}

相应的makefile文件如下:
KERNEL_SRC = ~/linux-2.6.14
SUBDIR = $(KERNEL_SRC)/drivers/char/hello/
all: modules
obj-m := hello_mod.o
hello-objs := hello.o
EXTRA_FLAGS += -DDEBUG=1
modules:
$(MAKE) –C $(KERNEL_SRC) SUBDIR=$(SUBDIR) modules
makefile文件使用内核编译机制来编译模块。
新模块要用新的模块工具加载或卸载。原来2.4内核的工具不能再用来加载或卸载2.6内核模块。

linux内核编译相关的更多相关文章

  1. Linux内核编译与安装

    2013-04-16    Linux内核介绍  Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.L ...

  2. Lab1:Linux内核编译及添加系统调用(详细版)

    实验一:Linux内核编译及添加系统调用(HDU) 花了一上午的时间来写这个,良心制作,发现自己刚学的时候没有找到很详细的,就是泛泛的说了下细节地方也没有,于是自己写了这个,有点长,如果你认真的看完了 ...

  3. Linux内核编译、安装流程

    原文链接:https://blog.csdn.net/qq_28437139/article/details/83692907 此处只讲linux内核编译步骤至于安装虚拟机,安装ubuntu操作系统请 ...

  4. Linux内核编译完整过程

    Linux内核编译完整过程 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过 ...

  5. 羽夏看Linux内核——段相关入门知识

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...

  6. 运行在TQ2440开发板上以及X86平台上的linux内核编译

    一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...

  7. linux内核编译环境配置

    linux内核编译环境配置 如果不是编译内核,只需要安装与内核相匹配的kernel-devel开发包即可.即是/lib/modules/`uname -r`/build -> /usr/src/ ...

  8. Linux 内核 编译模块

    背景: 由于调试内核或者由于分区大小限制,有时候内核组件不一定完全需要编进内核中. 所以,在开发中经常将内核组件编译成为模块,等到在恰当的时机加载. 概览: Linux内核模块的编译方法有两种: 1. ...

  9. Linux内核编译配置脚本

    环境 宿主机平台:Ubuntu 16.04.6 目标机:iMX6ULL Linux内核编译配置脚本 在linux开发过程中熟练使用脚本可以大大简化命令行操作,同时对于需要经常重复操作的指令也是一种备忘 ...

随机推荐

  1. [转]一步一步asp.net_购物车订单与支付宝

    本文转自:http://www.cnblogs.com/mysweet/archive/2012/05/19/2508534.html 最近这几天很忙,一边忙着准备一堆课程设计(8门专业课.....伤 ...

  2. 2016.03.31,英语,《Vocabulary Builder》Unit 08

    tend/tent: from the Latin tendere, meaning 'to stretch, extend, or spread'. tent: [tent] n. 帐篷 vt.&a ...

  3. mysql没有delete操作,那是delete from操作,

    1.mysql没有delete操作,那是delete from操作, 2.DELETE FROM table_name [WHERE Clause]

  4. Bootstrap页面布局23 - BS折叠内容

    <div class='container-fluid'> <h3 class='page-header'>Bootstrap 折叠内容</h3> <!--如 ...

  5. socket 中午吃的啥

    http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html

  6. static的作用,this(),super()用法

    1:static{}表示静态代码块:在java虚拟机(jvm)加载该类时,会执行这个代码块一次,静态代码块在new()对象之前就加载了 2: this()与surper()区别:surper()是从子 ...

  7. php数据库两个关联大表的大数组分页处理,防止内存溢出

    $ret = self::$db->select($tables, $fields, $where, $bind); if (!empty($ret)) { $retIds = array(); ...

  8. 费用性支出预分摊form方式和web方式区别

    预分摊 1 form方式 费用性支出先通过生产资产行请求 生成一个资产行,如果该资产行分摊到两个资产上则分割成两个资产行,既所谓的针对资产行进行分摊. 2 web方式 费用性支出直接分摊到资产上形成资 ...

  9. 关于xampp使用不同端口的虚拟机

    1.打开apache/conf/httpd.conf文件加入listen 8080(监听的端口号) 然后加入 # Virtual hostsInclude "conf/extra/httpd ...

  10. PushKit和传统长连接方式的比较

    iOS and PushKit This post will cover basic concepts for VoIP apps on iOS. I will not post any code ( ...