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

相关推荐
小O_好好学24 分钟前
Linux帮助命令
linux·运维·服务器
MXsoft61825 分钟前
监控易监测对象及指标之:Kubernetes(K8s)集群的全方位监控策略
运维
怒放的生命.31 分钟前
电气自动化入门05:三相异步电动机的正反转点动控制电路
运维·自动化·电气自动化·电工基础
莫泽Morze35 分钟前
VMware安装rustdesk服务器
运维·服务器
OH五星上将1 小时前
OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3568移植案例(下)
linux·驱动开发·嵌入式硬件·harmonyos·openharmony·鸿蒙开发·系统移植
jonssonyan1 小时前
稳了,搭建Docker国内源图文教程
运维·docker·容器
周湘zx1 小时前
k8s中的微服务
linux·运维·服务器·微服务·云原生·kubernetes
Jack黄从零学c++1 小时前
自制网络连接工具(支持tcpudp,客户端服务端)
linux·c语言·开发语言·网络协议·tcp/ip·udp·信息与通信
‍理我2 小时前
Linux系统编程(基础指令)上
linux·服务器
-杀意感知-2 小时前
Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
linux