1. make参数: CROSS_COMPILE
即交叉编译器的前缀(prefix),也就是选择将代码编译成目标cpu的指令的工具,如指定makeCROSS_COMPILE=arm-none-linux-gnueabi-就是使用arm-none-linux-gnueabi-gcc,arm-none-linux-gnueabi-ld等工具将代码编译成arm的可执行指令。如果不指定CROSS_COMPILE参数,make时将认为prefix为空,即使用gcc来编译。

2.make参数: ARCH
即architecture,就是选择编译哪一种cpuarchitecture,也就是编译arch/目录下的哪一个子目录。如指定makeARCH=arm就是编译arch/arm下的代码。如果不指定,make将使用本机(用什么机器编译就是什么)的cpu作为缺省ARCH.注意:arch/arm下不但有arm体系架构特有的代码,还有arm特有的kconfig,也就是配置选项,所以在makemenuconfig,make xxxx_defconfig的时候也必须指定ARCH=arm。

3. Configure& make kernel 的基本步骤
以编译arm versatile为利:

step 1:
make mrproper
清除所有上次编译产生的文件和.config文件。

step 2:
make ARCH=arm versatile_defconfig
使用arch/arm/configs/versatile_defconfig文件的配置,versatile_defconfig的内容将被copy到.config中。.config文件是将用户选好的编译选项保存下来,make时读取.config中的选项来编译kernel。注意:必须指定ARCH=arm,否则make会到arch/i386/configs下去找versatile_defconfig。正如前面2.ARCH中所述不指定ARCH的话,将使用本机(i386)的ARCH作为缺省ARCH。

step 3:
make ARCH=arm menuconfig
启动图形界面来作手工配置刚此生成的.config文件。此处也必须指定ARCH=arm,否则不会load刚才生成的ARCH=arm的.config.
修改配置后保存退出。

step 4:
make -j4 ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
编译生成kernel image,arm的kernel image存放在arch/arm/boot/zImage.'-j4'的作用是启动4线程编译。

4.Kernel编译生成产物:

vmlinux:
位于kernel源代码的根目录下。vmlinux是virtual memory linuxkernel.它是一个elf文件(executable & linkingformat),未压缩,其中包含所有的symbol,comments。可用arm-none-linux-gnueabi-readelf来读取其中的信息。

zImage(bzImage):
位于arch/arm/boot/下,是将vmlinux去除了symbol, comment后,添加了一段初始化代码,然后用gzip压缩,最后加上一小段mini gunzip代码(用于load后解压缩)而成的。bzImage是bigzImage。zImage适用于小内核,如果kernel较大,应该用bzImage.

uImage:
位于arch/arm/boot/下,被uboot引导的kernel image。缺省状态下不会被编译出来,需要makeuImage才会被编译。uImage实在zImage上加上一个64bytes的“header”,用来告诉uboot这个Image的大小等。
所以用hexdump可以看出,uImage从第64byte开始和zImage是完全一样的。

System.map:
这是整个kernelImage中symbol与address的对应表。用vi打开即可看到。实际上在make的最后会用arm-none-linux-gnueabi-nm来读取vmlinuxelf文件,从而生成System.map。只要运行arm-none-linux-gnueabi-nm -n vmlinux> tmp.map就会发现tmp.map和System.map是一样的。

下图说明了这些产物之间的关系:

make            - symbol, comment  + init code gzip compress   + mini gunzipheader
-------> vmlinux ------------------> ----------> -------------> ------------------->

64B header
zImage(bzImage)------------>  uImage

关于linux kernel编译的几项关键点:相关推荐

  1. Linux kernel编译时编译选项多选一如何固化在config文件

    每次在进行裁剪的Linux kernel编译时,都会碰到有提示,让你在某些编译选项多选一,如: Initialize kernel stack variables at function entry ...

  2. Linux kernel编译、安装及指定默认内核版本启动

    内容转自: https://blog.csdn.net/weixin_41666796/article/details/96434229 https://blog.mtkfan.com/post-43 ...

  3. linux内核makefile详解,linux kernel编译Makefile和Kconfig,make menuconfig详解

    Sam需要看看2.6 kernel中USB Mouse的代码.顺便谈谈Kernel中Makefile和Kconfig文件的关系以及配合使用. 背景知识: 背景知识一:Kconfig介绍: 在#make ...

  4. Linux kernel 编译问题记录【转】

    本文转载自:http://sunyongfeng.com/201701/programmer/linux/kernel_compile_fail.html 编译内核出现以下错误 Can't use ' ...

  5. linux kernel编译 undefined reference to `__ae

    问题代码 ktime_t calltime, delta, rettime;unsigned long long duration;calltime = ktime_get();/*获取当前时间*/ ...

  6. Android内核开发 Goldfish Linux Kernel编译及安卓虚拟机测试

    本文出处: http://blog.csdn.net/leytton/article/details/52736549 1.配置交叉编译环境 作者用的是android-ndk的/交叉编译工具 方法一: ...

  7. Linux kernel 编译 exfat.ko ntfs.ko 来支持exFat 和 NTFS 分区

    项目需求想让设备支持 exFat 和 NTFS 的文件格式. 默认的内核是不支持的,因为内核要限定1.5M之内, 所以很多东西都裁剪掉了. 而且不是所有项目都有这个需求,所以就需要编译为 ko ,按需 ...

  8. g++ linux 编译开栈_使用 linux kernel +busybox 定制linux系统

    写在开头: 本来是想使用linux kernel +busybox 制作一个教程的,后来快要结束的时候,死活找不到硬盘,我了解很多文章都有类似的,但是没有谈到硬盘找不到问题,最后历经艰辛,终于把问题解 ...

  9. 【学习札记NO.00004】Linux Kernel Pwn学习笔记 I:一切开始之前

    [学习札记NO.00004]Linux Kernel Pwn学习笔记 I:一切开始之前 [GITHUB BLOG ADDR](https://arttnba3.cn/2021/02/21/NOTE-0 ...

最新文章

  1. 6 关于数据仓库维度数据处理的方法探究系列——缓慢变化维处理——记录最新记录及上一次历史...
  2. 不带头结点链表,尾部插入法创建
  3. 2002年呼伦贝尔之行照片
  4. MATLAB 批量改文件名称
  5. Azure手把手系列 4:深入了解Azure 一块钱当三块用
  6. 烦人的幻灯片(信息学奥赛一本通-T1395)
  7. AS3程序性能优化建议
  8. iperf详细使用方法
  9. OCJP之Console
  10. 小米电视刷android系统升级,MIUI 7 升级到 Android M!最近就折腾小米了!
  11. TAP-Win32 Adapter OAS“的网络适配器删除后总是出现(kms激活器及win10激活)
  12. spring诸如方式_一个简单的步进器,具有诸如下一步,返回和结束之类的简单动作,可以执行简单的表格
  13. PHP微信扫码关注公众号并授权登录源码
  14. Android兼容8.0后APP图标变为原生小机器人图标
  15. python模拟登陆遇到重定向_Python requests jira登录302重定向
  16. 论文解读4 STRM《Spatio-temporal Relation Modeling for Few-shot Action Recognition》少镜头动作识别 CVPR2022
  17. CSS学习,Pixy图像翻转和CSS精灵
  18. 2022级sdut知到/智慧树---c语言第三章测试题解
  19. Skywalking内置Tags
  20. 暑期实习|转行|宝洁供应链训练营面经

热门文章

  1. centos yum 安装python3.6+pip
  2. jenkins是什么_使用 Jenkins 自动发布服务到 Kubernetes
  3. 服务器无法通过系统非页面共享区进行分配,服务器无法通过系统非页面共享区来进行分配的解决方法...
  4. 关于fetch api这点事
  5. hive 的条件判断(if、coalesce、case)
  6. django-中间件
  7. Datagridview绘制
  8. 个人作业2——英语学习APP的案例分析
  9. Ubuntu更改鼠标灵敏度
  10. JS 判断滚动底部并加载更多效果。。。。。。。。。