这是一个有点过时的题目,因为 spin_lock 已经演进到性能更好的 qsbinlock:
但是研究 ARM ticket spinlock 的实现可以学习 spin_lock 的进化,学习ARM atomic 操作和 ARM inline 汇编,所以记录下来方便自己以后查阅。
作为 low level 的嵌入式工程师,最近准备重学 C++,实际工作中接触 C 代码多一些,实际写 C++ 代码的机会不多,更多的时候是读 C++ 代码。虽然现在 Rust、Python、Go 语言等高级语言风生水起,但 C++ 作为经典的系统级编程语言,在性能、速度方面还是独树一帜,而且理解 C++ 编程思想,对学习新语言也是很有帮助的,比如 Rust 就借鉴和很多 C++ 的思想和语法。公司大部分 application 也是使用 C++ 编写, 熟悉 C++, 进而读懂、熟悉 application,对建立端到端的产品 view 大有裨益。学习掌握 C++ 这件事,就和学习掌握 Python一样, 必须做!
首先要搭建 C++ 的编译、调试环境。一直仅仅使用 code-server 编辑代码,没有使用其编译、调试代码的功能。本文记录了在 code-server 中搭建 C++ 开发环境的过程,实现编辑、编译、GDB 调试一条龙!
”工欲善其事, 必先利其器!“
前几天想更新下code-server的docker image,修改完成 github 内的 Dockerfile,去 docker hub 查看 image 的 build 情况,发现自动 build iamge 的功能收费了!毕竟天下没有永远免费的午餐,按照同事的说法,其也该收费了。利用其线下 build 功能:线下修改 Dockerfile,build,然后 push到 docker hub,本文记录了这一过程。
ubuntu 官方guide: How to install Ubuntu Server on your Raspberry Pi 非常详细,这里就不再赘述,照着操作即可。 RaspberryPi wiki 提供更多细节,例如启用serial console等,感兴趣可以参考。
For more details about Raspberry Pi specific packages included with this image and further customisations, such as accelerated video drivers and optional package repositories, you can refer to the RaspberryPi wiki .
ply 是 eBPF 的 front-end 前端工具之一,专为 embedded Linux systems 开发,采用 C 语言编写,只需 libc 和内核支持 BPF 就可以运行,不需要外部 kernel 模块,不需要 LLVM,不需要 python。
ply 由瑞典工程师 Tobias Waldekranz 开发,其项目主页是 PLY Light-weight Dynamic Tracer for Linux 。
使用非常灵活和轻量级,编辑一种类 C 语言的脚本,然后利用内核 eBPF 来收集和探测内核数据,比如打印出内核函数的调用栈,获取内核变量等,是学习内核,进行嵌入式 Linux 系统开发调试的利器!
本文记录 ply 的编译及使用过程,实验例程源码都已上传到 https://github.com/jgsun/buildroot。