Linux内核移植

一、Linux内核概述

内核与操作系统

  1. 内核

    内核是一个操作系统的核心,提供了操作系统最基本的功能,是操作系统工作的基础,决定着整个系统的性能和稳定性

  2. 操作系统

    操作系统是在内核的基础上添加了各种工具集、桌面管理器、库、shell、应用程序等

Linux层次结构

Linux内核特点

代码结构清晰、模块化设计

支持丰富的硬件平台

较高的稳定性

轻量化及较强的裁剪性

开放源代码

更新活跃、用户较多、资料丰富

支持丰富的网络协议

... ...

二、Linux内核源码结构

Linux内核源码获取

  1. Linux内核源码下载

  2. Linux内核版本命名

    主版本号.次版本号.修订版本

  3. Linux内核版本选择

    支持对应的硬件平台

    相对成熟的版本(资料多)

    稳定版本(次版本号为偶数的版本一般都是稳定版)

Linux内核源码结构

  1. 平台相关代码

    arch: 与CPU架构相关的源代码

  2. 平台无关代码

    block:磁盘设备的支持 crypto:加密相关

    drivers:设备驱动 firmware:固件

    fs:文件系统 include:头文件

    init:内核初始化 ipc:进程间通信

    kernel:内核核心调度机制等 lib:库

    mm:内存管理 net:网络协议

    scripts:工具、脚本等 security:安全

    usr:打包与压缩 virt:虚拟

  3. 帮助文档、示例程序、工具等

    COPYING: 版权

    CREDITS: 内核贡献者

    README: 说明文档

    Documentation: 帮助文档

    Makefile: 编译管理

    samples: 示例

    tools: 工具

    ... ...

三、Linux内核的配置与编译

Linux内核源码配置

  1. 指定处理器架构及编译工具

    在Linux内核源码顶层目录下的Makefile中指定(ARCH、CROSS_COMPILE)

  2. 导入当前处理器的默认配置

    make <soc_name>_defconfig

    注1:soc_name为当前使用的处理器的名字

    注2:内核源码的arch/arm/configs下对各个厂商的soc都有一个默认配置文件

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

    文件中CONFIG_xxx=y表示内核选中了该功能,内核编译时就会将该功能对应的

    代码编译,内核的体积也会增大。#CONFIG_xxx is not set表示内核没有选中

    该功能,内核编译时该功能对应的代码不会被编译,内核的体积也会减小。

  3. 修改配置

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

    方法1:

    直接修改.config文件(不推荐)

    方法2:

    make menuconfig

  1. 修改配置

    \] 有两种状态 输入Y,显示"\*",内核中该功能被选中,相关代码会被编译进内核 输入N,显示" ",内核中该功能不被选中,相关代码不会被编译进内核 \< \> 有三种状态 输入Y,显示"\*",内核中该功能被选中,相关代码会被编译进内核 输入N,显示" ",内核中该功能不被选中,相关代码不会被编译进内核 输入M,显示"M",内核中该功能被选为模块(被编译为独立的模块) 注:使用make menuconfig配置的本质还是修改.config文件

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

    复制代码
    	make uImage	

    编译内核(编译选为"*"的选项到内核)

    复制代码
    	make modules   	

    编译内核模块(编译选为"M"的选项为独立模块)

    复制代码
    	make dtbs      	

    编译设备树(将设备树源文件dts编译为二进制文件dtb)

    复制代码
    	make clean     

    删除编译过程中产生的中间文件

配置步骤

相关配置的步骤看实验七 Linux 内核移植

相关推荐
南棱笑笑生27 分钟前
20250614让NanoPi NEO core开发板在Ubuntu core16.04系统下使用耳机播音测试
linux·运维·ubuntu
liang899928 分钟前
负载均衡器:Ribbon和LoadBalance
运维·ribbon·负载均衡
陶然同学41 分钟前
从零开始:VMware上的Linux与Java开发环境配置
linux·运维·服务器·vmware·虚拟机
盛满暮色 风止何安1 小时前
BGP基础
运维·服务器·网络·网络协议·tcp/ip·网络安全·智能路由器
阿拉丁的梦1 小时前
ue5的blender4.1groom毛发插件v012安装和使用方法(排除了冲突错误)
linux·运维·服务器
GeminiJM1 小时前
Docker监控服务部署
运维·docker·容器
morliz子轩1 小时前
在Docker上部署datalust/Seq日志服务系统
运维·docker·容器
exe4521 小时前
在docker中部署dify
运维·docker·容器
riverz12271 小时前
ARM 和 x86_64是什么关系
linux
qq_243050796 小时前
aflplusplus:开源的模糊测试工具!全参数详细教程!Kali Linux教程!(一)
linux·web安全·网络安全·黑客·渗透测试·模糊测试·kali linux