Linux内核基础知识

简介: Linux内核基础知识

1.arm设备的启动过程

x86、Interl windows


  • 启动过程: 电源 ---- >BIOS----->windows内核 --->文件系统(C盘、D盘) ---->应用程序启动
  • 嵌入式产品: 树莓派、mini2440、manopi、海思、RK(瑞芯微)等
  • 启动过程: 电源-->bootloader (引导操作系统启动) -->linux内核--->文件系统(根据功能组织文件夹) --->应用
  • 安卓的启动过程: 电源---->bootloader/FastBoot--->inux内核---.>文件系统--->虚拟机--->Home应用程序C51/32启动过程: start启动文件--->应用程序
  • bootloader: 一段裸机代码,cpu、内存、flash、串口、数据段、驱动 (汇编和C语言)


2.linux内核源码分析

  • 是开源、免费,linux开源社区工作者共同维护
  • linux内核大概1.3万个文件,但是linux编译出来就几M
  • Linux是一个开源,支持多架构的多平台代码,可执行非常高
  • 支持多平台多架构,编译之前需要配置出适合的目标平台
  • ARM: 海思: 树莓派、nanopi、2440; x86;PowerPC


3.linux内核源码配置

驱动代码的编写,必须要一个配置编译好的内核

配置的最终目标会生成 .config 文件 ,这个文件会指导makefile把需要用到的东西组织成内核

  • 第一种方式,厂家配了linux内核源码,cp厂家的.config   / find . -name *_defconfig
  • 第二种方式,make menuconfig 一项一项配置,基于厂家提供的config来配置
  • 第三种方式,完全自己手动配置


如何配置树莓派的Linux内核

1.ubuntu交叉编译环境的搭建

  • 获取交叉编译工具和源码
  • 手动配置环境变量


2.配置config


树莓派1是bcmrpi_defconfig,树莓派2、3工程是bcm2709_defconfig


使用源码自带的config:ARCH=arm CROSS_COMPILE=arm-linux-gnueablhf-KERNEL=kernel7 make bcm2709_defconfig 此命令功能是获取bcm2709_defconfig的配置到 .config里


驱动两种方式加载

  • *编译进内核 zImage包含了内核
  • M 模块方式生成驱动文件xxxx.ko ,系统启动后,通过命令 inmosd xxx.ko 加载

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig

           指定ARM架构   指定编译器                      树莓派          主要核心指令

4.Linux内核编译

安装必要的库:

sudo apt-get install bc

sudo apt-get install libncurses5-dev libncursesw5-dev

sudo apt-get install zlib1g:i386

sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5


5.1 编译:

           ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs

j4 指定多少电脑进行编译,zImage生成内核镜像 ,modules要生成的驱动模块,dtbs生成配置文 件


5.2 编译成功后,看到源码树目录多了vmlinux,失败则无此文件

           成功后,目标zImage镜像arch/arm/boot底下


5.3 打包zImage成树莓派可用的xxx.img

           ./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img


5.4 数据拷贝


(1)挂载U盘


       mkdir data1 data2


       sudo mount /dev/sdb1 data1   一个fat分区,是boot相关的内容,kernel的img


       sudo mount /dev/sdb2 data2   一个是ext4分区,也就是系统的根目录分区。


(2 )安装modules, 设备驱动文件: hdmi usb wifi io 等等


       sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make         INSTALL_MOD_PATH=/home/zgl/data2 modules_install


81afb9aa4872915f099fd11283f957d8_885411745a1c4d1ba2b36bd7b8330a1d.png


(3)安装更新 kernel.img 文件,注意镜像名字是kernel7.img


       先备份


       cd /home/zgl/data1


       cp kernel7.img kernel7OLD.img


       再把编译新生成的拷贝到data1,起名kernel7.img


       cp kernel_new.img /home/zgl/data1/kernel7.img


 (4)复制其他相关文件


       cp arch/arm/boot/dts/.*dtb* /home/zgl/data1


       cp arch/arm/boot/dts/overlays/.*dtb* /home/zgl/data1/overlays/


       cp arch/arm/boot/dts/overlays/README /home/zgl/data1/overlays/


最后将Linux内核镜像拷贝至树莓派并启动新内核

f0effe275a620d908482c74fd314da80_40cdadaa8f524c31b237608551fa5712.png

相关文章
|
27天前
|
存储 Linux 数据处理
探索Linux操作系统的内核与文件系统
本文深入探讨了Linux操作系统的核心组件,包括其独特的内核结构和灵活的文件系统。文章首先概述了Linux内核的主要功能和架构,接着详细分析了文件系统的工作原理以及它如何支持数据存储和检索。通过比较不同的文件系统类型,本文旨在为读者提供一个关于如何根据特定需求选择合适文件系统的参考框架。
|
4天前
|
Linux API 调度
技术笔记:Linux内核跟踪和性能分析
技术笔记:Linux内核跟踪和性能分析
|
2月前
|
安全 算法 网络协议
探索Linux操作系统的内核管理
【5月更文挑战第31天】本文将深入探讨Linux操作系统的内核管理机制,包括其设计原则、主要组件以及它们如何协同工作以提供高效的系统性能。通过分析Linux内核的关键特性和功能,我们将揭示这一开源操作系统如何在各种计算环境中保持其稳定性和灵活性。
|
2月前
|
机器学习/深度学习 人工智能 负载均衡
深度解析:Linux内核调度策略的演变与优化
【5月更文挑战第30天】 随着计算技术的不断进步,操作系统的性能调优成为了提升计算机系统效率的关键。在众多操作系统中,Linux因其开源和高度可定制性而备受青睐。本文将深入剖析Linux操作系统的内核调度策略,追溯其历史演变过程,并重点探讨近年来为适应多核处理器和实时性要求而产生的调度策略优化。通过分析比较不同的调度算法,如CFS(完全公平调度器)、实时调度类和批处理作业的调度需求,本文旨在为系统管理员和开发者提供对Linux调度机制深层次理解,同时指出未来可能的发展趋势。
|
2月前
|
算法 安全 Linux
探索Linux内核的虚拟内存管理
【5月更文挑战第20天】 在本文中,我们将深入探讨Linux操作系统的核心组成部分之一——虚拟内存管理。通过剖析其关键组件和运作机制,揭示虚拟内存如何提供高效的内存抽象,支持庞大的地址空间,以及实现内存保护和共享。文章将重点讨论分页机制、虚拟内存区域(VMAs)的管理、页面置换算法,并简要分析这些技术是如何支撑起现代操作系统复杂而多变的内存需求的。
|
13天前
|
Linux
查看linux内核版本
在Linux中查看内核版本可使用`uname -r`、`cat /proc/version`、`lsb_release -a`(若安装LSB)、`/etc/*release`或`/etc/*version`文件、`dmesg | grep Linux`、`cat /sys/class/dmi/id/product_name`、`hostnamectl`、`kernrelease`(如果支持)、`rpm -q kernel`(RPM系统)和`dpkg -l linux-image-*`(Debian系统)。
26 4
|
14天前
|
安全 Linux 数据处理
探索Linux的kmod命令:管理内核模块的利器
`kmod`是Linux下管理内核模块的工具,用于加载、卸载和管理模块及其依赖。使用`kmod load`来加载模块,`kmod remove`卸载模块,`kmod list`查看已加载模块,`kmod alias`显示模块别名。注意需有root权限,且要考虑依赖关系和版本兼容性。最佳实践包括备份、查阅文档和使用额外的管理工具。
|
25天前
|
Linux 芯片
Linux 驱动开发基础知识——查询方式的按键驱动程序_编写框架(十三)
Linux 驱动开发基础知识——查询方式的按键驱动程序_编写框架(十三)
14 2
|
25天前
|
运维 NoSQL Ubuntu
深入理解Linux中的"crash"命令:内核崩溃的调试利器
`crash`是Linux内核崩溃调试工具,用于分析内核崩溃转储文件,提供GDB-like的交互式CLI。通过加载`vmcore`文件和内核映像,管理员可以查看系统状态、调用栈、内存布局等。安装`crash`可使用包管理器,如`apt-get`或`yum/dnf`。尽管有学习曲线且依赖转储文件,但`crash`在系统故障排查中极其重要。
|
2月前
|
Linux
探索Linux操作系统的内核模块
本文将深入探讨Linux操作系统的核心组成部分——内核模块,揭示其背后的工作机制和实现方式。我们将从内核模块的定义开始,逐步解析其加载、卸载以及与操作系统其他部分的交互过程,最后探讨内核模块在系统性能优化中的关键作用。