• 如何编译linux kernel


    其实build kernel很简单,首先参考kernel源代码目录下的README文件,基本上是这么几步:

    1. make mrproper -- 注意这一步走过之后,.config会被恢复成默认设置
    2. make menuconfig -- 在这里面check配置项,决定哪个打开,哪个关闭。哪些driver编译成module,哪些直接编译进内核
    3. make -- 首先会编译内核,完成后会自动编译modules

    几个Tips:
    1. 如果要做交叉编译,只需要定义CROSS_COMPILE环境变量就可以,比如:

    export CROSS_COMPILE=arm-none-linux-gnueabi-

    Linux kernel不依赖于glibc,只依赖于gcc, binutils(有ld, as这些软件)。所以,比如上面的例子,设置了CROSS_COMPILE之后,kernel就会用arm-none-linux-gnueabi-gcc, arm-none-linux-gnueabi-ld这样的命令来编译和链接。所以,要确定这些命令在PATH中,能被kernel找到。平常我们做交叉编译,准备工具链也就是准备这些东西。

    2. 用O=<dir path>这样的方式来将编译产生的所有文件放入指定的目录,包括.config。比如:

    make O=./build

    这个很好用,可以不污染源代码目录,要重新编译直接删掉build目录下的所有东西即可。记住,每个命令都要带有O=<dir path>这个option。

    3. 一般嵌入式系统中使用u-boot,而uboot是不能引导标准的linux kernel的。现在linux kernel已经内置支持生成u-boot格式的内核文件,只需要make完成后,再执行:make uImage即可。

    4. 编译完成后,生成的linux kernel文件,包括uImage,都放在<build dir>/arch/<architecture, 如arm>/boot目录下。Image是没有压缩过的版本,zImage是压缩过的。

    5. 使用make clean清除已经生成的.o文件

    6. 每个源码目录下的Kconfig文件定义了在make menuconfig中我们看到的那些菜单和项目。所以,看到make menuconfig界面中的项目,想知道是哪儿的,可以参考Kconfig文件。至于哪些源文件编译出什么东西,那就要看每个目录下的Makefile了。

    7. 如果有已经配置好的config文件(别人通过make menuconfig生成的),那么,将config文件放在源码目录/arch/<architecture name,如arm>/configs目录下,然后在源码根目录下,执行make <config file name>就可以直接将指定config文件的内容导入(也就是在当前目录下生成一个.config)。这样,如果有时我们只是需要在别人的基础上修改一些配置的话,就很有用。

    OK, That's all. Kernel源码目录下/Documents目录下有很多很好的文档,描述了kernel的很多feature,API和原理。值得参考。
  • 相关阅读:
    路由的props参数
    记录基于Vue2.0实现后台系统权限控制
    Object.keys()的详解和用法
    git checkout 命令所有参数用法详解
    JSONP原理及实现2
    珠峰vue笔记
    fastjson漏洞分析历史漏洞(图解)
    github 查询个人邮箱 (备忘)
    nmap 请求修改ua (nmap发送http请求的多种方式)
    如何有效进行回顾会议(上)?
  • 原文地址:https://www.cnblogs.com/super119/p/1924408.html
Copyright © 2020-2023  润新知