gngshn的博客

专注, 平静

最近在学习 linux driver 时, 在 qemu 上使用 aarch64 架构来跑 Image, 在想使用单步跑看看 driver 的某些执行路径时, 发现给 driver 添加 O0 编译时会有很多错误.

比如在 Linux-6.10 中, 我们在如下修改状态下, 使用命令 make LLVM=1 ARCH=arm64 defconfig && make LLVM=1 ARCH=arm64 Image -j12 编译的时候

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index 2c7bf4da0..857020b8c 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -116,7 +116,7 @@ CONFIG_ACPI_APEI_MEMORY_FAILURE=y
CONFIG_ACPI_APEI_EINJ=y
CONFIG_VIRTUALIZATION=y
CONFIG_KVM=y
-CONFIG_JUMP_LABEL=y
+# CONFIG_JUMP_LABEL is not set
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_IOSCHED_BFQ=y
diff --git a/drivers/Makefile b/drivers/Makefile
index fe9ceb0d2..f60455123 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -193,3 +193,5 @@ obj-$(CONFIG_CDX_BUS) += cdx/
obj-$(CONFIG_DPLL) += dpll/

obj-$(CONFIG_S390) += s390/
+
+subdir-ccflags-y += -O0

会报出汗多的 error: invalid operand for inline asm constraint 'i' 错误. 下面我们就来探究下这个问题.

阅读全文 »

前言

这篇文章好些天前就想写了, 因为之前一直在追踪stable rust在no_std环境下使用alloc相关的github issue, 前段时间 #102318 这个issue正式合并了, 相关的改动将在rust 1.68中稳定.

阅读全文 »

概述

现在RISC-V在芯片厂已经开始有一定的部署了, 从MCU级别的微控制处理器到AP CPU级别SoC都有进行一些设计或量产. 从芯片开发成本来看, RISC-V是一个非常适合用来实现减少授权费和版税的in-house CPU的指令集. 因为RISC-V指令集目前已经形成的一定生态并且有越来越好的趋势, 对于实现RISC-V的CPU, 可以直接免费使用基于这个指令集的开源生态, 如GCC, LLVM等.

虽然目前RISC-V指令集在实现AP CPU时还有一些扩展指令集正在准备或刚刚准备好, 但是RISC-V linux确实已经可以正常跑起来了. 我们就来以RISC-V 32来分析下Linux的启动过程, 我们主要分析在start_kernel之前的流程, 我们使用的linux版本时linux-6.2-rc3, 配置采用的时linux mainline上面的rv32_defconfig.

阅读全文 »

这是我学习rust之后写的第一个程序,所以记录下,rust和c代码的使用方式还有有非常大的不同,我们不应该用for index的方式来写rust代码。反之使用map/reduce这类函数式的写法会更好一些。不论是性能还是可读性上都更好一些

这里的raw图是2byte一个像素,低12bit有效。raw图前面有128byte的header,我暂时先直接将它略过了,没去解析。由于只是临时写一个工具。所以没有对error进行很好的处理,一路unwrap()

Rust的零开销iter抽象还是相当好用的,另外强推下vscode + rust-analyzer作为开发环境,目前看起来是最棒的组合了

阅读全文 »

在这边文章中, 我将以一个程序员的视角来谈一下我对ARMv8-A中的memory model的理解. 涉及到domain, atomic, ordering等. 如有错误请指正.

我会首先贴出ARM的官方描述, 然后在后面简要的描述一下我自己的理解. 部分章节或内容细节省略掉了.

阅读全文 »

OpenCV自带的cvtColor色彩空间转换矩阵的转换矩阵好像不太好替换, 目前我没有找到合适的方法来搞定. 最后自己研究了一下, 利用numpy的矩阵运算可以和cvtColor一样快的把YCbCr图片转换成RGB图片.

这里使用了numpy的多维array的dot乘法. 在numpy的document中, 写明了多维array的计算方式:

阅读全文 »
0%