{"id":24468920,"url":"https://github.com/ivan-guerra/eldd","last_synced_at":"2026-05-18T22:15:35.301Z","repository":{"id":195288586,"uuid":"692630065","full_name":"ivan-guerra/eldd","owner":"ivan-guerra","description":"Embedded Linux Driver Development","archived":false,"fork":false,"pushed_at":"2023-10-08T00:37:20.000Z","size":63,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-21T07:13:26.745Z","etag":null,"topics":["embedded-linux","linux","linux-drivers"],"latest_commit_sha":null,"homepage":"https://programmador.com/posts/2023/linux-driver-development-for-embedded-processors/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ivan-guerra.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-09-17T04:46:12.000Z","updated_at":"2024-07-07T02:28:57.000Z","dependencies_parsed_at":"2023-10-03T12:00:51.915Z","dependency_job_id":null,"html_url":"https://github.com/ivan-guerra/eldd","commit_stats":null,"previous_names":["ivan-guerra/eldd"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-guerra%2Feldd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-guerra%2Feldd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-guerra%2Feldd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivan-guerra%2Feldd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ivan-guerra","download_url":"https://codeload.github.com/ivan-guerra/eldd/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243581740,"owners_count":20314291,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["embedded-linux","linux","linux-drivers"],"created_at":"2025-01-21T07:13:31.064Z","updated_at":"2026-05-18T22:15:35.244Z","avatar_url":"https://github.com/ivan-guerra.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Linux Driver Development for Embedded Processors\n\nThis project contains a subset of the lab modules introduced throughout the\n[Linux Driver Development for Embedded Processors][1] text. The examples in\nthis repo target the [Raspberry Pi 3 Model B+][2]. All the labs were built and\ntested using the [rpi-6.1.y][3] kernel.\n\n### Checking Out the Project\n\nThis project includes the `rpi-6.1.y` raspberrypi Linux kernel branch as a\nsubmodule. There's a lot of code and a lot of git history that comes along with\nthe `rpi-6.1.y` submodule. To speed up the checkout process and save space on\nyour PC, you may want to follow these steps when cloning the repo:\n```\n$ git clone git@github.com:ivan-guerra/eldd.git\n$ cd eldd\n$ git submodule init\n$ git submodule update --depth 1\n```\nYou can change the argument to `--depth` to include however much history you\nlike or remove it completey for the full history.\n\n### Building and Deploying the Kernel\n\nFirst, install the kernel dependencies and cross compilation tools required to\nbuild the Linux kernel. These are defined in the [\"Cross Compiling the\nKernel\"][5] section of the Rapsberry Pi docs.\n\nBuild and optionally configure the kernel using the included\n`scripts/kernel_build.sh` script. `kernel_build.sh` will apply the\n`bcm2711_defconfig` on first run.   \n\n\u003e **Note** \n\u003e You must manually apply the kernel configs described in Chapter 1 pg. 52 for\n\u003e all the lab drivers to function properly!\n\nTo deploy your kernel, mount the boot and rootfs partitions of your Pi's SD card:\n\n```bash\nmount /dev/sdb1 /mnt/fat32\nmount /dev/sdb2 /mnt/ext4\n```\n\n**Be sure to pick partition and mount point names that make sense for your system!**\n\nYou can use the `scripts/kernel_install.sh` script to install the kernel image,\ndtbs, and modules to the appropriate partitions. The `kernel_install.sh` script\nexpects two arguments: the boot mount point followed by the rootfs mount point\n(in that order). For example,\n\n```bash\nsudo ./kernel_install /mnt/boot /mnt/ext4\n```\n\n### Building and Deploying the Labs \n\nYou can build all the lab modules by running the `scripts/lab_build.sh` script.\nFor the build to succeed, you must have successfully followed the instructions\nin [\"Building and Deploying the Kernel\"](#building-and-deploying-the-kernel).\nPost build, a `*.ko` kernel module will be present in each\n`lab_\u003cCHAPTER_NUM\u003e_\u003cLAB_NUM\u003e`. You can secure copy `*.ko` modules in bulk from\nhost to RPI using `scripts/lab_deploy.sh`. See the comments in\n[`lab_deploy.sh`](scripts/lab_deploy.sh) for more info.\n\n### Device Tree Overlays\n\nThroughout the text, the author directly modifies the BCM2711 dts files. You\ncan do the same if you like. Optionally, you can apply the included Device Tree\nOverlays to achieve the same effect and not litter the original dts files.\n\nRelevant lab overlays are included in [`overlays/`](overlays/). To apply an\noverlay, copy the overlay's `*.dts` file to\n`linux/arch/arm64/boot/dts/overlays` and then edit the `Makefile` to include\nyour overlay.\n\nFollow the instructions in [\"Building and Deploying the\nKernel\"](#building-and-deploying-the-kernel) to build and install your new\noverlay to the SD card.\n\nEdit the `config.txt` in the boot directory of your Pi's SD card to include a `dtoverlay` entry specifying your new overlay. For example:\n\n```txt\ndtoverlay=my-overlay\n```\n\nBoot your Pi off the SD card and your new overlay will automatically be applied during boot.\n\n### Source Material\n\nThe author has made these and many other labs freely availably on his GitHub\npage. Included in his repo are lab drivers for processors other than the RPI's\nBCM2837: [linux_book_2nd_edition][4]\n\n[1]: https://www.amazon.com/Linux-Driver-Development-Embedded-Processors/dp/1729321828\n[2]: https://www.raspberrypi.com/products/raspberry-pi-3-model-b-plus/\n[3]: https://github.com/raspberrypi/linux/tree/rpi-6.1.y\n[4]: https://github.com/ALIBERA/linux_book_2nd_edition\n[5]: https://www.raspberrypi.com/documentation/computers/linux_kernel.html#cross-compiling-the-kernel\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivan-guerra%2Feldd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fivan-guerra%2Feldd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivan-guerra%2Feldd/lists"}