0%

和 http、smtp 等协议一样,mqtt 也是一种应用层协议,也是基于 TCP 和 IP 协议进行网络通信的,主要应用在物联网领域。最近开发的项目使用到了 mqtt 协议,而且笔者打算在 Linux 下开发一个简陋的 mqtt 通信库,后续甚至可以写一个 mqtt 服务器,借此来复习下 Linux 中的应用层开发。这篇文章先来简单的介绍一下 mqtt 中的关键术语以及客户端-服务器的通信过程。

阅读全文 »

字符设备驱动是 Linux 驱动开发中最重要,也是最简单的设备驱动程序,学习字符设备驱动的编写是入门驱动开发的最简单方式。字符设备驱动并不是天马行空,肆意妄为的,恰恰相反,字符设备驱动程序的编写甚至有些地方非常套路化,这主要归功于内核开发者们的努力,让驱动开发只需要调用接口即可。这篇文章,主要关注字符设备驱动中的”套路”,形成一套字符设备驱动的万能框架。

阅读全文 »

在操作系统的组成方式上,一直有宏内核与微内核之间的争论,除了这两种方式,还有其他解决办法吗?Linux 给出了答案,那就是”使用模块“。模块允许内核在运行时动态地向其中插入或从中删除代码,无需重新编译整个内核并重新引导系统,可以方便地扩展内核的功能。在驱动开发中,设备驱动程序都是由一个个模块构成的,在我们开始编写驱动前,先看看内核模块是如何使用的吧。

阅读全文 »

目前打算写一下 Linux 驱动开发入门系列的博客,一方面是为了方便日后复习,另一方面也是希望能够捋顺一下自己的思路。这是此系列的第一篇文章,目的是简单概述一下驱动程序在 Linux 内核中扮演的角色。后续文章计划从字符设备驱动框架、设备树、pinctrl 和 GPIO 子系统、IO模型、内核锁机制、中断等几个主题梳理字符驱动程序的编写方法。

阅读全文 »

链接可以将多个目标文件合并为一个可执行文件,这使得分离编译成为了可能。通常一个项目由多个文件组成,这些文件可以分别编译为目标文件(Windows下为.obj,Unix下一般命名为.o文件),链接器通过符号识别和重定位等方法解决不同目标文件中的符号引用问题,最终生成可执行文件。链接分为静态链接和动态链接,本文将分别介绍其原理。

阅读全文 »

Vim 对于每个开发人员都不陌生,这可能是我们接触最多的 Linux 软件。所有类 Unix 的系统(Linux、Mac)都安装了 vim。当我们通过终端操作文本时,vim 或许是我们唯一的选择。

然而,vim 的使用方式和我们所熟悉的可视化编辑器完全不同,它的的快捷键是如此奇怪,不易上手。因此除非兴趣使然,我们很少会主动学习 vim。它的上限够高,下限也足够低,只需要掌握最基本的操作:↑↓←→i<ESC>:wq,就可以覆盖大部分使用场景。那为什么还需要再深入学习 vim 呢?

阅读全文 »