Recent Posts

ARM Watch Point 寄存器

Watch Point (WP) 有 6 个寄存器:

  • Address Value / Mask Register
  • Data Value / Mask Register
  • Control Value / Mask Register

其中,WP Address Value / Mask 是监控地址总线,WP Data Value / Mask 是监控数据总线。

断点用来标 …

Linux Kernel pr_debug(), dev_dbg() 以及动态调试

pr_err(), pr_info(), ... / dev_err(), dev_info(), ... 系列函数,在 pr_fmt / dev_fmt 的基础上,调用 vprintk_emit() 实现打印输出。但 pr_debug() / dev_dbg() 比较特殊,有不一样的代码路径。

文件:include/linux/printk.h

/* If you are writing …

Linux kernel printk 占位符 %p 和 %px

1. %p

Linux 内核里的 printk 可以打印指针地址,这和 printf() 是一样的:

void *p = 0x1234;
printk("p = %p\n", p);

这里是想打印所指向的地址。实际运行起来后 …

Linux kernel printk 以及 pr_err, dev_err 等包装函数

pr_err() 等包装函数

在 Linux 内核里打印信息,除了使用 printk,还可以用 pr_err() 等包装函数,比如:

pr_err("page allocation failed\n");

这个调用相当于 printk(KERN_ERR "page allocation failed\n …

Linux kernel printk log level

1. Log level 的定义

在 Linux 内核里,printk 经常用来格式化输出,类似于常见的 printf。需要注意的是,printk 有一个 log level 的参数,使用的时候经常 …

RISC-V 链接问题:relocation truncated to fit: R_RISCV_PCREL_HI20

问题

在一个基于 RISC-V 架构的项目里,遇到了如下的链接问题:

xxx/file:xxx:(.text.startup+0x74): relocation truncated to fit: R_RISCV_PCREL_HI20 against symbol xxx ...
collect2: error: ld returned 1 exit status
make: *** [Makefile:xx: xxx.elf …

Python 命令行里显示十六进制

0x0 问题

Python 命令行经常被拿来当作计算器,进行数字或者逻辑运算。很多时候,特别是在编程时,往往需要以十六进制的方式 …

Boot With Small Pages on RISC-V

问题

在 RISC-V 上启动 Linux Kernel 时,内核本身占用的内存页面使用的是大页模式(其中,32 位 CPU 用的是 4MB 模式,64 位 CPU 用的是 2MB 模式,这 …

Linux 内核 KASAN 内存检查工具

开启了 kasan 功能以后,每次分配内存,会有额外的 shadow memory,大小为 1/8,用来标记内存分配的信息。每连续 8 个字节,如果都可以访 …

Ubuntu 无法更新 psutil 的问题

0x0 问题

编写 tmux-system-info 的时候,有依赖到高版本 psutil 里的接口功能。

因为发现 Ubuntu 系统里已经安装的 psutil 版本太低,所以准备升级一下:

sudo …