{"adoption": {"forks": 296, "observed_at": "2026-08-28T04:03:37.589310+00:00", "stars": 1110}, "canonical_url": "https://ross.abutalabs.com/products/linux_driver_tutorial_legacy", "card": {"archived": false, "artifact_type": "learning-resource", "description": "A Tutorial how to get started with Linux Kernel Modules and Linux Drivers.", "domain": ["embedded-systems", "operating-systems", "tutorials", "hardware"], "enriched": true, "function": ["embedded", "developer-tools", "documentation"], "health_score": 20, "homepage": null, "language": "C", "license": "Unlicense", "license_family": "permissive", "maturity": "stable", "member_repos": ["Johannes4Linux/Linux_Driver_Tutorial_legacy"], "name": "Johannes4Linux/Linux_Driver_Tutorial_legacy", "platform": ["embedded", "c"], "pushed_at": "2024-07-15T15:36:17+00:00", "repo": "Johannes4Linux/Linux_Driver_Tutorial_legacy", "stars": 1110, "tags": ["linux-kernel-modules", "device-drivers", "raspberry-pi", "gpio", "device-tree", "i2c", "spi", "tutorial-examples", "linux"], "topics": [], "urls": [], "use_cases": ["learn how to write a linux kernel module", "get started with linux device drivers", "example code for a gpio character device driver", "how to write an i2c or spi driver with device tree", "understand ioctl, poll, and waitqueues in kernel modules", "learn kernel memory management, mutexes, and completions", "write a procfs or sysfs entry from a kernel module"], "what_it_is": "A collection of example C source code teaching Linux kernel module and device driver development, tested on a Raspberry Pi 3. It covers dozens of topics from simple hello-world modules to GPIO, I2C/SPI drivers, device tree bindings, DMA, and synchronization primitives.", "when_to_avoid": ["you need a production-ready driver for specific hardware", "you want a modern kernel API tutorial (this is the legacy version)", "you develop drivers for platforms other than Linux"], "when_to_choose": ["you are learning Linux kernel module or driver development from scratch", "you want small, self-contained C examples to compile and run on a Raspberry Pi", "you need reference snippets for device tree, IIO, DMA, or mmap in drivers"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/linux_driver_tutorial_legacy", "repo": "Johannes4Linux/Linux_Driver_Tutorial_legacy", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:37.589310+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:43:25.471690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "84a39bbf03c5978270ea5b0f8316f71a4bdbb7f5ee446d31995111775c320714", "fetched_at": "2026-08-28T04:03:37.589310+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Johannes4Linux/Linux_Driver_Tutorial_legacy"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:37.589310+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:43:25.471690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "84a39bbf03c5978270ea5b0f8316f71a4bdbb7f5ee446d31995111775c320714", "fetched_at": "2026-08-28T04:03:37.589310+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Johannes4Linux/Linux_Driver_Tutorial_legacy"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:43:25.471690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "84a39bbf03c5978270ea5b0f8316f71a4bdbb7f5ee446d31995111775c320714", "fetched_at": "2026-08-28T04:03:37.589310+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Johannes4Linux/Linux_Driver_Tutorial_legacy"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:03:37.589310+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:37.589310+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:37.589310+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:43:25.471690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "84a39bbf03c5978270ea5b0f8316f71a4bdbb7f5ee446d31995111775c320714", "fetched_at": "2026-08-28T04:03:37.589310+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Johannes4Linux/Linux_Driver_Tutorial_legacy"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:37.589310+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:37.589310+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:43:25.471690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "84a39bbf03c5978270ea5b0f8316f71a4bdbb7f5ee446d31995111775c320714", "fetched_at": "2026-08-28T04:03:37.589310+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Johannes4Linux/Linux_Driver_Tutorial_legacy"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:37.589310+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:37.589310+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:37.589310+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:43:25.471690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "84a39bbf03c5978270ea5b0f8316f71a4bdbb7f5ee446d31995111775c320714", "fetched_at": "2026-08-28T04:03:37.589310+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Johannes4Linux/Linux_Driver_Tutorial_legacy"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:37.589310+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:37.589310+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:43:25.471690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "84a39bbf03c5978270ea5b0f8316f71a4bdbb7f5ee446d31995111775c320714", "fetched_at": "2026-08-28T04:03:37.589310+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Johannes4Linux/Linux_Driver_Tutorial_legacy"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:43:25.471690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "84a39bbf03c5978270ea5b0f8316f71a4bdbb7f5ee446d31995111775c320714", "fetched_at": "2026-08-28T04:03:37.589310+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Johannes4Linux/Linux_Driver_Tutorial_legacy"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:43:25.471690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "84a39bbf03c5978270ea5b0f8316f71a4bdbb7f5ee446d31995111775c320714", "fetched_at": "2026-08-28T04:03:37.589310+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Johannes4Linux/Linux_Driver_Tutorial_legacy"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:43:25.471690+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "84a39bbf03c5978270ea5b0f8316f71a4bdbb7f5ee446d31995111775c320714", "fetched_at": "2026-08-28T04:03:37.589310+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Johannes4Linux/Linux_Driver_Tutorial_legacy"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2080, "days_push": 779, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}