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

相关推荐
狂奔的sherry36 分钟前
一会儿能ping通一会ping不通解决方案
运维·网络·单片机·嵌入式硬件
用户4269427593981 小时前
Linux I/O 多路复用 Select/Poll,编程实战方案
linux
AI视觉网奇2 小时前
zsh 使用笔记 命令行智能提示 bash智能
linux·运维·笔记
IT成长日记3 小时前
【自动化运维神器Ansible】Playbook调用Role详解:从入门到精通
运维·自动化·ansible·playbook·role
xiaok3 小时前
使用PM2之后,是不是xshell断开了跟服务器的连接,退出来了,nodejs服务一样在线的
linux
2302_799525743 小时前
【ansible】4.实施任务控制
linux·服务器·ansible
2401_831501733 小时前
Linux之Ansible自动化运维(二)
运维·自动化·ansible
pwj去战斗吧3 小时前
一、部署LNMP
linux·运维
Tim风声(网络工程师)4 小时前
DNS有关知识(根域名服务器、顶级域名服务器、权威域名服务器)
linux·运维·服务器
热爱跑步的恒川4 小时前
告别服务器!Amazon Lambda无服务开发实战指南
运维·服务器