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文件

Linux内核源码编译

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

    复制代码
    	make uImage	

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

    复制代码
    	make modules   	

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

    复制代码
    	make dtbs      	

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

    复制代码
    	make clean     

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

配置步骤

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

相关推荐
ltl6 分钟前
QUIC 握手实现:Initial 到 1-RTT 的最小路径
linux
码视野37 分钟前
基于 Vue3 + Element Plus 的【智慧新能源汽车充电桩运维调度与分时共享租赁系统】设计与实现(附完整源码与PRD)
运维·人工智能·汽车·vue3
qq_426003961 小时前
【UI自动化测试】UI自动化报错解决方案
运维·ui·自动化
网安蟹佬霸1 小时前
WAF绕过技术实战:从规则检测到编码绕过全指南(2026最新版,附Payload集与自动化脚本)
运维·安全·网络安全·架构·自动化·网安
小杨不想秃头1 小时前
信息安全工程师教程第二章密码学
运维·服务器·密码学
I'mChloe1 小时前
WGCLOUD怎么监控多台服务器?从Server、Agent 部署到监控面板实战
运维·服务器
Android系统攻城狮2 小时前
Linux PipeWire深度解析之pw_init调用流程与实战(八十三)
linux·运维·服务器·音频进阶·pipewire音频进阶
国科安芯2 小时前
轨道供电韧性:ASP4644四通道降压架构在低轨卫星平台电源管理中的适用性分析
运维·网络·数据库·嵌入式硬件·架构·状态模式·低轨卫星星座
M78佐菲2 小时前
Linux学习笔记:进程
linux·笔记·学习·算法
Python自动化直播3 小时前
周末测试直播自动化时,发现一个棘手的并发问题
运维·自动化