Linux_Kernel_map4vehicle/Linux_kernel_diagram.dot

640 lines
12 KiB
Plaintext
Raw Normal View History

2021-12-23 13:50:27 +08:00
digraph "Linux_kernel_diagram" {
graph [
newrank = true,
nodesep = 0.3,
ranksep = 0.2,
overlap = true,
splines = false,
]
node [
fixedsize = false,
fontname = Ubuntu
fontsize = 24,
height = 1,
shape = box,
style = "filled,setlinewidth(5)",
width = 2.2
]
edge [
arrowhead = none,
arrowsize = 0.5,
labelfontname = "Ubuntu",
weight = 10,
style = "filled,setlinewidth(5)"
]
2021-12-21 22:32:54 +08:00
subgraph system {
2021-12-23 13:50:27 +08:00
node [color = "#e27dd6ff"]
edge [color = "#e27dd6ff"]
system_ [
fixedsize = true,
height = 0,
shape = point,
style = invis,
shape = point
]
system [
URL = "https://en.wikibooks.org/wiki/The_Linux_Kernel/System",
fillcolor = white,
fixedsize = true,
height = 0.6,
row = func,
width = 2]
system -> system_ [
arrowhead = "",
row = func]
SCI [
URL = "https://en.wikibooks.org/wiki/The_Linux_Kernel/Syscalls",
fillcolor = "#d9e7ee",
fixedsize = true,
label = "System calls",
row = usr,
shape = ellipse]
sysfs [
fillcolor = "#b2d3e4",
label = "proc & sysfs\nfile systems"]
SCI -> sysfs
DM [
fillcolor = "#91b5c9",
fixedsize = true,
fontsize = 20,
height = 0.8,
label = "Device\nModel",
shape = octagon,
width = 2]
sysfs -> DM
log_sys [
fillcolor = "#6a9ab1",
fontsize = 20,
label = "system run,\nmodules,\ngeneric\nHW access "]
DM -> log_sys
bus_drv [
fillcolor = "#71809b",
label = "bus drivers"]
log_sys -> bus_drv
buses [
fillcolor = "#777777",
fontcolor = white,
fontsize = 20,
label = "buses:\nPCI, USB ...",
row = chip]
bus_drv -> buses
2019-11-22 00:31:50 +08:00
}
2021-12-21 22:32:54 +08:00
subgraph networking {
2021-12-23 13:50:27 +08:00
node [ color = "#61c2c5"]
edge [ color = "#61c2c5"]
networking_ [
fixedsize = true,
height = 0,
shape = point,
style = invis,
shape = point
width = 0]
networking [
URL = "https://en.wikibooks.org/wiki/The_Linux_Kernel/Networking",
fillcolor = white,
fixedsize = true,
height = 0.6,
row = func,
width = 2]
networking -> networking_ [
arrowhead = "",
row = func]
sock [
fillcolor = "#d9e7ee",
fixedsize = true,
label = Sockets,
row = usr,
shape = ellipse]
prot_fam [
fillcolor = "#b2d3e4",
label = "protocol\nfamilies"]
sock -> prot_fam
log_prot [
fillcolor = "#6a9ab1",
label = "protocols:\nTCP, UDP, IP"]
prot_fam -> log_prot
netif [
fillcolor = "#71809b",
fontsize = 20,
label = "network\ninterfaces\nand drivers"]
log_prot -> netif
net_hw [
fillcolor = "#777777",
fontcolor = white,
fontsize = 20,
label = "network:\nEthernet, WiFi ...",
row = chip]
netif -> net_hw
NFS [
color = "#8383cc",
fillcolor = "#91b5c9",
fixedsize = true,
height = 0.8,
label = NFS,
shape = octagon,
width = 1.2]
NFS -> log_prot [ weight = 0]
2019-11-22 00:31:50 +08:00
}
2021-12-23 13:50:27 +08:00
subgraph processing {
node [ color = "#c46747"]
edge [ color = "#c46747"]
processing_ [
fixedsize = true,
height = 0,
shape = point
style = invis,
width = 0]
processing [
URL = "https://en.wikibooks.org/wiki/The_Linux_Kernel/Processing",
fillcolor = white,
fixedsize = true,
height = 0.6,
row = func,
width = 2]
processing -> processing_ [
arrowhead = "",
row = func]
proc [
fillcolor = "#d9e7ee",
fixedsize = true,
label = Processes,
row = usr,
shape = ellipse]
Tasks [
fillcolor = "#b2d3e4"]
proc -> Tasks
sync [
fillcolor = "#91b5c9",
fixedsize = true,
fontsize = 20,
fontname = "Ubuntu Condensed"
label = synchronization,
height = 0.7,
//width = 2,
shape = octagon]
Tasks -> sync
sched [
fillcolor = "#6a9ab1",
label = Scheduler]
sync -> sched
IRQ [
fillcolor = "#71809b",
fontsize = 20,
label = "interrupts\ncore,\nCPU arch"]
sched -> IRQ
CPU [
fillcolor = "#777777",
fontcolor = white,
fontsize = 20,
row = chip]
IRQ -> CPU
} // processing
subgraph mem {
node [
color = "#51bf5b",
height = 0.5
]
edge [ color = "#51bf5b"]
MA [
color = "#51bf5b",
fillcolor = "#d9e7ee",
fixedsize = true,
label = "memory\naccess",
row = usr,
height = 1,
shape = ellipse]
MA -> VM
mmap [
fillcolor = "#91b5c9",
fixedsize = true,
fontsize = 20,
height = 0.8,
label = "memory\nmapping",
shape = octagon,
width = 2]
mmap -> log_mem
log_mem -> PA
//VFS -> SW [ style = invis]
SW [
color = "#8383cc",
fillcolor = "#91b5c9",
fixedsize = true,
label = Swap,
height = 0.8,
shape = octagon,
width = 1.2]
mmap -> SW [ weight = 1]
SW -> block [
color = "#8383cc", weight = 1]
PA [
fillcolor = "#71809b",
label = "Page\nAllocator"
]
PC -> PA [weight = 0 color="#51bf5b"]
RAM [
color = "#51bf5b",
fillcolor = "#777777",
fontcolor = white,
fontsize = 20,
label = "MMU, RAM",
height = 1,
row = chip]
PA -> RAM
memory -> memory_ [
arrowhead = "",
row = func]
VM -> mmap
} // mem
2021-12-21 22:32:54 +08:00
subgraph storage {
2021-12-23 13:50:27 +08:00
node [ color = "#8383cc"]
edge [ color = "#8383cc"]
NFS;
2021-12-23 13:50:27 +08:00
storage_ [
shape = point,
fixedsize = true,
height = 0,
style = invis,
width = 0]
storage [
URL = "https://en.wikibooks.org/wiki/The_Linux_Kernel/Storage",
fillcolor = white,
fixedsize = true,
height = 0.6,
row = func,
width = 2]
storage -> storage_ [
arrowhead = "",
row = func]
FS [
fillcolor = "#d9e7ee",
fixedsize = true,
label = "files and\ndirectories",
row = usr,
shape = ellipse]
VFS [
fillcolor = "#b2d3e4",
label = "Virtual\nFile System"]
FS -> VFS
VFS -> mmap [ weight = 0]
VFS -> NFS [
weight = 0]
logFS [
fillcolor = "#6a9ab1",
fontsize = 20,
label = "logical\nfilesystems:\next3, xfs ..."]
VFS -> logFS
PC [
fillcolor = "#91b5c9",
fixedsize = true,
fontsize = 20,
height = 0.8,
label = "page\ncache",
shape = octagon,
width = 1.2]
VFS -> PC [ weight = 0]
block [
fillcolor = "#71809b",
fontsize = 20,
label = "Block\ndevices\nand drivers"]
logFS -> block
SD [
fillcolor = "#777777",
fontcolor = white,
fontsize = 20,
label = "storage devices:\nSCSI, NVMe ...",
row = chip]
block -> SD
2021-12-21 22:32:54 +08:00
} // storge
subgraph HI {
2021-12-23 13:50:27 +08:00
node [color = "#cfbf57ff"]
edge [
color = "#cfbf57ff",
weight = 10
]
HI_ [
fixedsize = true,
height = 0,
shape = point,
style = invis,
width = 0]
HI [
URL = "https://en.wikibooks.org/wiki/The_Linux_Kernel/Human_interfaces",
fillcolor = white,
fixedsize = true,
fontsize = 12,
height = 0.6,
label = "human\ninterface",
row = func,
width = 2]
HI -> HI_ [
arrowhead = "",
row = func]
char [
fillcolor = "#d9e7ee",
fixedsize = true,
label = "char\ndevices",
row = usr,
shape = ellipse]
input [
fillcolor = "#b2d3e4",
label = "input\nsubsystem"]
char -> input
F7 [
fillcolor = "#6a9ab1",
label = "HI class\ndrivers"]
input -> F7
HID [
fillcolor = "#71809b",
fontsize = 20,
URL = "https://www.kernel.org/doc/html/latest/hid/",
label = "HI\nperipherals\ndrivers"]
F7 -> HID
display [
fillcolor = "#777777",
fontcolor = white,
fontsize = 19,
label = "keyboard, mouse,\ndisplay, audio",
row = chip]
HID -> display
2021-12-21 22:32:54 +08:00
} // HI
subgraph functions {
2021-12-23 13:50:27 +08:00
graph [
rank = same]
edge [
style = invis,
weight = 1
]
2019-11-18 13:21:35 +08:00
system;
networking;
2021-12-23 13:50:27 +08:00
system -> processing [ weight = 1]
storage -> networking [ weight = 1]
memory [
color = "#51bf5b",
URL = "https://en.wikibooks.org/wiki/The_Linux_Kernel/Memory",
fillcolor = white,
fixedsize = true,
height = 0.6,
row = func,
width = 2]
memory -> storage [ weight = 1]
processing -> memory [
weight = 1]
functions_ [
fixedsize = true,
height = 0,
shape = point
style = invis,
width = 0]
functions_ -> HI -> system [ weight = 1]
functions [
color = gray,
tooltip = "Columns represent main functionalities of the kernel",
URL = "http://www.makelinux.net/ldd3/chp-1-sect-2.shtml",
fillcolor = gray,
fixedsize = true,
height = 0.6,
row = func,
style = dashed,
width = 1.6]
functions -> functions_ [
arrowhead = "",
color = gray,
style = "",
weight = ""]
2019-11-18 13:21:35 +08:00
}
2021-12-21 22:32:54 +08:00
subgraph interfaces {
2021-12-23 13:50:27 +08:00
graph [ rank = same]
2019-11-18 13:21:35 +08:00
SCI;
sock;
FS;
proc;
char;
2021-12-23 13:50:27 +08:00
usr_ [
fixedsize = true,
height = 0,
shape = point
style = invis,
width = 0.5]
usr [
fillcolor = "#d9e7eeff",
fixedsize = true,
label = "user space\ninterfaces",
row = usr,
shape = ellipse,
style = "filled,setlinewidth(0)"]
MA;
2019-11-18 13:21:35 +08:00
}
2019-11-21 23:09:09 +08:00
{
2021-12-23 13:50:27 +08:00
edge [ style = invis weight = 10 ]
2019-11-22 00:32:36 +08:00
system_;
SCI;
system_ -> SCI;
networking_;
sock;
networking_ -> sock;
storage_;
FS;
2019-11-21 23:09:09 +08:00
storage_ -> FS;
2019-11-22 00:32:36 +08:00
processing_;
proc;
2019-11-21 23:09:09 +08:00
processing_ -> proc;
2019-11-22 00:32:36 +08:00
HI_;
char;
2019-11-21 23:09:09 +08:00
HI_ -> char;
MA;
2021-12-23 13:50:27 +08:00
memory_ [
fixedsize = true,
height = 0,
shape = point,
style = invis,
width = 0]
memory_ -> MA;
}
2021-12-21 22:32:54 +08:00
subgraph virtual {
2021-12-23 13:50:27 +08:00
graph [
rank = same]
2019-11-18 13:21:35 +08:00
sysfs;
prot_fam;
VFS;
Tasks;
input;
2021-12-23 13:50:27 +08:00
D0 [
fixedsize = true,
height = 0,
shape = point,
style = invis,
width = 0]
virt [
fillcolor = "#b2d3e4",
label = "virtual\nsubsystems",
URL = "https://en.wikipedia.org/wiki/Proxy_pattern",
tooltip = "proxy between standard user space interfaces and internal implementations",
style = "filled,setlinewidth(0)"]
VM [
color = "#51bf5b",
fillcolor = "#b2d3e4",
label = "Virtual\nmemory"]
2019-11-18 13:21:35 +08:00
}
2021-12-21 22:32:54 +08:00
subgraph bridges {
2021-12-23 13:50:27 +08:00
graph [
rank = same]
bridges [
fillcolor = "#91b5c9",
shape = octagon,
tooltip = "bridges between uniform virtual interfaces and various implementations",
URL = "https://en.wikipedia.org/wiki/Bridge_pattern",
style = "filled,setlinewidth(0)"]
DM;
NFS;
mmap;
sync;
2021-12-23 13:50:27 +08:00
E0 [
fixedsize = true,
height = 0,
shape = point,
style = invis,
width = 0]
//PC
2019-11-18 13:21:35 +08:00
}
2021-12-21 22:32:54 +08:00
subgraph logical {
2021-12-23 13:50:27 +08:00
graph [
rank = same]
2019-11-18 13:21:35 +08:00
log_sys;
log_prot;
logFS;
sched;
F7;
2021-12-23 13:50:27 +08:00
F0 [
fixedsize = true,
height = 0,
shape = point,
style = invis,
width = 0]
logical [
fillcolor = "#6a9ab1",
style = "filled,setlinewidth(0)"]
log_mem [
color = "#51bf5b",
fillcolor = "#6a9ab1",
label = "logical\nmemory"]
//SW
2019-11-18 13:21:35 +08:00
}
2021-12-21 22:32:54 +08:00
subgraph HWI {
2021-12-23 13:50:27 +08:00
graph [ rank = same]
HWI [
fillcolor = "#71809b",
label = "hardware\ninterfaces",
style = "filled,setlinewidth(0)"]
2019-11-18 13:21:35 +08:00
bus_drv;
netif;
block;
2021-12-23 13:50:27 +08:00
//PA;
2019-11-18 13:21:35 +08:00
IRQ;
2020-06-24 13:01:58 +08:00
HID;
2021-12-23 13:50:27 +08:00
G0 [
fixedsize = true,
height = 0,
shape = point,
style = invis,
width = 0]
2019-11-18 13:21:35 +08:00
}
2021-12-21 22:32:54 +08:00
subgraph HW {
2021-12-23 13:50:27 +08:00
graph [
rank = same]
HW [
fillcolor = "#777777",
fontcolor = white,
label = "electronics,\nhardware",
row = chip,
style = "filled,setlinewidth(0)"]
2021-12-21 22:32:54 +08:00
buses;
2019-11-18 13:21:35 +08:00
net_hw;
2021-12-21 22:32:54 +08:00
SD;
2019-11-18 13:21:35 +08:00
CPU;
2021-12-21 22:32:54 +08:00
display;
2021-12-23 13:50:27 +08:00
H0 [
fixedsize = true,
height = 0,
shape = point,
style = invis,
width = 0]
RAM;
2019-11-18 13:21:35 +08:00
}
2021-12-23 13:50:27 +08:00
bottom [
label = "© 2007-2021 Constantine Shulyupin http://www.MakeLinux.net/kernel/diagram",
shape = plaintext,
style = ""]
CPU -> bottom [
style = invis]
layers [
fillcolor = lightgray,
tooltip = "Functionalities are divided to common layers. It is approximate division.",
height = 0.1,
style = "filled,setlinewidth(0)",
width = 0.5]
functions -> layers [
style = invis ]
usr -> usr_ [
arrowhead = "",
color = "#d9e7eeff",
minlen = 2]
usr -> virt [
color = "#d9e7eeff"]
virt -> D0 [
arrowhead = "",
color = "#b2d3e4",
minlen = 2]
virt -> bridges [
color = "#b2d3e4"]
bridges -> E0 [
arrowhead = "",
color = "#91b5c9",
minlen = 2,
style = "filled,setlinewidth(6)",
weight = ""]
bridges -> logical [
color = "#91b5c9",
style = "filled,setlinewidth(6)"]
logical -> F0 [
arrowhead = "",
color = "#6a9ab1",
minlen = 2,
row = logical,
style = "filled,setlinewidth(6)",
weight = ""]
logical -> HWI [
color = "#6a9ab1",
row = logical,
style = "filled,setlinewidth(6)"]
HWI -> G0 [
arrowhead = "",
color = "#71809b",
minlen = 2,
row = HWI,
style = "filled,setlinewidth(6)",
weight = ""]
HWI -> HW [
color = "#71809b",
row = HWI,
style = "filled,setlinewidth(6)"]
HW -> H0 [
arrowhead = "",
color = "#777777",
minlen = 2,
row = chip,
style = "filled,setlinewidth(6)",
weight = ""]
layers -> usr [
arrowhead = "",
color = gray,
style = "filled,setlinewidth(1)"]
LKD [
fontsize = 40,
label = "Linux kernel diagram",
shape = plain,
style = ""]
LKD -> processing [ style = invis]
2019-11-18 13:21:35 +08:00
}