码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ARM-Linux内核基础知识


    文章目录

      • 系列文章
      • 一、ARM-Linux内核和普通内核的区别
        • 1.Linux内核
        • 2. ARM-Linux内核
      • 二、Linux 模块概述
        • 1. 与module相关的命令有
        • 2. 模块命令
      • 三、模块的加载
      • 四、模块的卸载
      • 五、ARM-Linux系统的启动和初始化
      • 六、移植的基本概念
        • 1. 从一个硬件平台移植到另外一个硬件平台
          • - Linux操作系统移植。
          • - 内核移植
        • 2. 从一个操作系统移植到另一个操作系统
        • 3. 从一种软件库环境移植到另一种软件库环境

    系列文章

    1. ARM-Linux内核知识点
    2. Linux之交叉编译器的构建

    一、ARM-Linux内核和普通内核的区别

    1.Linux内核

    作者Linux Torvalds
    C语言写成
    宏内核

    2. ARM-Linux内核

    基于ARM处理器的Linux内核

    Linux是一个单内核(monolithic
    kernel),单内核的最大优点是效率高,因为所有的内容都集中在一起,但也有可扩展性以及可维护性差的缺点。模块机制的引入就是为了弥补这一缺陷。内核模块全称为动态可加载内核模块(Loadable
    Kernel Module,LKM)是Linux内核向外部提供的一个插口,简称为模块。

    二、Linux 模块概述

    1. 与module相关的命令有

    modprobe、depmod、genksyms、makecrc32、insmod、rmmod、lsmod 、ksyms以及 kerneld。
    其中以 insmod、rmmod、lsmod、depmod、modprobe、kerneld最重要

    2. 模块命令

    lsmod把现在 kernel 中已经安装的modules列出来
    insmod把某个 module安装到 kernel 中。
    rmmod把某个没在用的module从kernel中卸载。
    depmod制造 module dependency file,以告诉将来的insmod要去哪儿找modules来安装。这个dependency file放在 /lib/modules/[当前kernel版本]/modules.dep

    帮助理解记忆
    module — mod
    insert 插入 — insmod
    remove 删除 — rmmod

    三、模块的加载

    载module有两种方法

    1. 通过insmod命令手工将module载入内核
    2. 根据需要载入module(demand loaded module)

    四、模块的卸载

    当内核的某一部分在使用某个module时,该module是不能被卸载的。

    例如,如果系统mount了VFAT文件系统,不能卸载VFAT module。每一个module有一个计数器(module
    count)。可以利用lsmod命令来得到它的值

    五、ARM-Linux系统的启动和初始化

    • 使用bootloader将内核映像载入
    • 内核数据结构初始化—内核引导第一部分
    • 外设初始化—内核引导第二部分
    • init进程和inittab脚本
    • rc启动脚本
    • Shell的启动

    六、移植的基本概念

    移植,英文为 Porting。从广义上讲,移植包括软件移植和硬件移植。
    从狭义上讲,移植就是指软件移植,即将一个软件从一个平台迁移到另外一个与其不同的平台上工作

    1. 从一个硬件平台移植到另外一个硬件平台

    这里是引用

    - Linux操作系统移植。

    比如将基于 x86体系的 Linux移植到基于 ARM体系的嵌入式 Linux。 首先是工具链的移植,因为基于 x86体系的
    gcc就不能用在基 于 ARM的体系中,所以在 PC机上编译时要建立交叉编译工具 链。同时还要考虑 binutils、glibc等移植。

    - 内核移植

    内核移植主要包括两方面的工作,一是 arch目录下的体系 结构的移植,如从 i386移植到 arm,二是移植 drivers目录下的许多硬件驱动程序。最后是应用程序的移植

    2. 从一个操作系统移植到另一个操作系统

    这种形式的移植也是最常见的。比如将 Windows系统下运行的程序移植到 Linux/Unix系统中,
    这时需要考虑操作系统提供的 API,以及所调用的函数库等。
    
    • 1
    • 2

    3. 从一种软件库环境移植到另一种软件库环境

    这种类型的移植也是比较常见的,例如基于 Qt 3.0库的应用程序移植到 Qt 4.0库环境中去。
    再如基于 glibc库环境的程序移植到基于 uclibc库环境。 
    
    • 1
    • 2

    在这里插入图片描述

  • 相关阅读:
    如何避免手动修改文件名,批量重命名文件的方法
    Linux 学习笔记(1)——系统基本配置与开关机命令
    Linux信号掩码(signal mask)详解与相关例程
    请问出现这种情况怎么解决呀!
    Angular 基础
    从Mpx资源构建优化看splitChunks代码分割
    后台管理不可忽视,华为云会议最新支持管理员分权分域
    基于javaweb的嘟嘟网上商城系统(java+jdbc+jsp+mysql+ajax)
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver报错
    代码随想录笔记_动态规划_322零钱兑换
  • 原文地址:https://blog.csdn.net/weixin_46555054/article/details/124903239
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号