linux内核移植

发布时间 2023-03-22 21:09:10作者: 迷人的危险~

 

 

 

 

linux内核源码获取

  linux 内核源码下载    https://www.kernel.org/
  linux 内核版本命名    主版本号.次版本号.修订版本
  linux 内核版本选择(和uboot类似)
          支持对应的硬件平台
          相对成熟的版本(资料多)
          稳定版本(次版本号为偶数的版本一般都是稳定版)

 

 

linux内核源码结构

  

  arch:  与CPU架构相关的源代码                                       block:磁盘设备的支持

  crypto:加密相                        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​            ​​​​​​​firmware:固件   

  drivers:设备驱动        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        fs:文件系统 

  include:头文件                                                                   init:内核初始化 

  ipc:进程间通信        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​           ​​​​​​​kernel:内核核心调度机制等 

  lib:库​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                          ​​​​​​​mm:内存管理 

  net:网络协议        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​              ​​​​​​​scripts:工具、脚本等 

  security:安全        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​              ​​​​​​​usr:打包与压缩     

  virt:虚拟                                                                              tools:  工具 

  COPYING:  版权                                                                CREDITS:  内核贡献者

  README:  说明文档                                                          Documentation:  帮助文档

  Makefile:  编译管理                                                            samples:  示例
  

 

linux内核的配置

  指定处理器架构及编译工具
    在Linux内核源码顶层目录下的Makefile中指定(ARCH、CROSS_COMPILE)

  导入当前处理器的默认配置
    make <soc_name>_defconfig

    注1:soc_name为当前使用的处理器的名字
    注2:内核源码的arch/arm/configs下对各个厂商的soc都有一个默认配置文件    

    执行该命令后就会将对应的配置文件中的信息导入到源码顶层目录下的.config

 

  修改配置
    默认配置只能保证内核拥有最基本的功能,我们需要根据自己的实际需求对内核做进一步的配置

    make menuconfig

    [ ] 有两种状态
      输入Y,显示“*”,内核中该功能被选中,相关代码会被编译进内核
      输入N,显示“ ”,内核中该功能不被选中,相关代码不会被编译进内核

    < > 有三种状态
      输入Y,显示“*”,内核中该功能被选中,相关代码会被编译进内核
      输入N,显示“ ”,内核中该功能不被选中,相关代码不会被编译进内核
      输入M,显示“M”,内核中该功能被选为模块(被编译为独立的模块)

 

 

linux内核的编译(以下命令均在内核源码的顶层目录下执行)

  make  -j8 uImage      多线程编译内核(编译选为“*”的选项到内核),推荐最多为CPU物理核心总数的两倍     
  make modules      编译内核模块(编译选为“M”的选项为独立模块)  
  make dtbs             编译设备树(将设备树源文件dts编译为二进制文件dtb)
  make clean              删除编译过程中产生的中间文件
  make distclean             删除编译过程中产生的中间文件,以及配置文件       , 

 

 

开始移植linux 内核

  1.修改顶层Makefile,指定交叉编译器

  $ vi    Makefile                                                                                                                

    ARCH ?= $(SUBARCH)
    CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)

    修改为以下内容(注意后边不要有多余空格),然后保存退出

    ARCH ?= arm 
    CROSS_COMPILE ?= arm-none-linux-gnueabi-

  

  2.指定使用的处理器

    $ make s3c2410_defconfig   

    

    显示以上信息表示配置成功

 

  make menuconfig错误解决方法

    (32条消息) make menuconfig错误_make menuconfig报错_Flynnsin的博客-CSDN博客

    (32条消息) Linux编译_五星好市民zm的博客-CSDN博客

    (32条消息) Linux下make menuconfig命令出现[scripts/kconfig/mconf.o] Error 1......错误的解决办法_scripts/kconfig/lxdialog/dialog.h:32:10: fatal err_西岸贤的博客-CSDN博客

 

  3.进入内核配置界面

    $ make menuconfig   

    

    方向键         可选择不同的选项
    Enter      键进入子菜单
    Y            键选中某项功能 
    N           键去除某项功能
    M             键将该功能编译成内核模块
    Esc           按两次退出界面
    ?            为帮助选项
    /            键为搜索选项

    配置完成后通过方向键选择‘Save’保存即可,然后选择‘Exit’退出该配置界面  

 

  4.编译内核(该过程可能需要二十分钟左右)

    $ make -j8 uImage

    编译成功在源码的 arch/arm/boot/ 目录下生成了 uImage 镜像

 

    

(32条消息) 嵌入式系统移植【7】——Linux内核移植-CSDN博客