Graphviz Logo

Graphviz - Graph Visualization Software

Linux Kernel Diagram

Contributed by Constantine Shulyupin. This is a simpler version of https://makelinux.github.io/kernel_map/. Source code originated at https://github.com/makelinux/linux_kernel_map/blob/master/Linux_kernel_diagram.dot

[Input .gv File] [SVG] [Raster Image] [Open in Playground]

digraph matrix {
	graph [newrank=true,
		nodesep=0.1,
		overlap=true,
		ranksep=0.1,
		splines=false,
		nodesep=0.3,
		ranksep=0.2,
		//bgcolor="transparent",
	];
	node [fixedsize=false,
		fontname="Ubuntu"
		fontsize=24,
		height=1,
		shape=box,
		style="filled,setlinewidth(6)",
		width=2.2
	];
	edge [arrowhead=none,
		arrowsize=0.5,
		style=invis,
		labelfontname="Ubuntu",
		weight=10
	];
	{
		node [color="#e27dd6ff"];
		system_		 [color="#e27dd6ff",
			fixedsize=true,
			height=0,
			shape="",
			style=invis,
			width=0];
		system		 [color="#e27dd6ff",
			fillcolor=white,
			fixedsize=true,
			height=0.6,
			row=func,
			width=2];
		system -> system_		 [arrowhead="",
			color="#e27dd6ff",
			row=func,
			style="filled,setlinewidth(6)"];
		SCI		 [color="#e27dd6ff",
			fillcolor="#d9e7ee",
			fixedsize=true,
			label="System calls",
			row=usr,
			shape=ellipse];
		sysfs		 [color="#e27dd6ff",
			fillcolor="#b2d3e4",
			label="proc, sysfs,\nfile systems"];
		SCI -> sysfs		 [color="#e27dd6ff",
			style="filled,setlinewidth(6)"];
		DM		 [color="#e27dd6ff",
			fillcolor="#91b5c9",
			fixedsize=true,
			fontsize=20,
			height=0.8,
			label="Device\nModel",
			shape=octagon,
			width=2];
		sysfs -> DM		 [color="#e27dd6ff",
			style="filled,setlinewidth(6)"];
		log_sys		 [color="#e27dd6ff",
			fillcolor="#6a9ab1",
			fontsize=20,
			label="system run,\nmodules,\ngeneric\nHW access "];
		DM -> log_sys		 [color="#e27dd6ff",
			style="filled,setlinewidth(6)"];
		bus_drv		 [color="#e27dd6ff",
			fillcolor="#71809b",
			label="bus drivers"];
		log_sys -> bus_drv		 [color="#e27dd6ff",
			style="filled,setlinewidth(6)"];
		H2		 [color="#e27dd6ff",
			fillcolor="#777777",
			fontcolor=white,
			fontsize=20,
			label="busess:\nPCI, USB ...",
			row=chip];
		bus_drv -> H2		 [color="#e27dd6ff",
			style="filled,setlinewidth(6)"];
	}
	{
		node [color="#61c2c5"];
		edge [color="#61c2c5"];
		networking_		 [color="#61c2c5",
			fixedsize=true,
			height=0,
			shape="",
			style=invis,
			width=0];
		networking		 [color="#61c2c5",
			fillcolor=white,
			fixedsize=true,
			height=0.6,
			row=func,
			width=2];
		networking -> networking_		 [arrowhead="",
			color="#61c2c5",
			row=func,
			style="filled,setlinewidth(6)"];
		sock		 [color="#61c2c5",
			fillcolor="#d9e7ee",
			fixedsize=true,
			label=Sockets,
			row=usr,
			shape=ellipse];
		prot_fam		 [color="#61c2c5",
			fillcolor="#b2d3e4",
			label="protocol\nfamilies"];
		sock -> prot_fam		 [color="#61c2c5",
			style="filled,setlinewidth(6)"];
		log_prot		 [color="#61c2c5",
			fillcolor="#6a9ab1",
			label="protocols:\nTCP, UDP, IP"];
		prot_fam -> log_prot		 [color="#61c2c5",
			style="filled,setlinewidth(6)"];
		netif		 [color="#61c2c5",
			fillcolor="#71809b",
			fontsize=20,
			label="network\ninterfaces\nand drivers"];
		log_prot -> netif		 [color="#61c2c5",
			style="filled,setlinewidth(6)"];
		net_hw		 [color="#61c2c5",
			fillcolor="#777777",
			fontcolor=white,
			fontsize=20,
			label="network:\nEthernet, WiFi ...",
			row=chip];
		netif -> net_hw		 [color="#61c2c5",
			style="filled,setlinewidth(6)"];
		NFS		 [color="#8383cc",
			fillcolor="#91b5c9",
			fixedsize=true,
			height=0.8,
			label=NFS,
			shape=octagon,
			width=1.2];
		NFS -> log_prot		 [color="#61c2c5",
			style="filled,setlinewidth(6)",
			weight=0];
	}
	{
		node [color="#8383cc"];
		edge [color="#8383cc"];
		NFS;
		storage_		 [color="#8383cc",
			fixedsize=true,
			height=0,
			shape="",
			style=invis,
			width=0];
		storage		 [color="#8383cc",
			fillcolor=white,
			fixedsize=true,
			height=0.6,
			row=func,
			width=2];
		storage -> storage_		 [arrowhead="",
			color="#8383cc",
			row=func,
			style="filled,setlinewidth(6)"];
		FS		 [color="#8383cc",
			fillcolor="#d9e7ee",
			fixedsize=true,
			label="files and\ndirectories",
			row=usr,
			shape=ellipse];
		VFS		 [color="#8383cc",
			fillcolor="#b2d3e4",
			label="Virtual\nFile System"];
		FS -> VFS		 [color="#8383cc",
			style="filled,setlinewidth(6)"];
		VFS -> NFS		 [color="#8383cc",
			style="filled,setlinewidth(6)",
			weight=0];
		logFS		 [color="#8383cc",
			fillcolor="#6a9ab1",
			fontsize=20,
			label="logical\nfilesystems:\next3, xfs ..."];
		VFS -> logFS		 [color="#8383cc",
			style="filled,setlinewidth(6)"];
		PC		 [color="#51bf5b",
			fillcolor="#91b5c9",
			fixedsize=true,
			fontsize=20,
			height=0.8,
			label="page\ncache",
			shape=octagon,
			width=1.2];
		VFS -> PC		 [color="#8383cc",
			style="filled,setlinewidth(6)",
			weight=0];
		mmap		 [color="#51bf5b",
			fillcolor="#91b5c9",
			fixedsize=true,
			fontsize=20,
			height=0.8,
			label="memory\nmapping",
			shape=octagon,
			width=2];
		VFS -> mmap		 [color="#8383cc",
			style="filled,setlinewidth(6)",
			weight=0];
		block		 [color="#8383cc",
			fillcolor="#71809b",
			fontsize=20,
			label="Block\ndevices\nand drivers"];
		logFS -> block		 [color="#8383cc",
			style="filled,setlinewidth(6)"];
		PA		 [color="#51bf5b",
			fillcolor="#71809b",
			label="Page\nAllocator"];
		PC -> PA		 [color="#51bf5b",
			style="filled,setlinewidth(6)",
			weight=0];
		H4		 [color="#8383cc",
			fillcolor="#777777",
			fontcolor=white,
			fontsize=20,
			label="storage devices:\nSCSI, NVMe ...",
			row=chip];
		block -> H4		 [color="#8383cc",
			style="filled,setlinewidth(6)"];
		SW		 [color="#8383cc",
			fillcolor="#91b5c9",
			fixedsize=true,
			label=Swap,
			height=0.8,
			shape=octagon,
			width=1.2];
		SW -> block		 [color="#8383cc",
			style="filled,setlinewidth(6)",
			weight=0];
	}
	{
		node [color="#c46747",
			style="filled,setlinewidth(6)"
		];
		edge [color="#c46747"];
		processing_		 [color="#c46747",
			fixedsize=true,
			height=0,
			shape="",
			style=invis,
			width=0];
		processing		 [color="#c46747",
			fillcolor=white,
			fixedsize=true,
			height=0.6,
			row=func,
			width=2];
		processing -> processing_		 [arrowhead="",
			color="#c46747",
			row=func,
			style="filled,setlinewidth(6)"];
		proc		 [color="#c46747",
			fillcolor="#d9e7ee",
			fixedsize=true,
			label=Processes,
			row=usr,
			shape=ellipse];
		Tasks		 [color="#c46747",
			fillcolor="#b2d3e4"];
		proc -> Tasks		 [color="#c46747",
			style="filled,setlinewidth(6)"];
		sync		 [color="#c46747",
			fillcolor="#91b5c9",
			fixedsize=true,
			fontsize=20,
			fontname="Ubuntu Condensed"
			label=synchronization,
			height=0.7,
			width=2,
			shape=octagon];
		Tasks -> sync		 [color="#c46747",
			style="filled,setlinewidth(6)"];
		sched		 [color="#c46747",
			fillcolor="#6a9ab1",
			label=Scheduler];
		sync -> sched		 [color="#c46747",
			style="filled,setlinewidth(6)"];
		IRQ		 [color="#c46747",
			fillcolor="#71809b",
			fontsize=20,
			label="interrupts\ncore,\nCPU arch"];
		sched -> IRQ		 [color="#c46747",
			style="filled,setlinewidth(6)"];
		CPU		 [color="#c46747",
			fillcolor="#777777",
			fontcolor=white,
			fontsize=20,
			row=chip];
		IRQ -> CPU		 [color="#c46747",
			style="filled,setlinewidth(6)"];
	}
	{
		node [color="#cfbf57ff",
			style="filled,setlinewidth(6)"
		];
		edge [color="#cfbf57ff",
			weight=10
		];
		HI_		 [color="#cfbf57ff",
			fixedsize=true,
			height=0,
			shape="",
			style=invis,
			width=0];
		HI		 [color="#cfbf57ff",
			fillcolor=white,
			fixedsize=true,
			fontsize=20,
			height=0.6,
			label="human\ninterface",
			row=func,
			width=2];
		HI -> HI_		 [arrowhead="",
			color="#cfbf57ff",
			row=func,
			style="filled,setlinewidth(6)"];
		char		 [color="#cfbf57ff",
			fillcolor="#d9e7ee",
			fixedsize=true,
			label="char\ndevices",
			row=usr,
			shape=ellipse];
		input		 [color="#cfbf57ff",
			fillcolor="#b2d3e4",
			label="input\nsubsystem"];
		char -> input		 [color="#cfbf57ff",
			style="filled,setlinewidth(6)"];
		F7		 [color="#cfbf57ff",
			fillcolor="#6a9ab1",
			label="HI class\ndrivers"];
		input -> F7		 [color="#cfbf57ff",
			style="filled,setlinewidth(6)"];
		HID		 [color="#cfbf57ff",
			fillcolor="#71809b",
			fontsize=20,
			URL="https://www.kernel.org/doc/html/latest/hid/",
			label="HI\nperipherals\ndrivers"];
		F7 -> HID		 [color="#cfbf57ff",
			style="filled,setlinewidth(6)"];
		H7		 [color="#cfbf57ff",
			fillcolor="#777777",
			fontcolor=white,
			fontsize=20,
			label="display, keyboard,\nmouse, audio",
			row=chip];
		HID -> H7		 [color="#cfbf57ff",
			style="filled,setlinewidth(6)"];
	}
	{
		graph [rank=same];
		edge [style=invis,
			weight=1
		];
		system;
		networking;
		system -> networking		 [weight=1];
		storage;
		networking -> storage		 [weight=1];
		memory		 [color="#51bf5b",
			fillcolor=white,
			fixedsize=true,
			height=0.6,
			row=func,
			width=2];
		storage -> memory		 [weight=1];
		processing;
		HI;
		processing -> HI		 [weight=1];
		memory -> processing		 [weight=1];
		functions_		 [fixedsize=true,
			height=0,
			shape="",
			style=invis,
			width=0];
		functions_ -> 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=""];
	}
	{
		graph [rank=same];
		SCI;
		sock;
		FS;
		proc;
		char;
		usr_		 [fixedsize=true,
			height=0,
			shape="",
			style=invis,
			width=0.5];
		usr		 [fillcolor="#d9e7eeff",
			fixedsize=true,
			label="user space\ninterfaces",
			row=usr,
			shape=ellipse,
			style="filled,setlinewidth(0)"];
		MA		 [color="#51bf5b",
			fillcolor="#d9e7ee",
			fixedsize=true,
			label="memory\naccess",
			row=usr,
			shape=ellipse];
	}
	{
		edge [style=invis,
			weight=10
		];
		system_;
		SCI;
		system_ -> SCI;
		networking_;
		sock;
		networking_ -> sock;
		storage_;
		FS;
		storage_ -> FS;
		processing_;
		proc;
		processing_ -> proc;
		HI_;
		char;
		HI_ -> char;
		MA;
		memory_		 [fixedsize=true,
			height=0,
			shape="",
			style=invis,
			width=0];
		memory_ -> MA;
	}
	{
		graph [rank=same];
		sysfs;
		prot_fam;
		VFS;
		Tasks;
		input;
		D0		 [fixedsize=true,
			height=0,
			shape="",
			style=invis,
			width=0];
		virt		 [fillcolor="#b2d3e4",
			label="virtual\nsubsystems",
			style="filled,setlinewidth(0)"];
		VM		 [color="#51bf5b",
			fillcolor="#b2d3e4",
			label="Virtual\nmemory"];
	}
	{
		graph [rank=same];
		DM;
		NFS;
		mmap;
		sync;
		E0		 [fixedsize=true,
			height=0,
			shape="",
			style=invis,
			width=0];
		bridges		 [fillcolor="#91b5c9",
			shape=octagon,
			style="filled,setlinewidth(0)"];
	}
	{
		graph [rank=same];
		log_sys;
		log_prot;
		logFS;
		sched;
		F7;
		F0		 [fixedsize=true,
			height=0,
			shape="",
			style=invis,
			width=0];
		logical		 [fillcolor="#6a9ab1",
			style="filled,setlinewidth(0)"];
		log_mem		 [color="#51bf5b",
			fillcolor="#6a9ab1",
			label="logical\nmemory"];
	}
	{
		graph [rank=same];
		bus_drv;
		netif;
		block;
		PA;
		IRQ;
		HID;
		G0		 [fixedsize=true,
			height=0,
			shape="",
			style=invis,
			width=0];
		HWI		 [fillcolor="#71809b",
			label="hardware\ninterfaces",
			style="filled,setlinewidth(0)"];
	}
	{
		graph [rank=same];
		H2;
		net_hw;
		H4;
		CPU;
		H7;
		H0		 [fixedsize=true,
			height=0,
			shape="",
			style=invis,
			width=0];
		HW		 [fillcolor="#777777",
			fontcolor=white,
			label="electronics,\nhardware",
			row=chip,
			style="filled,setlinewidth(0)"];
		H5		 [color="#51bf5b",
			fillcolor="#777777",
			fontcolor=white,
			fontsize=20,
			label="MMU, RAM",
			row=chip];
	}
	subgraph mem {
		node [color="#51bf5b",
			height=0.5
		];
		edge [color="#51bf5b"];
		PC;
		mmap;
		SW;
		mmap -> SW		 [color="#51bf5b",
			style="filled,setlinewidth(6)",
			weight=0];
		log_mem;
		mmap -> log_mem		 [color="#51bf5b",
			style="filled,setlinewidth(6)"];
		PA;
		H5;
		PA -> H5		 [color="#51bf5b",
			style="filled,setlinewidth(6)"];
		memory;
		memory_;
		memory -> memory_		 [arrowhead="",
			color="#51bf5b",
			row=func,
			style="filled,setlinewidth(6)"];
		MA;
		VM;
		MA -> VM		 [color="#51bf5b",
			style="filled,setlinewidth(6)"];
		VM -> mmap		 [color="#51bf5b",
			style="filled,setlinewidth(6)"];
		log_mem -> PA		 [color="#51bf5b",
			style="filled,setlinewidth(6)"];
	}
	bottom	 [label="© 2007-2019 Constantine Shulyupin http://www.MakeLinux.net/kernel/diagram",
		shape=plaintext,
		style=""];
	H4 -> bottom	 [weight=""];
	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;
	usr -> usr_	 [arrowhead="",
		color="#d9e7eeff",
		minlen=2,
		style="filled,setlinewidth(6)"];
	usr -> virt	 [color="#d9e7eeff",
		style="filled,setlinewidth(6)"];
	virt -> D0	 [arrowhead="",
		color="#b2d3e4",
		minlen=2,
		style="filled,setlinewidth(6)"];
	virt -> bridges	 [color="#b2d3e4",
		style="filled,setlinewidth(6)"];
	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 -> storage;
}

Copyright Constantine Shulyupin, licensed under EPL