笔记整理—内核!启动!—kernel部分(4)将内核代码分为3个部分

ops/2025/1/11 18:40:59/

        我们可以将内核代码分为3个部分:1.arch是cpu架构相关的部分。2.drivers是硬件驱动部分。3,别的部分,主要进行硬件弱相关或无相关的内容。

        arch文件夹中的主要内容:

mach (machine architecture)机器架构相关文件arch/arm中的mach-xxx就是一个machine,一个开发板一个机器码。plat(platform)平台相关文件一个平台就是一个SOC相关的内容与内设外设相关,驱动分层与分离思想使得驱动放在drivers文件夹,数据放在plat文件夹。include是与架构相关的头文件,内核通用的头文件在内核源代码属=树kernel中,不在arch、中。
#includ <linux/keeernel.h>位置在kernel/include/linux/kernel
#include <plat/s5pv210.h>位置在kernel/arch/arm/plat-s5p/include/plat/s5pv210.h中

        内核配置的解压地址应等于链接地址,链接地址是一个虚拟地址,解压地址是物理地址,在head.S中可以看到,自解压地址存放在mach/Makefile.boot中。

        内核机器码确定,机器码在mach-xxx中,用MACHINE_START宏进行编译,以MACHINE_START开始~MACHINE_END结束。使用结构体进行封装。

        MACHINE_START(_type,"_name");用宏定义一个类型为machine_dosc类型,名为__mach_dese_xxx的结构体变量,会被定义到arch.info.init段(vmlinux.lds.s)。

        一个结构体可以定义一个cpu机器码mach-xxx.c machine_desc_xxx。

        在结构体中:init_machin=xxx_machine_init。是一个机器init函数,包括初始化的种种,初始化硬件的信息,网卡什么的都有,硬件问题可以在这个函数中进行分析。

        oops内核致命错误信息,通过PC与LR进行失败分析,PC与LR会指向某符号指出的错误点。

        linux内核模块错误可针对配置项menuconfig进行分析,menuconfig会正针对配置进行改变,本质是一堆宏条件编译,再根据这些配置编译出zImage。

        kernel panic内核错误,backtre回溯信息得到错误点。

unknow_block(0,0)    (主设备号,从设备号),但0,0说明没找到错误点

        如果要挂载或者使用一个东西,这个东西(设备)用不了可以去考虑其依赖的设备驱动是否正确。

        SD/iNand本身是由2一个个扇区组成。SD卡的0扇区存放MBR(分区信息),1扇区存放BL1(也就是uboot的第一部分)。

        iNand分区依赖于fdisk指令进行分区,iNand分区已经分好了,所以uboot不会传递这个信息,Nand分区依赖kernel与uboot分区表进行传递。

        xxx_machine_init是所有硬件的初始化函数,Devs.c中记录了相关的一些硬件连接方法的配置(数据),map.h记录了IO基地址与bank值(链接)。

        内核上电:设置模式、校验cpu、校验机器码、校验tag传递、创建页表、清bss段等最后用b strart_kernel跳转到2阶段。

        插入一个调试方法:led调试函数适用于X210开发板

ldr r3 = 0x11111111
ldr r4 = 0xE0200240
str r3 ,[r4]ldr r3 = oxff
ldr r4 = 0xE0200244
str r3 ,[r4]
mov pc,lr    <-返回


http://www.ppmy.cn/ops/108889.html

相关文章

【计算机网络】电路交换、报文交换和分组交换——三种交换方式性能分析以及计算机网络的分类

【计算机网络】电路交换、电报交换、分组交换 目录 【计算机网络】电路交换、电报交换、分组交换1. 电路交换2. 电报交换3. 分组交换4. 基于分组交换~“虚电路交换”技术 【计算机网络】电路交换、报文交换和分组交换——三种交换方式性能分析电路交换性能分析报文交换性能分析…

【C#生态园】提升性能效率:C#异步I/O库详尽比较和应用指南

优化异步任务处理&#xff1a;C#异步I/O库全面解析 前言 在C#开发中&#xff0c;异步I/O是一个重要的主题。为了提高性能和响应速度&#xff0c;开发人员需要深入了解各种异步I/O库的功能和用法。本文将介绍几个常用的C#异步I/O库&#xff0c;包括Task Parallel Library、Asy…

ffmpeg安装测试(支持cuda支持SRT)

文章目录 背景安装ffmpeg直接下载可执行文件选择版本选择对应系统版本下载测试Linux下安装 查看支持协议以及编码格式 常见错误缺少 libmvec.so.1LD_LIBRARY_PATH 错误 GPU加速测试SRT服务器搭建下载srs5.0源码解压安装配置启动 SRT推流测试SRT播放测试 背景 在音视频开发测试中…

iPhone手机清理软件:照片清理功能全解析

在数字化生活中&#xff0c;智能手机成为我们记录生活点滴的主要工具&#xff0c;尤其是iPhone&#xff0c;以其卓越的相机功能备受用户青睐。然而&#xff0c;成千上万的照片迅速堆积&#xff0c;不仅占用了大量存储空间&#xff0c;还使得设备运行缓慢。在众多解决方案中&…

Leetcode面试经典150题-98.验证搜索二叉树

解法都在代码里&#xff0c;不懂就留言或者私信 二叉树的递归套路&#xff0c;练练就习惯了 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this…

如何在快节奏的IT行业中保持学习动力

在瞬息万变的IT行业&#xff0c;技术的快速更新让程序员面临持续学习的压力。新的编程语言、框架和工具层出不穷&#xff0c;迫使我们时刻保持竞争力。然而&#xff0c;长期的高强度学习和工作容易让人感到疲惫和倦怠&#xff0c;削弱对技术的热情。本文将探讨几种有效的策略&a…

代码审计总结

代码审计总结 概述 一、代码审计 1.1什么是代码审计&#xff1f; 1.2为什么要执行代码审核&#xff1f; 1.3代码审计的好处 二、代码审计流程 2.1代码检查方法 2.2代码检查项目 2.3编码规范 2.4代码检查规范 2.5缺陷检查表 2.6代码审计复查 2.7代码审计结果总结 三…

Pytorch深度学习快速入门笔记【小土堆】

目录 1 Python学习中两大重要函数 2 Python代码编辑的三种方式 3 Pytorch学习 3.1 Dataset和DataLoader 3.1.1 Dataset 3.1.2 DataLoader 3.2 TensorBoard 3.2.1 add_scalar 3.2.2 add_image 3.3 Transforms 3.3.1 ToTensor 3.3.2 Normalize 3.3.3 Resize 3.3.4 C…