{"id":38499101,"url":"https://github.com/rdkcentral/meta-rdk-bsp-arm","last_synced_at":"2026-01-17T05:57:44.980Z","repository":{"id":319289850,"uuid":"1078240204","full_name":"rdkcentral/meta-rdk-bsp-arm","owner":"rdkcentral","description":"Meta layer for ARM based BSP's","archived":false,"fork":false,"pushed_at":"2025-12-03T07:12:53.000Z","size":4856,"stargazers_count":1,"open_issues_count":6,"forks_count":2,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-12-06T08:46:32.156Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"BitBake","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rdkcentral.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-17T12:25:07.000Z","updated_at":"2025-12-03T07:12:24.000Z","dependencies_parsed_at":"2025-10-18T18:19:33.294Z","dependency_job_id":"43d82101-52d4-468f-833a-ede555d0b739","html_url":"https://github.com/rdkcentral/meta-rdk-bsp-arm","commit_stats":null,"previous_names":["rdkcentral/meta-rdk-bsp-arm"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rdkcentral/meta-rdk-bsp-arm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdkcentral%2Fmeta-rdk-bsp-arm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdkcentral%2Fmeta-rdk-bsp-arm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdkcentral%2Fmeta-rdk-bsp-arm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdkcentral%2Fmeta-rdk-bsp-arm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rdkcentral","download_url":"https://codeload.github.com/rdkcentral/meta-rdk-bsp-arm/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdkcentral%2Fmeta-rdk-bsp-arm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28501351,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T04:31:57.058Z","status":"ssl_error","status_checked_at":"2026-01-17T04:31:45.816Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2026-01-17T05:57:44.898Z","updated_at":"2026-01-17T05:57:44.962Z","avatar_url":"https://github.com/rdkcentral.png","language":"BitBake","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RDK-B Reference Layer for Arm\n\n\nThis meta layer provides the components to support RDK-B \nplatform on  [Arm SystemReady](https://www.arm.com/architecture/system-architectures/systemready-certification-program) compatible machines, including common virtual machine applications. \nAdditionally, the same image functions (on a \"best-effort\" support basis) on hardware compatible with the\nspecifications. This layer only sources from community upstream sources (e.g kernel.org) and does not use any vendor-specific SDKs.\n\n## How to use\n\nThere are some RDK-B packages for which custom branches are needed, so you will need to use\nour `rdkb-bsp-arm.xml` manifest.\n\n```\n$ mkdir rdkb-arm\n$ cd rdkb-arm\n$ repo init -u 'https://github.com/rdkcentral/meta-rdk-bsp-arm/' \\\n    -m \"manifests/rdkb-bsp-arm.xml\" \\\n    -b \"main\"\n$ repo sync\n$ source meta-rdk-bsp-arm/setup-environment\n$ bitbake rdk-generic-broadband-image\n```\n\nAt the current time, the `main` branch mainfest will build RDK-B 2025Q1 (based on Yocto `kirkstone`),\nand will be updated following the next major RDK-B release.\n\nThe `develop` branch is intended to follow `rdk-next` as closely as possible.\n\nSome Linux distributions with AppArmor support (such as Ubuntu 24.04)\nmay experience difficulties when building meta-rdk-bsp-arm,\nfor best results a Debian 12 environment is recommended.\n\nPlease see the [\"Reference Build Environment\"](https://github.com/rdkcentral/meta-rdk-bsp-arm/wiki/Reference-Build-Enviroment)\npage for more information.\n\n## Build outputs\n\n![Overview of components](./doc/meta-rdk-bsp-arm-components.svg)\n\nThere are two types of build outputs:\n\n* The _platform firmware_, which abstracts the hardware platform in a standard manner (the SystemReady standards).\n\n* The _operating system image_, which includes the root filesystem, Linux kernel and boot manager.\n  \n  Development images generated by this layer can be used across any machine which has a compatible _platform firmware_ deployed.\n\nThe default `armefi64-rdk-broadband` machine type will generate an _operating system image_\nthat will be bootable on platforms with SystemReady (EFI) compatible firmware **and** a\n_platform firmware_ firmware which can be used with QEMU's arm64 \n[`virt`](https://qemu-project.gitlab.io/qemu/system/arm/virt.html) machine type.\n\nThe following generated binaries (in `build-armefi64-rdk-broadband/tmp/deploy/images/armefi64-rdk-broadband/`) are relevant:\n\n* `rdk-generic-broadband-image-armefi64-rdk-broadband.wic`: Uncompressed operating system image (kernel + rootfs + boot manager)\n  \n  This image can be booted on a board (or virtual machine) which already has SystemReady compatible firmware\n* `rdk-generic-broadband-image-armefi64-rdk-broadband.wic.qcow2`: QCOW2 operating system image, best to use with virtual machine programs\n* `rdk-generic-broadband-image-armefi64-rdk-broadband.tar.gz`: Compressed tar archive of the operating system image (including kernel). This is currently used for system upgrades.\n* `u-boot-armefi64-rdk-broadband.bin` (linked to `u-boot.bin`): Reference _platform firmware_ (used with QEMU `virt` machine)\n\nThe generated disk (wic) images are intended for block storage devices, for example,\neMMC, SD cards, USB or NVMe storage devices, or emulated types such as `virtio-blk`.\n\nA production device may use flash (NOR or NAND) devices for storing the system level firmware.\n\nAdditional files like `Image` (Linux kernel Image file), `linuxaa64.efi.stub` (Kernel EFI stub),\n`systemd-bootaa64.efi` (systemd-boot executable) and `u-boot-initial-env-armefi64-rdk-broadband`\n(U-Boot \"Factory\" environment) are also generated by the Yocto build process.\nThese are not needed for normal development and deployment activities.\n\nIt is intended that the `rdk-generic-broadband-image-armefi64-rdk-broadband.wic` is a _universal_\noperating system image that will boot on as many real and virtual machines as possible.\n\n(For example, you can write the `.wic` file onto a USB drive, and move the USB\ndrive between different boards without making any changes)\n\nWhere possible, the same Linux kernel, firmware (U-Boot) and other relevant\ncomponent versions will be used, with a strong preference for \"mainline\" versions.\n\nFor further information, see [\"Real Hardware\"](#real-hardware) and\n[\"Development Notes\"](#development-notes) at the bottom of this document, and\nthe [\"Boot Process for generic Arm systems\"](doc/bootprocess.md) note.\n\n## Building platform firmware for different hardware types\n\nMany development boards will not have a SystemReady-compatible firmware pre-loaded,\nor the pre-loaded firmware will be out of date.\n\nTo provide an easier developer experience, this meta-layer can build the platform\nfirmware for several common developer boards.\n\nOnce you have deployed the SystemReady-compatible _platform firmware_ to your board,\nyou will not need to replace it and only need to consider updating your\n_operating system image_.\n\nThis meta layer can generate firmware for the following types of hardware,\nwith more planned to be implemented (see Wiki [Hardware Support Table](https://github.com/rdkcentral/meta-rdk-bsp-arm/wiki/Hardware-Support-Table)).\n\nBoard Name              | `MACHINE` identifier          | multiconfig nickname  |\n------------------------|-------------------------------|-----------------------|\nGeneric QEMU            | `armefi64-rdk-broadband`      | `generic`             |\nRaspberry Pi 3/4 64-bit | `raspberrypi64-rdk-broadband` | `raspberrypi`         |\n\nThe default `MACHINE` is `armefi64-rdk-broadband` (as explained above).\n\nTo generate an image for another machine, specify the `MACHINE` environment\nvariable when sourcing `setup-environment`:\n\n```\nMACHINE=\"raspberrypi64-rdk-broadband\" source meta-rdk-bsp-arm/setup-environment\n```\n\nAll machine configurations for RDK-B inherit from `armefi64-rdk-broadband`.\n\nUnless the machine configuration has specific overrides, the operating system image\n(kernel + rootfs + boot manager) generated by configurations like `raspberrypi64-rdk-broadband`\nwill be identical to that of the generic machine. **Only the _platform_ firmware binaries will be different**.\n\n### Configuring multiconfig for multiple target builds\n\nIt is possible to use BitBake's [\"multiconfig\"](https://docs.yoctoproject.org/5.0.9/dev-manual/building.html#building-images-for-multiple-targets-using-multiple-configurations)\nfeature to setup the same build folder for multiple targets at once.\n\nDoing so will save you time and disk space, as most packages between\nmachines defined in this layer are shared.\n\nIf you specify `MACHINE=all`, the `setup-environment` script will do the necessary setup:\n\n```\n$ MACHINE=\"all\" source meta-rdk-bsp-arm/setup-environment\n```\n\nYou can then run the build cycle for each target:\n\n```\n$ bitbake mc:generic:rdk-generic-broadband-image \u0026\u0026 \\\n    bitbake mc:raspberrypi:rdk-generic-broadband-image\n```\n\n(Due to the way RDK-B components are built, it is not possible to do\na \"parallel\" build for two targets at once, however, you will still\nsave a significant amount of time and disk space by using multiconfig\nbuilds sequentially)\n\nBuild images for each target will be available in `tmp/deploy`:\n\n```\n$ ls build-armefi64-rdk-broadband/tmp/deploy/images/\narmefi64-rdk-broadband\nraspberrypi64-rdk-broadband\n```\n\n## Usage Notes\n\n* This layer is configured to use WanManager exclusively.\n\n  There is no `erouter0` interface.\n  Some components that do not function without `erouter0`, like WebUI,\n  are not currently included.\n\n* The WAN interface will be mapped to `eth6`. LAN side will always be on `eth0`.\n\n  If a second WAN interface (like SFP) exists, it will be mapped to `eth8`.\n\n  This is to keep the interface names consistent between all hardware devices\n  until it is possible to do this configuration at runtime.\n\n  The mapping of Ethernet interfaces is performed in `/lib/rdk/ethwan_intf.sh`.\n\n### SSIDs, Passwords and other configuration settings\n\nWiFi SSIDs will be setup with the following settings:\n\n```\nphy#1\n        Interface wlan1\n                ifindex 22\n                wdev 0x100000001\n                addr 00:0a:52:08:34:c5\n                ssid RDKB-AP1\n                type AP\n                channel 44 (5220 MHz), width: 80 MHz, center1: 5210 MHz\n                txpower 23.00 dBm\nphy#0\n        Interface wlan0\n                ifindex 21\n                wdev 0x1\n                addr 00:0a:52:08:34:c4\n                ssid RDKB-AP0\n                type AP\n                channel 1 (2412 MHz), width: 20 MHz, center1: 2412 MHz\n                txpower 17.00 dBm\n```\n\nThese correspond to the `private_ssid_` configurations in RDK-B's WiFi configuration.\nOther WiFi SSIDs (such as IoT and Hotspot) are currently disabled due to a driver issue.\n\nThe default WiFi passwords are sourced from `/nvram/wifi_defaults.txt` (sourced from\n`meta-rdk-broadband/recipes-ccsp/ccsp/files/wifi_defaults.txt` inside this repository).\n\nYou can change the WiFi password with these dmcli commands:\n\n```\ndmcli eRT setv Device.WiFi.AccessPoint.1.Security.KeyPassphrase string 'new_wifi_password'\ndmcli eRT setv Device.WiFi.AccessPoint.2.Security.KeyPassphrase string 'new_wifi_password'\ndmcli eRT setv Device.WiFi.ApplyAccessPointSettings bool true true\n```\n\nIn the future there will be a standardized method to derive/source 'default' WiFi credentials\non supported devices.\n\nTo use a cellular modem, you will need to set `dmsb.cellularmanager.profile.default.apn` in the\nPSM database to your operator's internet APN.\n\n**Users of this repository should ensure all default settings (such as passwords) are changed**\n\nNo credentials outside the scope of the gateway are stored inside this repository, any references\nto external services are placeholder/test values only.\n\n# Running the generated image\n\n## QEMU (Arm64 virtualized or emulated)\n\n### Method 1: Yocto runqemu\n\nThe Yocto machine files are setup to boot the VM with `runqemu`.\n\nThis setup is not as flexible as other methods, but it allows quick verification\nthat the built image is working.\n\nNote that you will require `sudo` access for `runqemu` to setup the networking connection\nbetween host and guest.\n\n```\n$ runqemu nographic\n\nmatt@build:/home/matt/rdkb-cmf-arm/build-armefi64-rdk-broadband$ runqemu nographic\nrunqemu - INFO - Running bitbake -e ...\nrunqemu - INFO - Continuing with the following parameters:\nMACHINE: [armefi64-rdk-broadband]\nFSTYPE: [wic.qcow2]\nROOTFS: [/home/matt/rdkb-cmf-arm/build-armefi64-rdk-broadband/tmp/deploy/images/armefi64-rdk-broadband/rdkb-generic-broadband-image_rdk-next_20241029112121.rootfs.wic.qcow2]\nCONFFILE: [/home/matt/rdkb-cmf-arm/build-armefi64-rdk-broadband/tmp/deploy/images/armefi64-rdk-broadband/rdkb-generic-broadband-image_rdk-next_20241029112121.qemuboot.conf]\n...\nU-Boot 2024.07 (Jul 01 2024 - 18:07:18 +0000)\n....\nEFI stub: Booting Linux Kernel...\nEFI stub: Using DTB from configuration table\nEFI stub: Exiting boot services...\n[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]\n[    0.000000] Linux version 5.15.68-yocto-standard (oe-user@oe-host) (aarch64-rdk-linux-gcc (GCC) 11.3.0, GNU ld (GNU Binutils) 2.38.20220708) #1 SMP Wed Sep 21 20:06:51 UTC 2022\n...\nWelcome to RDK (A Yocto Project based Distro) 2.0 (kirkstone)!\n...\nRDK (A Yocto Project based Distro) 2.0 armefi64-rdk-broadband ttyAMA0\n\narmefi64-rdk-broadband login: root (automatic login)\n```\n\nUnder the runqemu configuration, the LAN side interface will be available to the host\nas the `tapX` interface, while the WAN interface will use QEMU's Userspace emulation.\n\n### Method 2: Direct QEMU invocation\n\nYou can use the generated `wic.qcow2` and `u-boot.bin` to invoke QEMU directly.\nThis allows you to customize your QEMU setup for your own environment and requirements.\n\nOn virtualization capable Arm64 hosts you can use KVM for near-native performance.\n\nYou can invoke QEMU like this:\n\n```\n# Copy the QCOW2 image and u-boot.bin from the deploy directory\ncp $HOME/rdkb-cmf-arm/build-armefi64-rdk-broadband/tmp/deploy/images/armefi64-rdk-broadband/{rdk-generic-broadband-image-armefi64-rdk-broadband.wic.qcow2,u-boot.bin} .\n\n# It can be helpful to create a snapshot to quickly revert\n# any changes that are made\nqemu-img create -f qcow2 -b rdk-generic-broadband-image-armefi64-rdk-broadband.wic.qcow2 -F qcow2 rdk.snapshot.qcow2\n# And resize that snapshot to allow space for upgrades\nqemu-img resize rdk.snapshot.qcow2 10G\n\nDISK=${DISK:-rdk.snapshot.qcow2}\nsudo qemu-system-aarch64 -nographic \\\n    -cpu cortex-a53 -machine virt \\\n    -bios u-boot.bin \\\n    -smp 2 -m 1024 \\\n    -device virtio-rng-pci \\\n    -hda \"${DISK}\" \\\n    -netdev tap,id=testlan -net nic,netdev=testlan \\\n    -netdev tap,id=testlan2 -net nic,netdev=testlan2 \\\n    -netdev user,id=testwan -net nic,netdev=testwan \\\n    -device pci-serial\n#using bridge manager:\n# ensure /usr/local/libexec/qemu-bridge-helper is present and executable\n# provide /usr/local/etc/qemu/bridge.conf:\n#     allow br10\n#     allow br100\n\nsudo qemu-system-aarch64 -nographic \\\n    -cpu cortex-a53 -machine virt \\\n    -bios u-boot.bin  \\\n    -smp 2 -m 1024  \\\n    -device virtio-rng-pci  \\\n    -hda \"${DISK}\"  \\\n    -netdev bridge,id=testwan,br=br10 \\\n    -device virtio-net pci,netdev=testwan,mac=52:54:00:2d:6e:99  \\\n    -netdev bridge,id=testlan,br=br100 \\\n    -device virtio-net-pci,netdev=testlan,mac=52:54:00:2d:6e:98  \\\n    -device pci-serial\n```\n\nOn native Arm64 platforms with virtualization, enable KVM by replacing `-cpu cortex-a53` with `-cpu host --enable-kvm`.\n\n### QEMU frontends (UTM.app, virt-manager etc.)\nSee the [doc/virtualization](doc/virtualization) folder for information on using various QEMU frontend programs (like UTM.app and virt-manager).\n\n## Real hardware\nA benefit of the SystemReady architecture is being able to use the same images\non virtual machines and bare-metal hardware.\n\nNote that images generated by this reference layer SHOULD boot on SystemReady compatible\nhardware, but hardware and vendor specific features like LED configurations, hardware\ndataplanes and SoC-specific WiFi integrations are not included in this layer.\n\nThis layer also only generates the board-level firmware for the QEMU reference machine,\nwhile downstream layers should be used to generate the equivalent board firmware.\n\nJust like the VM images, you can write the `wic` image directly to your boot device.\n\n# Development Notes\n\nThis layer is self-contained, it does not depend on any other layers for board support, however,\n`meta-arm` (https://git.yoctoproject.org/meta-arm) has been used as the model for the firmware, QEMU\nand machine setup.\n\nFor development purposes, there is both a \"core\" image type and a RDK-B image type:\n\n* `armefi64`\n   This is the \"base\" machine type that serves as a base. It does not import any RDK packages or\n   configuration. When updating to newer Yocto project versions, use this\n   machine for the initial porting (with Yocto image types like `core-image-minimal`).\n\n* `armefi64-rdk-broadband`\n   This is the RDK-B reference machine which inherits from `armefi64`\n\nWhen adding another machine to the layer, it should inherit from `armefi64-rdk-broadband`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frdkcentral%2Fmeta-rdk-bsp-arm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frdkcentral%2Fmeta-rdk-bsp-arm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frdkcentral%2Fmeta-rdk-bsp-arm/lists"}