先看一下图片对比效果

原图
图片描述

译文
图片描述

这个示意图没有什么特别的, 表现的就是tty的软硬件的关系
因为原文中有多个类似的图, 想找一个与原文尽量接近的方式进行表达. 一开始想用PlantUML来实现, 发现受UML的局限,画一个双向箭头都很麻烦. PlantUML底层用的dot语言, 所以直接用Graphviz的dot语言更方便.
简单地学习了一下, 效果不错, 特分享给大家.

我用的是mac, 安装graphviz

$ brew install graphviz

安装一个Atom或Sublime Text的插件, 我最后用的是Atom里的Graphviz preview+, 用起来很方便, 可以做到实时重绘, 不用了解命令行参数了.截图如下:

图片描述

最后放上上面插图的源码,供有兴趣的同学参考,回头我会把全部译文和源码放到github上.


digraph TTY{
edge [dir="both"]
rankdir="LR";

subgraph cluster  {
   //[ID="dd"];
     label="硬件"
     color="#e3e3d1"
     style=filled
     fillcolor="#e3e3d1"
     终端[shape=box3d];
     物理线路[shape=box3d];
     UART[shape=box3d];

    终端 -> 物理线路 ->UART: 万能异部收发器;
}

subgraph cluster软件 {
style=filled
color="#e3e3d1"

label="软件"
fillcolor="#e3e3d1"

UART->"UART\n驱动" ;

   subgraph cluster内核 {
     color="#000000"

     style="dashed"
     label="内核"
      "行\n规程" [comment="线路规程"];
    "UART\n驱动" -> "行\n规程";
        "行\n规程" -> "TTY\n驱动";
   }
     用户进程1 [label = "用户\n进程"]  ;
     用户进程2 [label = "用户\n进程"]  ;
     用户进程3 [label = "用户\n进程"]  ;
    "TTY\n驱动" -> 用户进程1  ;
    "TTY\n驱动" -> 用户进程2;
    "TTY\n驱动" -> 用户进程3;
}
}

Yujiaao
12.7k 声望4.7k 粉丝

[链接]


引用和评论

0 条评论