-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
316 lines (290 loc) · 38.1 KB
/
Copy pathindex.html
File metadata and controls
316 lines (290 loc) · 38.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0,viewport-fit=cover"><title>TroyMitchell's blog</title><meta name="author" content="TroyMitchell"><meta name="copyright" content="TroyMitchell"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="对弈平凡">
<meta property="og:type" content="website">
<meta property="og:title" content="TroyMitchell's blog">
<meta property="og:url" content="https://blog.troy-y.org/index.html">
<meta property="og:site_name" content="TroyMitchell's blog">
<meta property="og:description" content="对弈平凡">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://avatars.githubusercontent.com/u/133468432?v=4">
<meta property="article:author" content="TroyMitchell">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://avatars.githubusercontent.com/u/133468432?v=4"><script type="application/ld+json">{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "TroyMitchell's blog",
"url": "https://blog.troy-y.org/"
}</script><link rel="shortcut icon" href="https://avatars.githubusercontent.com/u/133468432?v=4"><link rel="canonical" href="https://blog.troy-y.org/index.html"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/css/index.css?v=5.4.3"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.7.2/css/all.min.css"><script>
(() => {
const saveToLocal = {
set: (key, value, ttl) => {
if (!ttl) return
const expiry = Date.now() + ttl * 86400000
localStorage.setItem(key, JSON.stringify({ value, expiry }))
},
get: key => {
const itemStr = localStorage.getItem(key)
if (!itemStr) return undefined
const { value, expiry } = JSON.parse(itemStr)
if (Date.now() > expiry) {
localStorage.removeItem(key)
return undefined
}
return value
}
}
window.btf = {
saveToLocal,
getScript: (url, attr = {}) => new Promise((resolve, reject) => {
const script = document.createElement('script')
script.src = url
script.async = true
Object.entries(attr).forEach(([key, val]) => script.setAttribute(key, val))
script.onload = script.onreadystatechange = () => {
if (!script.readyState || /loaded|complete/.test(script.readyState)) resolve()
}
script.onerror = reject
document.head.appendChild(script)
}),
getCSS: (url, id) => new Promise((resolve, reject) => {
const link = document.createElement('link')
link.rel = 'stylesheet'
link.href = url
if (id) link.id = id
link.onload = link.onreadystatechange = () => {
if (!link.readyState || /loaded|complete/.test(link.readyState)) resolve()
}
link.onerror = reject
document.head.appendChild(link)
}),
addGlobalFn: (key, fn, name = false, parent = window) => {
if (!false && key.startsWith('pjax')) return
const globalFn = parent.globalFn || {}
globalFn[key] = globalFn[key] || {}
globalFn[key][name || Object.keys(globalFn[key]).length] = fn
parent.globalFn = globalFn
}
}
const activateDarkMode = () => {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
}
}
const activateLightMode = () => {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
}
}
btf.activateDarkMode = activateDarkMode
btf.activateLightMode = activateLightMode
const theme = saveToLocal.get('theme')
const mediaQueryDark = window.matchMedia('(prefers-color-scheme: dark)')
const mediaQueryLight = window.matchMedia('(prefers-color-scheme: light)')
if (theme === undefined) {
if (mediaQueryLight.matches) activateLightMode()
else if (mediaQueryDark.matches) activateDarkMode()
else {
const hour = new Date().getHours()
const isNight = hour <= 6 || hour >= 18
isNight ? activateDarkMode() : activateLightMode()
}
mediaQueryDark.addEventListener('change', () => {
if (saveToLocal.get('theme') === undefined) {
e.matches ? activateDarkMode() : activateLightMode()
}
})
} else {
theme === 'light' ? activateLightMode() : activateDarkMode()
}
const asideStatus = saveToLocal.get('aside-status')
if (asideStatus !== undefined) {
document.documentElement.classList.toggle('hide-aside', asideStatus === 'hide')
}
const detectApple = () => {
if (/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)) {
document.documentElement.classList.add('apple')
}
}
detectApple()
})()
</script><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: {"path":"/search.xml","preload":false,"top_n_per_article":1,"unescape":false,"languages":{"hits_empty":"未找到符合您查询的内容:${query}","hits_stats":"共找到 ${hits} 篇文章"}},
translate: undefined,
highlight: {"plugin":"highlight.js","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false,"highlightFullpage":true,"highlightMacStyle":true},
copy: {
success: '复制成功',
error: '复制失败',
noSupport: '浏览器不支持'
},
relativeDate: {
homepage: false,
post: false
},
runtime: '',
dateSuffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
copyright: undefined,
lightbox: 'null',
Snackbar: undefined,
infinitegrid: {
js: 'https://cdn.jsdelivr.net/npm/@egjs/infinitegrid@4.12.0/dist/infinitegrid.min.js',
buttonText: '加载更多'
},
isPhotoFigcaption: false,
islazyloadPlugin: false,
isAnchor: false,
percent: {
toc: true,
rightside: false,
},
autoDarkmode: true
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: 'TroyMitchell\'s blog',
isHighlightShrink: false,
isToc: false,
pageType: 'home'
}</script><meta name="generator" content="Hexo 7.3.0"></head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img text-center"><img src="https://avatars.githubusercontent.com/u/133468432?v=4" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="site-data text-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">66</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">27</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">12</div></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 主页</span></a></div><div class="menus_item"><span class="site-page group"><i class="fa-fw fa fa-graduation-cap"></i><span> 博文</span><i class="fas fa-chevron-down"></i></span><ul class="menus_item_child"><li><a class="site-page child" href="/categories/"><i class="fa-fw fa fa-archive"></i><span> 分类</span></a></li><li><a class="site-page child" href="/tags/"><i class="fa-fw fa fa-tags"></i><span> 标签</span></a></li><li><a class="site-page child" href="/archives/"><i class="fa-fw fa fa-folder-open"></i><span> 归档</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> 关于笔者</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header" style="background-image: url(/img/top_img.jpg);"><nav id="nav"><span id="blog-info"><a class="nav-site-title" href="/"><span class="site-name">TroyMitchell's blog</span></a></span><div id="menus"><div id="search-button"><span class="site-page social-icon search"><i class="fas fa-search fa-fw"></i><span> 搜索</span></span></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 主页</span></a></div><div class="menus_item"><span class="site-page group"><i class="fa-fw fa fa-graduation-cap"></i><span> 博文</span><i class="fas fa-chevron-down"></i></span><ul class="menus_item_child"><li><a class="site-page child" href="/categories/"><i class="fa-fw fa fa-archive"></i><span> 分类</span></a></li><li><a class="site-page child" href="/tags/"><i class="fa-fw fa fa-tags"></i><span> 标签</span></a></li><li><a class="site-page child" href="/archives/"><i class="fa-fw fa fa-folder-open"></i><span> 归档</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> 关于笔者</span></a></div></div><div id="toggle-menu"><span class="site-page"><i class="fas fa-bars fa-fw"></i></span></div></div></nav><div id="site-info"><h1 id="site-title">TroyMitchell's blog</h1><div id="site-subtitle"><span id="subtitle"></span></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts nc" id="recent-posts"><div class="recent-post-items"><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2026/04/20/%E5%9C%A8RISC-V%E4%B8%8A%E5%AE%89%E8%A3%85%E5%B9%B6%E4%BD%BF%E7%94%A8LazyVim/" title="在RISC-V上安装并使用LazyVim">在RISC-V上安装并使用LazyVim</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2026-04-20T09:09:46.000Z" title="发表于 2026-04-20 17:09:46">2026-04-20</time></span></div><div class="content">背景LazyVim 是基于 lazy.nvim 的 Neovim 预配置发行版,提供了开箱即用的现代编辑器体验。然而,lazy.nvim 强制要求 Neovim 必须使用 LuaJIT 构建,而官方 LuaJIT 并不支持 RISC-V 架构。 本文记录了在 RISC-V Linux 环境(Ubuntu/Debian)上,从零开始编译安装 Neovim + LazyVim 的完整流程,包括所有踩坑和解决方案。 测试环境: 架构:riscv64gc 系统:Ubuntu (bianbu/resolute) 板卡:K3 开发板 1. 编译安装 RISC-V LuaJIT官方 LuaJIT 不支持 RISC-V,但社区有一个活跃的移植分支:IgnotaYun/LuaJIT(riscv 分支)。该项目持续维护,CI 全绿,可用于生产。 1.1 安装编译依赖sudo apt install -y \ build-essential \ git 1.2 编译 LuaJITgit clone -b riscv https://github.com/Ign...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/09/16/openmpi-0-openmpi-img-parse/" title="openmpi[0]-openmpi-img-parse">openmpi[0]-openmpi-img-parse</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2025-09-16T09:25:23.000Z" title="发表于 2025-09-16 17:25:23">2025-09-16</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/openmpi/">openmpi</a></span></div><div class="content"> openmpi[0]-openmpi-img-parseopenmpi[1] 什么是openmpiopenmpi[2] 模块化组件架构openmpi[3] btl框架的self组件分析 总览Open MPI(Open 对称多处理器接口)是一个开源、高性能的 MPI(消息传递接口)实现。 核心概念解释: MPI (Message Passing Interface):MPI 不是一个编程语言,而是一个标准或规范。它定义了一套用于并行计算的函数库,允许不同的进程(通常运行在不同的处理器或计算节点上)通过显式地发送和接收消息来相互通信和协作。你可以把它想象成一套并行程序之间进行交流的“语言规则”。 并行计算:指将一个大的计算任务分解成许多小任务,这些小任务可以同时(并行地)在多个处理器上执行,以缩短完成整个任务所需的时间。 实现 (Implementation):MPI 本身只是一个标准,具体的编程库需要由不同的组织或公司去“实现”。Open MPI 就是众多 MPI 实现中的一个,其他著名的实现包括 MPICH、Intel MPI 等。 简而言之,Open MPI ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/09/08/openmpi-3-btl-mca-self/" title="openmpi[3] btl框架的self组件分析">openmpi[3] btl框架的self组件分析</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2025-09-08T09:44:55.000Z" title="发表于 2025-09-08 17:44:55">2025-09-08</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/openmpi/">openmpi</a></span></div><div class="content">openmpi[0]-openmpi-img-parseopenmpi[1] 什么是openmpiopenmpi[2] 模块化组件架构openmpi[3] btl框架的self组件分析 在openmpi[2]中,已经分析了openmpi的模块化架构。对于本章节来说,上一章提到的framework对应的是btl;component对应的就是self; mca的意思就是mca模块🤣 self组件的分层在opal/mca/btl/self目录中,可以看到如下文件: ❯ tree.├── btl_self.c├── btl_self_component.c├── btl_self_component.lo├── btl_self_frag.c├── btl_self_frag.h├── btl_self_frag.lo├── btl_self.h├── btl_self.lo├── libmca_btl_self.la├── Makefile├── Makefile.am├── Makefile.in└── owner.txt 除去不需要关心的编译相关...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/09/08/openmpi-2-modular-component-architecture/" title="openmpi[2] 模块化组件架构">openmpi[2] 模块化组件架构</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2025-09-08T07:49:21.000Z" title="发表于 2025-09-08 15:49:21">2025-09-08</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/openmpi/">openmpi</a></span></div><div class="content">openmpi[0]-openmpi-img-parseopenmpi[1] 什么是openmpiopenmpi[2] 模块化组件架构openmpi[3] btl框架的self组件分析 Open MPI 是一个高度可定制的系统;它可以通过配置文件、命令行参数和环境变量进行配置。Open MPI 配置系统的主要功能是通过模块化组件架构 (MCA) 实现的。 一些术语模块化组件架构 (MCA) 是 Open MPI 大部分功能的支柱。它由一系列项目 、 框架 、 组件和模块在运行时组装以创建 MPI 实现。 MCA 参数 (也称为 MCA 变量 )用于定制 Open MPI 在运行时的行为。 ProjectProject本质上是 Open MPI 代码库中最高抽象层的划分。 但这里的Project可不是说的项目,而是指的Open MPI 代码库中主要的、顶层的代码部分 FrameworkMCA 框架在运行时管理零个或多个组件,并针对特定任务(例如,提供 MPI 集合操作功能)。虽然每个 MCA 框架仅支持一种类型的组件,但它可以支持多个该类型的组件。 比如btl framework...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/09/08/openmpi-1-what-is-openmpi/" title="openmpi[1] 什么是openmpi">openmpi[1] 什么是openmpi</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2025-09-08T01:57:36.000Z" title="发表于 2025-09-08 09:57:36">2025-09-08</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/openmpi/">openmpi</a></span></div><div class="content">openmpi[0]-openmpi-img-parseopenmpi[1] 什么是openmpiopenmpi[2] 模块化组件架构openmpi[3] btl框架的self组件分析 什么是openmpi?MPI是一套通信标准,由MPI Forum创建并维护(MPI Forum是一个开放组织,由工业、学术界的高性能计算领域的专家组成).MPI是这样一种API: 可移植 高性能的IPC通信 MPI一般作为一个消息传递的中间件,上层应用程序可以通过调用MPI接口来执行消息传递。MPI定义了一系列与平台无关的、高度抽象的API接口,用于进程之间的消息传递(这两个进程之间可以在不同主机,但主机之间需要有一个通信的通道, 比如eth)举一个最简单的例子,进程X是发送进程,只需提供消息内容(例如一个双精度数组)以及另一个接收进程的标识(例如进程Y),同时接收进程Y只需提供发送进程的标识(例如进程X),消息就可以从X传递给Y。注意这个例子中,没有建立连接、没有字节流的转换、没有网络地址的交换,MPI将这些细节都抽象封装了起来,不仅仅是隐藏了复杂性,而且使应用程序能够兼容不同的平台、硬件...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/08/01/sd%E4%B8%8Emmc%E5%88%B7%E5%86%99%E6%8C%87%E5%8D%97/" title="sd与mmc刷写指南">sd与mmc刷写指南</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2025-08-01T07:25:00.169Z" title="发表于 2025-08-01 15:25:00">2025-08-01</time></span></div><div class="content">EnvHost: Ubuntu 22.04 GParted 1.3.1 SD卡首先插入sd卡,打开GParted工具,没有可以下载一个: ❯ sudo apt install gpart 选择sd卡设备,我这里是sdb,因机器而异。 选择菜单栏的设备->创建分区表,选择msdos分区表。 创建完成之后,新建两个分区。 一个fat16的,用于放内核镜像和dtb文件以及uboot保存的env文件。 一个ext4用来存放根文件系统。 完成之后点击绿色小对勾,让更改生效。 之后便可以在/dev下看到对应的分区: ❯ ls /dev/sdb*/dev/sdb /dev/sdb1 /dev/sdb2 下载uboot镜像: ❯ sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8 存放内核镜像和设备树: ❯ sudo mount /dev/sdb1 /mnt❯ sudo cp arch/arm/boot/zImage /mnt❯ sudo cp arch/arm/boot/dts/allwinne...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/08/01/VirtualBox%E9%94%99%E8%AF%AF-1/" title="VirtualBox错误">VirtualBox错误</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2025-08-01T07:25:00.168Z" title="发表于 2025-08-01 15:25:00">2025-08-01</time></span></div><div class="content">当我尝试启动虚拟机时遇到了如下错误: Kernel driver not installed (rc=-1908)The VirtualBox Linux kernel driver is either not loaded or not set up correctly. Please try setting it up again by executing'/sbin/vboxconfig'as root.If your system has EFI Secure Boot enabled you may also need to sign the kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) before you can load them. Please see your Linux system's documentation for more information.where: suplibOsInit what: 3 VERR_VM_DRIVER_NOT_INSTA...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/08/01/esp32/" title="esp32初始化结构体问题">esp32初始化结构体问题</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2025-08-01T07:25:00.168Z" title="发表于 2025-08-01 15:25:00">2025-08-01</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/mcu/">mcu</a><i class="fas fa-angle-right article-meta-link"></i><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/mcu/esp32/">esp32</a></span></div><div class="content">在c++使用espidf进行wifi连接时,发现如下代码可以连接: wifi_config_t wifi_config = { .sta = { .ssid = "HBDT-23F", .password = "hbishbis" }}; 但如下代码不可连接: wifi_config_t wifi_config;strcpy(wifi_config.sta.ssid, "HBDT-23F");strcpy(wifi_config.sta.password, "hbishbis"); 经过排查发现espidf对于连接阶段除了ssid和password还使用到了其他变量,所以应该清零结构体内存: wifi_config_t wifi_config{}; 一个很低级的问题…记录下来时刻警醒。 </div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/07/06/IMPORTANT-lost-blog-notes/" title="IMPORTANT: lost blog notes">IMPORTANT: lost blog notes</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2025-07-05T23:16:14.000Z" title="发表于 2025-07-06 07:16:14">2025-07-06</time></span></div><div class="content">What happened to my blog?Due to unforeseen circumstances, some of the blog posts have been lost. I have only found the web page format, but the index for the homepage has been lost. So there is the list: 2025 yearAprilDay 10 Vercel 部署 Twikoo 后评论收不到通知邮件问题解决方法 Day 12 Linux 的 initcall 机制 Day 13 ELF 文件 -0- section 和 segment 的区别 Linux I2C 驱动框架分析 -0 Linux I2C 驱动框架分析 -1 Day 20 Platform Device Driver -0 Platform Device Driver -1 Day 24 嵌入式 Linux 面经 - 随意随缘不完整版 Day 26 Linux 设备树 -0- 理解 dtb 格式 Linux...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/07/04/hexo-Deploy-github-and-lose-CNAME/" title="hexo: Deploy github and lose CNAME">hexo: Deploy github and lose CNAME</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2025-07-04T14:59:59.000Z" title="发表于 2025-07-04 22:59:59">2025-07-04</time></span></div><div class="content">IssueI deployed my hexo blog to github pages, but I lost the custom domain in github pages. I tried to re-add the custom domain in the repository settings and I found this operation will add CNAME file under the repository root directory. SolutionSo I copy this file(or create a new one and only put custom domain into this file) to the source directory of my hexo blog, and then commit and push it to the repository. Everything works fine! </div></div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span><a class="page-number" href="/page/2/#content-inner">2</a><span class="space">…</span><a class="page-number" href="/page/7/#content-inner">7</a><a class="extend next" rel="next" href="/page/2/#content-inner"><i class="fas fa-chevron-right fa-fw"></i></a></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info text-center"><div class="avatar-img"><img src="https://avatars.githubusercontent.com/u/133468432?v=4" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info-name">TroyMitchell</div><div class="author-info-description">对弈平凡</div><div class="site-data"><a href="/archives/"><div class="headline">文章</div><div class="length-num">66</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">27</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">12</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/TroyMitchell911"><i class="fab fa-github"></i><span>Follow Me</span></a></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>公告</span></div><div class="announcement_content">Words are cheap, I do.</div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2026/04/20/%E5%9C%A8RISC-V%E4%B8%8A%E5%AE%89%E8%A3%85%E5%B9%B6%E4%BD%BF%E7%94%A8LazyVim/" title="在RISC-V上安装并使用LazyVim">在RISC-V上安装并使用LazyVim</a><time datetime="2026-04-20T09:09:46.000Z" title="发表于 2026-04-20 17:09:46">2026-04-20</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/09/16/openmpi-0-openmpi-img-parse/" title="openmpi[0]-openmpi-img-parse">openmpi[0]-openmpi-img-parse</a><time datetime="2025-09-16T09:25:23.000Z" title="发表于 2025-09-16 17:25:23">2025-09-16</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/09/08/openmpi-3-btl-mca-self/" title="openmpi[3] btl框架的self组件分析">openmpi[3] btl框架的self组件分析</a><time datetime="2025-09-08T09:44:55.000Z" title="发表于 2025-09-08 17:44:55">2025-09-08</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/09/08/openmpi-2-modular-component-architecture/" title="openmpi[2] 模块化组件架构">openmpi[2] 模块化组件架构</a><time datetime="2025-09-08T07:49:21.000Z" title="发表于 2025-09-08 15:49:21">2025-09-08</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/09/08/openmpi-1-what-is-openmpi/" title="openmpi[1] 什么是openmpi">openmpi[1] 什么是openmpi</a><time datetime="2025-09-08T01:57:36.000Z" title="发表于 2025-09-08 09:57:36">2025-09-08</time></div></div></div></div><div class="card-widget card-categories"><div class="item-headline">
<i class="fas fa-folder-open"></i>
<span>分类</span>
<a class="card-more-btn" href="/categories/" title="查看更多">
<i class="fas fa-angle-right"></i></a>
</div>
<ul class="card-category-list" id="aside-cat-list">
<li class="card-category-list-item "><a class="card-category-list-link" href="/categories/asm/"><span class="card-category-list-name">asm</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/home-assistant/"><span class="card-category-list-name">home-assistant</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/kernel/"><span class="card-category-list-name">kernel</span><span class="card-category-list-count">20</span></a><ul class="card-category-list child"><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/kernel/network/"><span class="card-category-list-name">network</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/kernel/reverse/"><span class="card-category-list-name">reverse</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/kernel/rockchip/"><span class="card-category-list-name">rockchip</span><span class="card-category-list-count">13</span></a></li></ul></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/mcu/"><span class="card-category-list-name">mcu</span><span class="card-category-list-count">3</span></a><ul class="card-category-list child"><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/mcu/esp32/"><span class="card-category-list-name">esp32</span><span class="card-category-list-count">3</span></a></li></ul></li>
</ul></div><div class="card-widget card-tags"><div class="item-headline"><i class="fas fa-tags"></i><span>标签</span></div><div class="card-tag-cloud"><a href="/tags/docker/" style="font-size: 1.14em; color: #999b9d">docker</a> <a href="/tags/tmux/" style="font-size: 1.1em; color: #999">tmux</a> <a href="/tags/Neovim/" style="font-size: 1.1em; color: #999">Neovim</a> <a href="/tags/RISC-V/" style="font-size: 1.1em; color: #999">RISC-V</a> <a href="/tags/vim/" style="font-size: 1.28em; color: #99a0aa">vim</a> <a href="/tags/allwinner/" style="font-size: 1.1em; color: #999">allwinner</a> <a href="/tags/kernel/" style="font-size: 1.46em; color: #99a7bb">kernel</a> <a href="/tags/rockchip/" style="font-size: 1.37em; color: #99a4b2">rockchip</a> <a href="/tags/home-assistant/" style="font-size: 1.19em; color: #999da1">home-assistant</a> <a href="/tags/LazyVim/" style="font-size: 1.1em; color: #999">LazyVim</a> <a href="/tags/nvim/" style="font-size: 1.1em; color: #999">nvim</a> <a href="/tags/github/" style="font-size: 1.1em; color: #999">github</a> <a href="/tags/hack/" style="font-size: 1.1em; color: #999">hack</a> <a href="/tags/openHarmony/" style="font-size: 1.32em; color: #99a2ae">openHarmony</a> <a href="/tags/network/" style="font-size: 1.1em; color: #999">network</a> <a href="/tags/linux/" style="font-size: 1.5em; color: #99a9bf">linux</a> <a href="/tags/rk3566/" style="font-size: 1.1em; color: #999">rk3566</a> <a href="/tags/rk3568/" style="font-size: 1.41em; color: #99a5b7">rk3568</a> <a href="/tags/a33/" style="font-size: 1.1em; color: #999">a33</a> <a href="/tags/serial/" style="font-size: 1.1em; color: #999">serial</a> <a href="/tags/esp32/" style="font-size: 1.19em; color: #999da1">esp32</a> <a href="/tags/ubuntu/" style="font-size: 1.46em; color: #99a7bb">ubuntu</a> <a href="/tags/LuaJIT/" style="font-size: 1.1em; color: #999">LuaJIT</a> <a href="/tags/openmpi/" style="font-size: 1.23em; color: #999ea6">openmpi</a> <a href="/tags/mcu/" style="font-size: 1.19em; color: #999da1">mcu</a> <a href="/tags/uboot/" style="font-size: 1.1em; color: #999">uboot</a> <a href="/tags/hexo/" style="font-size: 1.14em; color: #999b9d">hexo</a></div></div><div class="card-widget card-archives">
<div class="item-headline">
<i class="fas fa-archive"></i>
<span>归档</span>
<a class="card-more-btn" href="/archives/"
title="查看更多">
<i class="fas fa-angle-right"></i>
</a>
</div>
<ul class="card-archive-list">
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2026/04/">
<span class="card-archive-list-date">
四月 2026
</span>
<span class="card-archive-list-count">1</span>
</a>
</li>
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2025/09/">
<span class="card-archive-list-date">
九月 2025
</span>
<span class="card-archive-list-count">4</span>
</a>
</li>
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2025/08/">
<span class="card-archive-list-date">
八月 2025
</span>
<span class="card-archive-list-count">3</span>
</a>
</li>
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2025/07/">
<span class="card-archive-list-date">
七月 2025
</span>
<span class="card-archive-list-count">3</span>
</a>
</li>
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2025/01/">
<span class="card-archive-list-date">
一月 2025
</span>
<span class="card-archive-list-count">1</span>
</a>
</li>
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2024/11/">
<span class="card-archive-list-date">
十一月 2024
</span>
<span class="card-archive-list-count">6</span>
</a>
</li>
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2024/10/">
<span class="card-archive-list-date">
十月 2024
</span>
<span class="card-archive-list-count">5</span>
</a>
</li>
<li class="card-archive-list-item">
<a class="card-archive-list-link" href="/archives/2024/09/">
<span class="card-archive-list-date">
九月 2024
</span>
<span class="card-archive-list-count">10</span>
</a>
</li>
</ul>
</div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>网站信息</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">文章数目 :</div><div class="item-count">66</div></div><div class="webinfo-item"><div class="item-name">本站访客数 :</div><div class="item-count" id="busuanzi_value_site_uv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">本站总浏览量 :</div><div class="item-count" id="busuanzi_value_site_pv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastPushDate="2026-04-20T09:48:04.654Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div></div></div></div></div></main><footer id="footer"><div class="footer-other"><div class="footer-copyright"><span class="copyright">© 2020 - 2026 By TroyMitchell</span></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="darkmode" type="button" title="日间和夜间模式切换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside-config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="回到顶部"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js?v=5.4.3"></script><script src="/js/main.js?v=5.4.3"></script><div class="js-pjax"><script>window.typedJSFn = {
init: str => {
window.typed = new Typed('#subtitle', Object.assign({
strings: str,
startDelay: 300,
typeSpeed: 150,
loop: true,
backSpeed: 50,
}, null))
},
run: subtitleType => {
if (true) {
if (typeof Typed === 'function') {
subtitleType()
} else {
btf.getScript('https://cdn.jsdelivr.net/npm/typed.js@2.1.0/dist/typed.umd.min.js').then(subtitleType)
}
} else {
subtitleType()
}
},
processSubtitle: (content, extraContents = []) => {
if (true) {
const sub = ["BTW, BE HAPPY."].slice()
if (extraContents.length > 0) {
sub.unshift(...extraContents)
}
if (typeof content === 'string') {
sub.unshift(content)
} else if (Array.isArray(content)) {
sub.unshift(...content)
}
sub.length > 0 && typedJSFn.init(sub)
} else {
document.getElementById('subtitle').textContent = typeof content === 'string' ? content :
(Array.isArray(content) && content.length > 0 ? content[0] : '')
}
}
}
btf.addGlobalFn('pjaxSendOnce', () => { typed.destroy() }, 'typedDestroy')
</script><script>function subtitleType () {
fetch('https://v1.hitokoto.cn')
.then(response => response.json())
.then(data => {
const from = '出自 ' + data.from
typedJSFn.processSubtitle(data.hitokoto, [from])
})
.catch(err => {
console.error('Failed to get the Hitokoto API:', err)
typedJSFn.processSubtitle(["BTW, BE HAPPY."])
})
}
typedJSFn.run(subtitleType)
</script></div><script id="canvas_nest" defer="defer" color="0,0,255" opacity="0.7" zIndex="-1" count="99" mobile="false" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1.1.4/dist/canvas-nest.min.js"></script><script id="click-heart" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1.1.4/dist/click-heart.min.js" async="async" mobile="true"></script><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script><div id="local-search"><div class="search-dialog"><nav class="search-nav"><span class="search-dialog-title">搜索</span><span id="loading-status"></span><button class="search-close-button"><i class="fas fa-times"></i></button></nav><div class="text-center" id="loading-database"><i class="fas fa-spinner fa-pulse"></i><span> 数据加载中</span></div><div class="search-wrap"><div id="local-search-input"><div class="local-search-box"><input class="local-search-box--input" placeholder="搜索文章" type="text"/></div></div><hr/><div id="local-search-results"></div><div id="local-search-stats-wrap"></div></div></div><div id="search-mask"></div><script src="/js/search/local-search.js?v=5.4.3"></script></div></div></body></html>