Skip to content

Commit 0427c01

Browse files
committed
utils: filter and filter-out
Signed-off-by: Luc Ma <[email protected]>
1 parent 0d62fde commit 0427c01

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

source/_posts/lnx/arch.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@ yay -S fcitx5-sogou
6565

6666
- 编译内核,生成内核 ELF 可执行文件 vmlinuz (压缩格式),安装内核模块
6767
- 生成初始内存文件系统 initramfs
68-
- 更新 grub.cfg
68+
- 更新引导加载程序 bootloader 的配置,即 `/boot/grub/grub.cfg`
6969

7070
总的来说,在 Arch Linux 上制作一个可启动的新内核,让系统能够用新内核正常工作,是相对比较简单的,这也是我放弃 openKylin,转向 Arch Linux 的主要原因,在 openKylin 上,光是找到目前正在运行的内核源码都费半天劲儿,包括内核源码库,整个发行版的软件包源码仓库,软件版本管理都有点混乱。
7171

72-
## vmlinuz
72+
## 内核可执行文件
7373

7474
```bash
7575
make
@@ -84,19 +84,21 @@ sudo make install
8484
sudo --preserve-env=HOME make install
8585
```
8686

87-
## initramfs
87+
## 制作初始内存文件系统
8888

8989
```bash
9090
sudo mkinitcpio --generate /boot/initramfs-6.16.1-arch1.img --kernel 6.16.1-arch1
9191
```
9292

93-
## grub.cfg
93+
## 更新 bootloader 配置
9494

9595
```bash
9696
sudo grub-mkconfig -o /boot/grub/grub.cfg
9797
```
9898

99-
如果修改了默认的 grub 配置 (`/etc/default/grub`),同样需要 `grub-mkconfig -o /boot/grub/grub.cfg`, 让新配置(如 kernel cmd parameters)生效。
99+
这一步在两种情况下需要执行:
100+
- 修改了 bootloader 程序的配置,如修改了 `/etc/default/grub`
101+
-`/boot` 目录新增了 `vmlinuz``initramfs.img`, 如果只是重新编译了内核,而安装的 vmlinuz 和 initramfs.img 还是**原来的名字**, 就无需执行这一步
100102

101103
# 截屏 Greeter
102104

source/_posts/utils/make.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,20 @@ $(info $(CURDIR))
9292
* 这两个内置函数被放在 GNU Make 官方文档 [8.3 Functions for File Names](https://www.gnu.org/software/make/manual/html_node/File-Name-Functions.html) 章节的头两个,可见它们的使用之多。这一章节的函数都是专门用来**拆分**文件路径的。
9393
* `$(dir names...)` 只取出后面文件路径(或文件路径列表)的目录部分, 相当于 shell 里的 `dirname`
9494
* `$(notdir names...)` 只取出后面文件路径(或文件路径列表)的文件名部分, 相当于 shell 里的 `basename`
95+
* 举个例子 Linux kernel `scripts/Kbuild.include``dot-target` 定义的例子:
96+
* `dot-target = $(dir $@).$(notdir $@)
97+
* 这个 dot-target 其实就是把 `foo/bar.o` 变成 `foo/.bar.o`
98+
99+
## filter, filter-out
100+
101+
- 原型
102+
```
103+
$(filter pattern...,text)
104+
$(filter-out pattern...,text)
105+
```
106+
* filter 函数返回 `text` 中所有**匹配** `pattern...` 的单词
107+
* `pattern...` 表示可以提供多个用**空白分隔**的 pattern
108+
* filter-out 是返回那些**不匹配**的,即它的结果与 filter 正好相反
95109

96110
## foreach
97111

0 commit comments

Comments
 (0)