参考: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. 安装Bind过程中提示丢失MSVCR110.dll的解决办法

    前几天在线安装Visual Studio 2012 Update 3,由于在线安装需要不断下载安装文件,时间很长,后来等不下去,就取消了,不幸的是VS启动不了了,弹出“devenv.exe – 系统错 ...

  2. NBOJv2 1022 短信篮球(种类并查集)

    Problem 1022: 短信篮球 Time Limits:  1000 MS   Memory Limits:  65536 KB 64-bit interger IO format:  %lld ...

  3. jquery CDN(内容分发网络)使用

    jquery CDN 给开发者提供一种捷径,即不下载jquary 就通过CDN能使用各个版本的jquery. 使用方法很简单,就是在HTML 文档中引用相关版本的jquery. 例如:我用百度的CDN ...

  4. Javascript 笔记与总结(2-7)对象

    html: <h1>找对象</h1> <div id="div1"> <p>p1</p> <p>p2< ...

  5. php调用empty出现错误Can't use function return value in write context

    php调用empty出现错误Can't use function return value in write context 2012-10-28 09:33:22 | 11391次阅读 | 评论:0 ...

  6. git的某些默认行为--会推送pull的内容,即使commit的时候不显示

    今天一不小心又在git上犯了个大错误,用gitflow之前进行过pull分支的操作,然后用IDE选择修改的文件提交,可是推送的时候把pull的内容也推送到远程服务器了,提交的时候用git status ...

  7. Flink - DataStream

    先看例子, final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); D ...

  8. java Reentrant Lock

    //Listing 7-1. Achieving Synchronization in Terms of Reentrant Locks import java.util.concurrent.Exe ...

  9. js 定时跳转, 格式化字符串时间

    效果 1.js中将一字符串表示的系统时间转换为Date时间对象 //js中将一串字符串转换为date类型,主要是先过滤字符,然后分割开 function parseToDate(strTime) { ...

  10. BLE-NRF51822-实现简单扫描器

    在sdk目录 XXX:\Keil_v5\ARM\Pack\NordicSemiconductor\nRF_Examples\9.0.0\ble_central  下有官方提供的主从连接的demo. 官 ...