linux内核编译相关
参考: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内核编译相关的更多相关文章
- Linux内核编译与安装
2013-04-16 Linux内核介绍 Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.L ...
- Lab1:Linux内核编译及添加系统调用(详细版)
实验一:Linux内核编译及添加系统调用(HDU) 花了一上午的时间来写这个,良心制作,发现自己刚学的时候没有找到很详细的,就是泛泛的说了下细节地方也没有,于是自己写了这个,有点长,如果你认真的看完了 ...
- Linux内核编译、安装流程
原文链接:https://blog.csdn.net/qq_28437139/article/details/83692907 此处只讲linux内核编译步骤至于安装虚拟机,安装ubuntu操作系统请 ...
- Linux内核编译完整过程
Linux内核编译完整过程 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过 ...
- 羽夏看Linux内核——段相关入门知识
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...
- 运行在TQ2440开发板上以及X86平台上的linux内核编译
一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...
- linux内核编译环境配置
linux内核编译环境配置 如果不是编译内核,只需要安装与内核相匹配的kernel-devel开发包即可.即是/lib/modules/`uname -r`/build -> /usr/src/ ...
- Linux 内核 编译模块
背景: 由于调试内核或者由于分区大小限制,有时候内核组件不一定完全需要编进内核中. 所以,在开发中经常将内核组件编译成为模块,等到在恰当的时机加载. 概览: Linux内核模块的编译方法有两种: 1. ...
- Linux内核编译配置脚本
环境 宿主机平台:Ubuntu 16.04.6 目标机:iMX6ULL Linux内核编译配置脚本 在linux开发过程中熟练使用脚本可以大大简化命令行操作,同时对于需要经常重复操作的指令也是一种备忘 ...
随机推荐
- html5+css3
1,文件声明,<!Doctype>,不再有严格模式和混杂模式 2语意的标签 1,header 头 section中 nav导航(中上) aside侧边栏(中左) article内容(中右) ...
- 基于 jQuery Jcrop 插件的功能模块:头像剪裁
/** Jcrop version: 0.9.12 jQuery version: 1.9.0 Author: 小dee Date: 2014.10.30 */ 先看看他山之石:博客园的头像模块也是使 ...
- 合金装备V 幻痛 制作技术特辑
合金装备V:幻痛 制作特辑 资料原文出自日版CGWORLD2015年10月号 在[合金装备4(Metal Gear Solid IV)]7年后,序章作品[合金装备5 :原爆点 (Metal Gea ...
- ecshop lang用法
ecshop lang用法 分类: ECSHOP2013-08-15 16:17 2184人阅读 评论(0) 收藏 举报 ecshop目录下的languages目录.这个是ecshop语言包所在.ec ...
- 超实用PHP函数总结整理
超实用PHP函数总结整理 2014-12-06 分类:WEB开发.编程开发.首页精华暂无人评论 来源:月光光博客 分享到:更多8 1.PHP加密解密 PHP加密和解密函数可以用来加密一些 ...
- Magento架构分析,Magento MVC 设计分析
Magento架构分析,Magento MVC 设计分析 分类:Magento 标签:Magento MVC.Magento架构 669人浏览 Magento 采用类似 JAVA的架构,其扩展与稳定性 ...
- MySQL线程独享[转]
一.前言在 MySQL 中,线程独享内存主要用于各客户端连接线程存储各种操作的独享数据,如线程栈信息,分组排序操作,数据读写缓冲,结果集暂存等等,而且大多数可以通过相关参数来控制内存的使用量。 二.线 ...
- perl常用代码
字符串联结和重复操作符 联接: . 重复:x 联接且赋值(类似+=): .=例: $newstring = "potato" . "head"; $ ...
- su terminal get around---docker root
su : must be run from a terminal After some googling, I found the solution from Tero's glob. If you ...
- JavaScript判断文件的大小
function getFileSize(obj) {//obj 需要传入的参数为Input的对象 var objValue = obj.value; if (objValue == " ...