树莓派更换内核、串口连接
设备:树莓派 3b+、sdcard、读卡器、usb 转串口线
环境:Ubuntu 20.04.6 LTS
树莓派镜像
我选择最新的 arm64 镜像,可以从 https://downloads.raspberrypi.org/raspios_arm64/images/ 查找下载,写这篇文章时最新的是 https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2023-05-03/2023-05-03-raspios-bullseye-arm64.img.xz,下载之后得到 2023-05-03-raspios-bullseye-arm64.img.xz 文件:
qemu arm64 仿真
环境:ubuntu 20.04
准备工作
1 | $ sudo apt-get install qemu qemu-system-arm gcc-aarch64-linux-gnu gdb-multiarch |
编译内核
下载 Linux 源码:kernel 各版本下载
下载完内核之后,如放在 ~/linux-5.10
目录下:
1 | $ cd linux-5.10 |
Ubuntu 编译安装内核
本文是一个实操笔记,记录本地如何编译一个内核版本并安装到系统中使用。我使用的环境如下:
1 | $ cat /etc/issue |
以上表明我使用的是 Ubuntu 20.04.5,机器是 Intel 4 核 8 线程 CPU,每个频率都是 2.60GHz。我编译的版本是 Linux kernel 主线的版本,相当于从 github 上直接拉下来的代码,我下的代码最新的提交是 c1649ec55708ae42091a2f1bca1ab49ecd722d55。以下方法不保证比较老的内核也可以编译通过。
plist 源码解析
plist 是内核中一种带优先级的双向链表数据结构,链表中每个元素的优先级按数值大小升序排序。plist 作为 pi-futex 的一部分补丁引入内核,初始提交链接为:https://github.com/torvalds/linux/commit/77ba89c5cf28d5d98a3cae17f67a3e42b102cc25。本文基于 6.2-rc2 版本内核解析 plist 实现,阅读本文需要了解 kernel 中 list 数据结构的实现,因为 plist 是基于 list 实现的。
KBASE_IOCTL -- MEM_ALLOC_EX 解析
利用 page_owner 跟踪 page flags
在 kernel 的开发调试过程中,经常需要知道 page 的某个 page flag 在哪条路径被 Set、被 Clear 了。甚至是在项目死机问题 debug 上,由于 page 不知道在哪里不合时宜地被 mlock 了,被 lock 住了,单纯地看代码可能比较难看出设置 page flag 的路径在哪,除非是对代码很熟悉,甚至需要对同事的代码比较熟悉,知道哪位同事之前有某个需求用了一种“奇怪”的方式来实现,然后你可以灵光一闪想到这个死机问题没准和这个同事的修改有关。不过大部分情况我们是没有这个灵光一闪的,那就需要特别的 debug 手段了。page_owner 很适合这种场景。
2.6.11版本基数树源码解析
搭建 hexo 博客
环境:ubuntu 20.04
参考:https://hexo.io/zh-cn/docs/ https://theme-next.js.org/docs/getting-started/#Enabling-NexT
升级 nodejs
不然可能会遇到奇奇怪怪的问题
1 | sudo npm install n -g |
内存那些事儿(上)
文章翻译自 http://landley.net/writing/memory-faq.txt 。阅读这篇文章需要注意的一点是原文作者写这篇文章的内核版本比较老,应该是 2.x,因此某些细节和现在的 5.x 版本内核不一致。不过理论大体还是一致的。