时钟类型、时间子系统简介
sequenceDiagram participant caller as caller participant irq as irq.c participant irqdomain as irqdomain.c participant irqdesc as irqdesc.c participant bitmap as bitmap.c activate caller caller ->> irq: irq_of_parse_and_map activate irq Note right of irq: irq_of_parse_and_map irq ->> irq: of_irq_parse_one irq ->>...
1. printk 打印级别控制:/proc/sys/kernel/printk printk_index:/sys/kernel/debug/printk/index/ 2. pr_fmt和dev_fmt 在阅读Linux内核或其他开源代码时,在文件的开始部分,通常能看到类似如下代码。但是代码中又没有看到使用的地方。 1#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 2 3#include <...> 4#include <...> 其实pr_fmt是通常和大名鼎鼎的printk一起来合作实现其他宏,比较常见的就是pr_*()系列宏,另外一些模块或驱动中也会利用pr_fmt来输出日志信息。...
1. 查找入口 u-boot版本:2024.01 参考defconfig:imx8qm_mek_defconfig 通过编译生成的u-boot.lds,U-Boot的入口为_start。而程序的一开始存放的指令是由start.c生成的。 1ENTRY(_start) 1 . = 0x00000000; 2 . = ALIGN(8); 3 .text : 4 { 5 *(.__image_copy_start) 6 arch/arm/cpu/armv8/start.o (.text*) 7 } 2. 程序流程 2.1. _start 默认情况下_start会直接通过b reset跳转到reset处。 在反汇编中,1400000a就...
1. 旧机器拷贝 WEPE制作U盘启动盘 保留原硬盘,接新硬盘 开机选择进入PE 新硬盘改为GPT分区表,删除所有分区 拷贝或创建EFI分区,大小约为100M即可,也可以加大 【可选】拷贝或创建MSR分区,大小约为16M 拷贝C盘 【可选】拷贝其他有需要的分区 2. 重建引导 在原机器PE中操作,完成后将硬盘换到新机器 临时修改新旧硬盘盘符,交换C盘,使新硬盘的分区作为C盘 为EFI分区分配盘符 XXX工具 重建引导
1. 方法一:传递数组 C语言对多维数组的存储是按照一维数组来处理的,数组的每个维度在内存中按顺序存储。所以将多维数组作为参数传递时,必须指定多维数组子维度的大小,否则函数无法得知每个子维度结束地址。 第一维的长度可以指定,也可以不指定。 1void func1(int a1[], int x); 2void func2(int a2[][4], int x, int y); 3void func3(int a3[][4][8], int x, int y, int z); 2. 方法二:数组指针 把参数声明为指向数组的指针,此方法还是需要指定数组的子维度大小,不然函数内部无法使用下标去访问数组。 1void func1(int...
1. 总览 如下为内核开发或驱动开发常见的内存管理API关系,其他如CMA分配器等相关API未列出。 1.1. 框架图 1.2. 函数图总览 2. memblock分配器 memblock分配器主要用于Linux启动时的内存分配,被memblock_alloc分配后未被释放的内存,不会被加入到页管理器中。 api param desc memblock_alloc size, align size表示要申请的大小,align表示内存对齐大小 3. 页分配器 页分配器相关的函数或宏在include/linux/gfp.h中声明。常用的函数如下: return api param unsigned long...
head.S分析
1. 启动流程 1.1. bootrom 芯片上电后,会自动执行bootrom代码,bootrom是各家厂商定制的,但完成的工作基本相同。bootrom通常支持从多种不同的介质启动,如SD卡、NADN、eMMC、USB等。以Exynos4412为例,bootrom会读取OM引脚指定的启动介质。以eMMC为例,eMMC分为boot0、boot1、RPMB和user四个物理分区,四个物理分区独立寻址。可以通过寄存器指定eMMC的bootmode,也就是eMMC启动时,读取那个物理分区的数据。这就需要根据厂家需要,提前设置eMMC的寄存器。对于Exynos4412来说,bootrom会去读boot0分区的内容。 短接emmc clk...
1. 测试结果 分别声明一个一维数组a1[8]和二维数组a2[4][8],查看各个表达式的类型、地址、与首地址的差值,以及内存地址内存储的int变量值。数组内变量的低8位记录数组的行号和列号,其中高4位为行,低4位为列。先看一下测试程序给出的结果。 一维数组 1int a1[8]; 2sizeof(a1): 32(0x20) var typeof(var) (void *)(var) offset *(int *)(var) a1 int * 0x7ffe2034d2d0 0x00 0x00 &a1 int (*)[8] 0x7ffe2034d2d0 0x00 0x00 &a1[0] int * 0x7ffe2034d2d0...