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 内核移植

相关推荐
阿洛学长1 分钟前
VMware安装虚拟机教程(超详细)
java·linux·开发语言
YOU OU4 分钟前
Linux基本使用和程序部署
linux·运维·服务器
AI行业学习13 分钟前
PuTTY 工具下载部署、基础配置及 SSH 远程服务器连接完整操作指南Windows 平台 【2026.6.1】
运维·windows·ssh
jiayong2313 分钟前
CI/CD深度解析01-核心概念与原理
运维·git·ci/cd
fred_kang14 分钟前
如何找到 Linux 服务器上某个 URL 路径对应的实际部署位置
linux·运维·服务器
用户2367829801681 小时前
Linux iptables 深度解析:从规则匹配到 NAT 转发实战
linux
CairBin1 小时前
SideSail——Ubuntu 26.04(GNOME 50)侧边栏插件,支持设备信息剪贴板和米家设备简单控制
linux·ubuntu
howard20051 小时前
3.4 Linux目录操作
linux·目录操作
Volunteer Technology2 小时前
Flink的DataStream分区操作
大数据·linux·flink
打码人的日常分享2 小时前
NLP和AI大模型应用方案
运维·人工智能·安全·系统安全·制造