自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 arm tf-m 源代码分析

/tfm_core_handler_mode()函数定义如下,它会调用SVC命令,并且,传递一个参数 TFM_SVC_SPM_INIT,最终,会调用到SVC_Handler, 最后,根据ID,调用到 tfm_spm_init()函数,后面会重点讲到tfm_spm_init()函数。又根据如下定义,可知psa_hash_compute 等价于 mbedcrypto__psa_hash_compute。//在load_a_partition_assuredly ()中,将会通过。

2024-06-25 16:01:30 750

原创 linux yocto 语法基础

• ${S}:当前模块的源代码路径,可以使用bitbake -e linux-imx |查看grep ^S= 命令,例如 u-boot: S=“/home/kinson/work/corstone-1000/build /tmp/work/corstone1000_fvp-poky-linux-musl/u-boot/1_2021.07-r0/git”多次设置弱默认值,只有最后一次生效。• TOPDIR:构建目录,TOPDIR=“/home/kinson/work/corstone-1000/build”

2024-06-25 14:56:34 598

原创 QEMU 6.2 源代码分析之 [ 9 ] —— 如何单步跟踪QEMU程序

另外,build/arch/arm64/boot/Image 本身在编译时,是需要编译出它自己的调试信息的。b function, 设置一个断点,也可指定一个源文件的某一行,甚至可以通过 if 加上条件断点。**run命令:**开始执行,遇到断点会自动停下来。**finish命令:**从一个函数返回。**info命令:**查看当前所有断点。**step命令:**进入函数内部。继续全速跑,直到再次遇到断点。查看一个地址处的结构体。

2024-06-25 14:35:23 537

原创 QEMU 6.2 源代码分析之 [ 8 ] ——对pci虚拟设备edu进行读写测试

当加载后,由于my_pcie_edu_driver.ko中的vendor id和device id将会与1234:11e8 匹配成功,从而正确地调用到my_pcie_edu_probe()函数中来,这里,就可以通过request_mem_region以及ioremap将EDU设备的BAR空间映射过来,后面就可以正常读写EDU设备的BAR空间了。如下是pci_edu_realize(),可以看到,它注册了 PCI设备的BAR空间,该空间的操作函数是:edu_mmio_ops。

2024-06-25 12:12:56 704

原创 QEMU 6.2 源代码分析之 [ 7 ] —— PL011串口控制器虚拟化

type_init(pl011_register_types)Pl011 Typeinfo定义初始化pl011对应的class:初始化pl011串口:memory_region_init_io()对于 virt 这个虚拟开发板,它的各个外设的地址定义如下,可以看到UART的寄存器基地址是 0x09000000,长度是 0x1000。Virt虚拟开发板的外设中断号是1。经过如下的流程,当虚拟的linux内核中,串口驱动在操作串口时,将会从DTB中,找到基地址 0x09000000 这个信息

2024-06-17 19:18:56 284

原创 QEMU 6.2 源代码分析之 [ 6 ] —— MMU 虚拟化

接着,再通过 section.mr,得到MemoryRegion, 再通过 mr->ram_block,得到 ram_block,再 ram_block->host + 0x2a68000,而 ram_block->host 是0x7fa793e00000,所以最终得到的HVA就是( 0x7fa793e00000 + 0x2a68000 )成功时返回 true。否则,如果正在探测,返回 false。假设已经知道了 GPA 地址,接下来,又该如何读写到里面的数据呢?

2024-06-17 19:08:44 381

原创 QEMU 6.2 源代码分析之 [ 5 ] —— GIC 虚拟化

0x02,表示来了外部的硬件中断,正因为如此,在下面的cpu_handle_interrupt中,才会因为检测到 cpu->interrupt_request 不为0,所以才会进入cc->tcg_ops->cpu_exec_interrupt(cpu, interrupt_request) 中去处理外部中断。

2024-06-17 19:03:19 278

原创 QEMU 6.2 源代码分析之 [ 4 ] —— 内存虚拟化

当Guest对RAM或者IO进行读写时,一定会调用 store和load汇编指令,该指令,会被TCG捕捉到,然后,进入store_helper或者load_helper中,IO空间的 MemoryRegion 是有对应的 ops 中的read/write接口的,但是对于 system ram,并没有ops,那么,各自是如何读写的呢?因此,对于 Guest的RAM 访问,直接mempcy即可,不需要 ops() 设置的,而对于IO空间,会通过mr->ops->write()接口来读写IO空间。

2024-06-17 18:58:19 164

原创 QEMU 6.2 源代码分析之 [ 3 ] —— CPU虚拟化

/将这个typeinfo存到一个hash表中去// create_vcpu_thread 函数指针在多线程情况下被初始化为 accel/tcg/tcg-accel-ops-mttcg.c 下的 void mttcg_start_vcpu_thread(CPUState *cpu) 函数,//单线程情况下则被初始化为 accel/tcg/tcg-accel-ops-rr.c 下的 void rr_start_vcpu_thread(CPUState *cpu) 函数。

2024-06-17 18:46:22 501

原创 QEMU 6.2 源代码分析之 [ 2 ] —— 开发板虚拟化

{ }},.parent = TYPE_VEXPRESS_MACHINE, //它的父亲是 TYPE_VEXPRESS_MACHINE.class_init = vexpress_class_init, //这里的 class_init具体在哪里调用,还需要进一步理解?

2024-06-17 18:39:59 344

原创 QEMU 6.2 源代码分析之 [ 1 ] —— Main()函数入口

默认情况下,没有指定优先级的初始化函数被视为具有中等优先级(0),而通过显式设置优先级,可以控制初始化函数的执行顺序。((constructor)) 属性时,就会告诉编译器,在程序加载时(在 main 函数执行之前),需要自动调用这个函数。((constructor)) 是 GCC编译器中的一个特性,它用于指示编译器将一个函数标记为在程序启动时自动执行的初始化函数。这个特性为开发者提供了一种方便的方式来定义在程序启动时自动执行的初始化函数,使得全局的初始化工作变得更加简单和方便。

2024-06-17 18:22:30 323

原创 在Ubunut 18.04 虚拟机中尝试使用Systemtap

ubuntu 18.04, systemtap

2024-06-11 15:26:12 404

原创 LibBpfLoader: Failed to create maps: (ret=-38)

分析到这里,再结合上面出错的log,基本可以判断是因为LibBpfLoader调用到bpf_create_map时,bpf_create_map又调用syscall(__NR_bpf, BPF_MAP_CREATE, &attr, sizeof(attr)),而 __NR_bpf 在kernel中并没有实现,所以,返回错误 -38, 即无效的syscall number。

2024-06-11 15:16:02 818

原创 Dts结点中的“dma_coherent”属性对mali gpu drvier的影响

属性,对应的,在drvier代码中,应该是需要调用 dma_alloc_coherent() 这类一致性映射接口来分配内存,而不是通过 alloc_pages()/dma_map_page()这类单页流式映射接口来分配内存。下面重点跟一下dma_map_page 这个接口,dma_map_page指向dma_map_page_attrs(d, p, o, s, r, 0)再看下dma_direct_sync_single_for_device()这个函数, 跟dmap_map_page()类似

2024-06-11 14:49:43 782 2

原创 Mali-GPU驱动-Midgard架构分析

Mali-GPU, Midgrad驱动

2024-06-11 11:55:30 1004

原创 Mali-GPU驱动-Panfrost架构分析

Mali-GPU, Panfrost架构

2024-06-11 11:51:53 931 1

原创 Linux中的SD驱动代码走读

linux, sd驱动

2024-06-11 11:43:35 536

原创 Uboot中的SD驱动代码走读

uboot, sd驱动

2024-06-11 11:38:27 799

原创 在 ubuntu 18.04 上面测试查找EXT4 文件系统的裸数据

my_file.soft.link的inode 为12,可以计算出它 在inode table中的 offset为 (12-1) x256B = 0xB00.my_file.txt的inode 为13,可以计算出它 在inode table中的 offset为 (13-1) x256B = 0xC00.根目录为inode 2,而 inode 2 在inode table中的 offset为 (2-1) x256B = 0x100.可以看到硬链接文件与原始文件,它们的 inode 是一样的,都是 13。

2024-05-09 19:14:31 837

原创 cat /proc/loadavg 对应的源代码

【代码】cat /proc/loadavg 对应的源代码。

2024-05-09 14:36:49 183

原创 在 Ubuntu 18.04 环境下通过 qemu 运行 aarch64 linux 内核

cpu:指定模拟的cpu,可通过qemu-system-aarch64 -M virt --cpu help查看,这里选择cortex-a57。-M:指定模拟的开发板,可通过qemu-system-aarch64 M help查看,截至书稿时,只有virt支持64-bit ARM。-nographic:启动字符界面(不启动图形界面),输出重定向到宿主机命令行,与参数 console=ttyAMA0 组合使用;-m:指定内存大小,virt 可支持超大内存,启动后可以使用free -h命令核对。

2024-05-07 10:48:40 1059

原创 Arm mmci host controller驱动分析

mmc0: mmci@60800000 {compatible = “arm,pl18x”, “arm,primecell”;reg = ;interrupt-parent = ;interrupts = ;max-frequency = ;//vmmc-supply = ;clocks = ,

2024-04-17 14:15:48 519

原创 xilinx emaclite 网卡驱动分析

emac lite, ethernet driver, linux

2024-04-17 13:07:43 788

原创 arm trusted-firmware-m代码分析

入口在此文件中:Main()//设置堆栈限制->()//配置各个内存边界的读写属性->//核心函数,需要重点展开分析//使能中断->();//初始化串口->(NULL)//初始化所在的FLASH,就是32MB那个()//读OTP值->->34m//汇编代码->();//发送SVC命令,触发(),这个函数是PSA的重点函数定义如下,它会调用SVC命令,并且,传递一个参数,最终,会调用到最后,根据。

2024-04-17 11:28:15 1668

原创 USB(isp1763)驱动在uboot中的流程分析

uboot usb driver

2024-04-17 10:55:28 790

原创 一个通过ARM DS-5仿真器向嵌入式linux传输文件的有用工具

2. ARM DS-5 安装在一台PC上面,同时 ARM DS-5 硬件连接到嵌入式linux所在的硬件的JTAG口上。4. 将如下2个文件拷贝到 DS-5 远程调试PC上的随便一个目录 /home/admin/xxx/下面。1. 在嵌入式linux kernel的DTS中保留一块内存。5. 从 嵌入式linux 向 DS-5 PC传文件。上面的工具,有需要的小伙伴,请私信我。

2024-04-17 10:37:16 298

原创 周易NPU的KMD驱动分析

注册中断处理函数,中断处理相对比较简单,主要是清中断,更新。与周易硬件相关的操作函数,都封装在这个结构体中。###device tree定义。kmd driver调用流程。这个里面,貌似都是空函数。相对比较简单,不重点分析。

2024-04-17 10:17:50 699

原创 linux display子系统流程分析

linux display

2024-04-17 10:06:00 618

原创 Open-DDS源代码分析

OpenDDS的通讯体系中,提供了丰富的日志输出,通过日志输出可以清晰的看到pub和sub方的主题匹配的过程,是加深对OpenDDS过程了解的一个好方法。发送自己的participant信息:SpdpTransport::send_local。在主题中设置该策略,意味着对于所有发布订阅该主题的数据写者、数据读者都是有效的。发送subscription信息:write_subscription_data。文件中,每个字段的解析,都是在这个函数中完成的。###接收其他participant发来的信息。

2024-04-17 10:00:10 721

原创 linux reserve mem分析

linux cma dma

2024-04-17 09:55:32 1501

原创 linux内核挂载ramdisk的代码流程分析

linux ramdisk

2024-04-17 09:53:36 689

原创 arm-psci分析

arm psci

2024-04-17 09:51:38 547

原创 arm gic中断在linux内核软件中的处理

gic 中断处理

2024-04-17 09:47:28 1779

原创 /dev/mem和/dev/kmem的区别

/dev/mem和/dev/kmem的区别

2024-04-17 09:28:30 90

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除