0%

每周更新 weekly update (21-23 / 52 )

2020年第21-23周

Linux Kernel & Driver Development

在最近的面试中,因为考官对我关于Linux Kernel和驱动开发(Driver Development)这部分的认识不太够之后,我就特地在周末在网上寻找资料、书籍准备补充一下。

内核工具

毫无疑问,想要去探索(书里原文是窥视)内核,我们需要掌握其中的一些工具,然后书中大概介绍了以下几种工具:

  • objdump/readelf: 分别用于显示目标文件和 ELF 文件的信息。
  • hexdump: 显示给定16进制/ASCII码/八进制格式的文件的内容。
  • nm: 列出指定目标文件中的符号,且能够显示符号的值、类型和名字
  • objcopy: 用于复制一个目标文件
  • ar: 维护链接程序使用的索引函数库
  • 内核信息输出:
    • printk()
    • dmesg
    • /var/log/messages

第一个Linux mod

main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#MODULE_LICENSE("GPL");

static int __init lkp_init(void) {
printk("Hello world! from the kernel space...\n");
return 0;
}

static void __exit lkp_cleanup(void) {
printk("Goodbye, world! leaving the kernel space...\n);
}

module_init(lkp_init);
module_exit(lkp_cleanup);

编译模块

用Makefile定义好目标文件,然后使用指令编译:

1
make -C /usr/src/linux-2.*.* SUBDIRS=$PWD modules

其中,-C 选项告诉 make 从后面的目录里面寻找源代码,然后再通过链接生成模块hellomod.ko

运行模块

  1. 注册模块

    1
    insmod hellomod.ko

  2. 查看注册信息和内核输出

1
2
3
lsmod | grep hello 

tail /var/log/messages

第一个指令我们能看到当前 mod 里面是否将我们的 hellomod 成功注册。 这时候应该会在 log 信息里看到我们在代码里 printk() 的输出结果

  1. 移除模块
    1
    rmmmod hellomod # 这里的 mod 名称与我们上面 lsmod 输出的结果相对应

New book review

在过去两周时间内,基本上就是一周一本书的节奏,日均阅读时间超过我原来的每周半小时,达到了1小时多。

One Man's View of the World

《李光耀观天下》这本书让我对这个世界格局的理解又进一步加深了许多。 从他本人任职新加坡总理的视角去观察,把各个国家之间的利害关系给梳理了一遍,

尽管出版时间是在2011年,其中许多预言和判断都十分准确,放在现在来看依旧成立,可见李光耀先生对于世界格局的判断是如此的犀利,也能从中看出来当初他了不起的能力,将新加坡从一个无人问津的小国,而经过50多年就成为世界发展史上的一个奇迹。

Fate of Moon Jae in

《命运:文在寅自传》则和前面一本书刻画了一个不同的人生,作为律师出身, 文在寅与前任总统卢武铉共同开设律师所,专为底层人士辩护, 为民请命。而后来竞选总统失利并没有让他放弃,而最终一举在2017年竞选韩国第19届总统时取得胜利,并在任内促进东北亚和平与合作做出了巨大贡献。 他这种甘愿为人民奉献的人民领袖气质,着实让我对他又多了几分敬佩。

而想到在这次疫情期间,他为了使得疫情得到控制,多次大胆采取激进措施,比如对于韩国内部的宗教聚会问题进行处理,以及大规模快速筛检,与反对派多次抗衡,冒着丢掉政治生涯的风险,雷厉风行,对疫情控制有着更加激进的措施。 但事后证明他的选择是正确的,不仅成功控制住了疫情,还使得韩国成功抗疫的案例让更多国家关注和学习,尤其是大规模快速检测技术,应该成为每个国家应对疫情的必要措施。 我对文在寅总统是深深的佩服!

Convex Optimization notes

这周接近期末考试了,所以大部分时间就花在去复习内容和做Project, 而这次课程的项目也十分简单,从若干个topics里面选其中一个,然后回答问题。

我选的题目是关于二次约束的二次规划, 也就是Quadratic constrained quadratic programming。(下一篇补充)

KKT conditions

Karush–Kuhn–Tucker conditions 是非线性规划问题里面的获得最优解的必要条件。

首先我们定义我们的优化问题:

\[ \text{minmize} \quad f_0 (x) \] subject to

\[ f_i(x) \leq 0, i=1,...,m \] \[ h_i(x) = 0, i=1,...,p \]

\(x \in R^n\) 是我们的优化变量,相应的,我们可以取其拉格朗日函数(Lagrangian function)

\[L(\textbf{x}, \boldsymbol{\lambda}, \textbf{v}) = f_0 (x) + \sum_{i=1}^m f_i(x)*\lambda_i + \sum_{i=1}^p h_i(x) * v_i\]

其中我们的KKT条件如下:

Stationarity: \[\nabla f_0(x) + \sum_{i=1}^m \lambda_i^* \nabla f_i(x^*) + \sum_{i=1}^p v_i^* \nabla h_i(x^*) = 0\]

Primal feasibility: \[f_i(x^*) \leq 0, for \; i=1,...,m\] \[h_i(x^*) = 0, for\; i=1,...,p \]

Dual feasibility: \[\lambda_i \geq 0, for \; i =1,...,m\]

Complementary slackness: \[\lambda_i f_i(x^*) = 0, for \; i=1,...,m\]

当然我们这些函数\(f_i(x)和 h_i(x)\)均可导

QCQP

(TO BE CONTINUED)