进程机器(PMC)
这是一个可以创建、管理子进程以及模块的程序。
pmc是一个什么项目?
这是一个可扩展的模块,可以在文件夹下建立单独的模块,pmc核心模块可以托管运行这些模块。
为什么要做一个这样的项目?
2024年的时候,我想做一个树莓派机器人,准备用python来写控制程序,可是当时python的多线程能力较弱,所以想到使用子系统,就自己写了一个进程托管程序
项目的文件结构是怎样的?
users用户可以在目录下创建子模块,extra下面还有一些额外的模块。
请留意模块的README文件
LCI 帧缓冲图形界面
LCI(Linux Chinese Interface)是基于 Linux 帧缓冲设备(/dev/fb0)的图形界面系统,无需 X11 或 Wayland,直接操作显存,专为树莓派等嵌入式环境设计。
图形架构
FrameBuf -- 帧缓冲设备封装,支持旋转(0~3)和字号设置
└─ PoolArea -- 容器区域,管理子区域树,支持 add() 嵌套和 flush() 刷新
├─ ShapeArea -- 形状区域,支持单个字符绘制
│ └─ CharShape -- 字符形状,指定宽高和位置,Draw() 绘制到 ShapeArea
└─ PoolArea -- 递归嵌套,形成布局树
布局体系
界面采用三层布局:
┌─────────────────────────────────────┐
│ topArea 标题栏 │ ← 绘制 "CPU" 红色大字
│ └─ ShapeArea: CharShape 'C','P','U' │
├─────────────────────────────────────┤
│ mainArea 主体区域 │ ← 绿色坐标轴 + 实时折线图
│ └─ tableArea │
│ 蓝色折线: 内存使用率 │
│ 红色折线: CPU 使用率 │
├─────────────────────────────────────┤
│ bottomArea 底部状态栏(预留) │
└─────────────────────────────────────┘
绘制原语
| 操作 | 用途 |
|---|---|
rectangle_fill(x, y, w, h, color) |
矩形填充(清屏/背景) |
line(x0, y0, x1, y1, color) |
画线(折线图、坐标轴) |
CharShape(w, h, x, y, ch).Draw(area, color) |
字符绘制 |
flush(area, bool) |
刷新区域到屏幕 |
实时数据可视化
每秒采集一次系统数据并绘制折线图:
- 通过
/proc/stat读取 CPU 使用率(红色折线) - 通过
sysinfo()读取内存使用率(蓝色折线) - 保留最近 40 个数据点,平滑滚动
构建
make lci
构建依赖 -ljpeg -lpng,需要帧缓冲设备和 I2C/摄像头等硬件支持。
运行
./lci --lci --rotate=0 --fontsize=18
| 参数 | 说明 | 默认值 |
|---|---|---|
--rotate |
屏幕旋转角度 (0~3) | 0 |
--fontsize |
字号大小 | 18 |
注意:
include/lci/和src/lci/目录下的图形核心文件(FrameBuf, Drawable, PoolArea, ShapeArea, CharShape, Color 等)当前处于开发中,尚未提交到仓库。
如何托管外部模块
编辑启动列表程序,常为init.txt
PMC的安装方式
# 1.安装依赖
sudo apt update
sudo apt install git g++ make
#sudo apt install python3 python3-pip python3-venv
#sudo dnf install python3-virtualenv
sudo apt install libboost-all-dev
#sudo apt install libssl-dev
#sudo apt install cimg-dev
#sudo apt install libcurl4-openssl-dev
#sudo apt install libcurl4-gnutls-dev
#sudo apt install libargs-dev
#sudo apt install libcpp-httplib-dev
2. 创建项目
git clone https://github.com/gopsc/pmc
cd pmc # 这是pmc模块
make pmc
#sudo make install
加密通信机制(废弃)
PMC在启动时生成一个AES密钥,然后用一个RSA公钥将其加密发送给访问者。
然后访问者与客户端之间的交流全部用此AES密钥加密
如何使用并发机器运行程序
首先应该在模块中创建一个启动脚本,脚本中应该完成工作目录的切换、虚拟环境的激活,以及程序的启动。
需要创建启动脚本(废弃)
# _run.sh
# 启动脚本 - 示例
# 需要执行权限
#!/bin/bash
# 切换工作目录
cd "$(dirname "$0")" || exit
# 准备工作(安装依赖)
#bash ./_set.sh
# 准备工作(比如激活虚拟环境)
#source ./.env/bin/activate
# 执行程序前一定要加exec 否则杀不死
exec python main.py