Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f372dffe6 |
@@ -1,10 +1,8 @@
|
||||
Limited free support is only available using the online resources of the
|
||||
project on GitHub, and Discord, see <https://github.com/kernelkit/infix>:
|
||||
project on GitHub, and Discord, see <https://github.com/kernelkit>:
|
||||
|
||||
:house: <https://www.kernelkit.org> — home page, blog, news, howto's and tutorials
|
||||
:package: <https://github.com/kernelkit/infix/releases/latest> — latest release
|
||||
:speech_balloon: <https://github.com/orgs/kernelkit/discussions>
|
||||
:bug: <https://github.com/kernelkit/infix/issues>
|
||||
:bug: <https://github.com/kernelkit/infix/issues>
|
||||
|
||||
Support contracts, development of new features, fast-tracking of reviews
|
||||
and contributions, customer branding of Infix, and even customer specific
|
||||
|
||||
@@ -16,7 +16,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Validate release version format
|
||||
id: validate
|
||||
@@ -170,7 +170,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Upload signed artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: signed-infix-${{ steps.validate.outputs.file_version }}
|
||||
path: ${{ steps.download_signed.outputs.signed_filename }}
|
||||
@@ -212,4 +212,4 @@ jobs:
|
||||
---
|
||||
|
||||
**Next Steps:** The signed release can now be distributed with cryptographic verification of authenticity.
|
||||
EOF
|
||||
EOF
|
||||
@@ -19,17 +19,10 @@ jobs:
|
||||
- aarch64_qemu_boot
|
||||
- bpi_r3_sd_boot
|
||||
- bpi_r3_emmc_boot
|
||||
- bpi_r4_sd_boot
|
||||
- bpi_r4_emmc_boot
|
||||
- bpi_r64_sd_boot
|
||||
- bpi_r64_emmc_boot
|
||||
- cn9130_crb_boot
|
||||
- fireant_boot
|
||||
- nanopi_r2s_boot
|
||||
- rpi2_boot
|
||||
- rpi64_boot
|
||||
- sama7g54_ek_emmc_boot
|
||||
- sama7g54_ek_sd_boot
|
||||
env:
|
||||
MAKEFLAGS: -j5
|
||||
steps:
|
||||
@@ -41,7 +34,7 @@ jobs:
|
||||
ls -la ./
|
||||
|
||||
- name: Checkout infix repo
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.branch || github.ref }}
|
||||
clean: true
|
||||
@@ -70,11 +63,24 @@ jobs:
|
||||
|
||||
echo "Building ${defconfig}_defconfig, version ${version}-${rev}, artifact ${archive} ..."
|
||||
|
||||
- uses: kernelkit/actions/cache-restore@v1
|
||||
- name: Restore Cache of dl/
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
target: ${{ matrix.defconfig }}
|
||||
dl-prefix: dl-boot
|
||||
ccache-prefix: ccache-boot
|
||||
path: dl/
|
||||
key: dl-boot-${{ hashFiles('.git/modules/buildroot/HEAD', 'configs/*', 'package/*/*.hash') }}
|
||||
restore-keys: |
|
||||
dl-boot-
|
||||
dl-
|
||||
|
||||
- name: Restore Cache of .ccache/
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: .ccache/
|
||||
key: ccache-boot-${{ matrix.defconfig }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }}
|
||||
restore-keys: |
|
||||
ccache-boot-${{ matrix.defconfig }}-
|
||||
ccache-boot-
|
||||
ccache-
|
||||
|
||||
- name: Configure ${{ matrix.defconfig }}_defconfig
|
||||
run: |
|
||||
@@ -96,7 +102,7 @@ jobs:
|
||||
mv images ${{ steps.vars.outputs.dirname }}
|
||||
tar cfz ${{ steps.vars.outputs.archive }} ${{ steps.vars.outputs.dirname }}/
|
||||
|
||||
- uses: actions/upload-artifact@v7
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: output/${{ steps.vars.outputs.archive }}
|
||||
name: artifact-${{ matrix.defconfig }}
|
||||
@@ -108,7 +114,7 @@ jobs:
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/download-artifact@v7
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: "artifact-*"
|
||||
merge-multiple: true
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
name: Create Images
|
||||
name: Create SD Card & eMMC Images
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
@@ -8,23 +8,22 @@ on:
|
||||
type: choice
|
||||
required: true
|
||||
options:
|
||||
- raspberrypi-rpi2
|
||||
- raspberrypi-rpi64
|
||||
- bananapi-bpi-r3
|
||||
- bananapi-bpi-r4
|
||||
- bananapi-bpi-r64
|
||||
- friendlyarm-nanopi-r2s
|
||||
- microchip-sama7g54-ek
|
||||
- acer-connect-vero-w
|
||||
default: 'raspberrypi-rpi64'
|
||||
use_latest_release:
|
||||
description: 'Use latest release artifacts instead of workflow artifacts'
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
create-image:
|
||||
name: Create images for ${{ inputs.board }}
|
||||
name: Create SD Card Image for ${{ inputs.board }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
clean: true
|
||||
fetch-depth: 0
|
||||
@@ -51,171 +50,268 @@ jobs:
|
||||
mkdir -p output/images
|
||||
mkdir -p build
|
||||
|
||||
- name: Set bootloaders and targets based on board
|
||||
- name: Set bootloader and target based on board
|
||||
run: |
|
||||
arch=
|
||||
targets=
|
||||
bootloader_sdcard=
|
||||
bootloader_emmc=
|
||||
|
||||
case "${{ inputs.board }}" in
|
||||
raspberrypi-rpi2)
|
||||
arch=arm
|
||||
targets="sdcard"
|
||||
bootloader_sdcard=rpi2-boot
|
||||
;;
|
||||
raspberrypi-rpi64)
|
||||
arch=aarch64
|
||||
targets="sdcard"
|
||||
bootloader_sdcard=rpi64-boot
|
||||
echo "BOOTLOADER=rpi64_boot" >> $GITHUB_ENV
|
||||
echo "TARGET=aarch64" >> $GITHUB_ENV
|
||||
echo "BUILD_EMMC=false" >> $GITHUB_ENV
|
||||
;;
|
||||
bananapi-bpi-r3)
|
||||
arch=aarch64
|
||||
targets="sdcard emmc"
|
||||
bootloader_sdcard=bpi-r3-sd-boot
|
||||
bootloader_emmc=bpi-r3-emmc-boot
|
||||
;;
|
||||
bananapi-bpi-r4)
|
||||
arch=aarch64
|
||||
targets="sdcard emmc"
|
||||
bootloader_sdcard=bpi-r4-sd-boot
|
||||
bootloader_emmc=bpi-r4-emmc-boot
|
||||
;;
|
||||
bananapi-bpi-r64)
|
||||
arch=aarch64
|
||||
targets="sdcard emmc"
|
||||
bootloader_sdcard=bpi-r64-sd-boot
|
||||
bootloader_emmc=bpi-r64-emmc-boot
|
||||
;;
|
||||
acer-connect-vero-w)
|
||||
arch=aarch64
|
||||
targets="emmc"
|
||||
bootloader_emmc=bpi-r3-emmc-boot
|
||||
echo "BOOTLOADER_SD=bpi_r3_sd_boot" >> $GITHUB_ENV
|
||||
echo "BOOTLOADER_EMMC=bpi_r3_emmc_boot" >> $GITHUB_ENV
|
||||
echo "TARGET=aarch64" >> $GITHUB_ENV
|
||||
echo "BUILD_EMMC=true" >> $GITHUB_ENV
|
||||
;;
|
||||
friendlyarm-nanopi-r2s)
|
||||
arch=aarch64
|
||||
targets="sdcard"
|
||||
bootloader_sdcard=nanopi-r2s-boot
|
||||
;;
|
||||
microchip-sama7g54-ek)
|
||||
arch=arm
|
||||
targets="sdcard emmc"
|
||||
bootloader_sdcard=sama7g54-ek-sd-boot
|
||||
bootloader_emmc=sama7g54-ek-emmc-boot
|
||||
echo "BOOTLOADER=nanopi_r2s_boot" >> $GITHUB_ENV
|
||||
echo "TARGET=aarch64" >> $GITHUB_ENV
|
||||
echo "BUILD_EMMC=false" >> $GITHUB_ENV
|
||||
;;
|
||||
*)
|
||||
echo "Error: Unknown board ${{ inputs.board }}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "ARCH=$arch" >> $GITHUB_ENV
|
||||
echo "TARGETS=$targets" >> $GITHUB_ENV
|
||||
[ -n "$bootloader_sdcard" ] && echo "BOOTLOADER_SDCARD=$bootloader_sdcard" >> $GITHUB_ENV
|
||||
[ -n "$bootloader_emmc" ] && echo "BOOTLOADER_EMMC=$bootloader_emmc" >> $GITHUB_ENV
|
||||
|
||||
echo "Arch: $arch for board: ${{ inputs.board }}"
|
||||
echo "Targets: $targets"
|
||||
[ -n "$bootloader_sdcard" ] && echo "SD bootloader: $bootloader_sdcard"
|
||||
[ -n "$bootloader_emmc" ] && echo "eMMC bootloader: $bootloader_emmc"
|
||||
echo "Target: $TARGET for board: ${{ inputs.board }}"
|
||||
if [ "$BUILD_EMMC" = "true" ]; then
|
||||
echo "Building both SD and eMMC images"
|
||||
echo "SD Bootloader: $BOOTLOADER_SD"
|
||||
echo "eMMC Bootloader: $BOOTLOADER_EMMC"
|
||||
else
|
||||
echo "Building SD image only"
|
||||
echo "Bootloader: $BOOTLOADER"
|
||||
fi
|
||||
|
||||
- name: Download bootloader artifacts
|
||||
if: ${{ !inputs.use_latest_release }}
|
||||
run: |
|
||||
for target in $TARGETS; do
|
||||
upper=$(printf '%s' "$target" | tr '[:lower:]' '[:upper:]')
|
||||
bootloader_var="BOOTLOADER_${upper}"
|
||||
bootloader="${!bootloader_var}"
|
||||
temp_dir="temp_bootloader_${target}"
|
||||
out_dir="output_${target}/images"
|
||||
# Download from latest bootloader build workflow on main branch
|
||||
gh run list --workflow=build-boot.yml --branch=main --limit=1 --status=success --json databaseId --jq '.[0].databaseId' > latest_boot_run_id
|
||||
BOOT_RUN_ID=$(cat latest_boot_run_id)
|
||||
|
||||
echo "Downloading ${target} bootloader: ${bootloader}"
|
||||
mkdir -p "$out_dir"
|
||||
gh release download latest-boot --pattern "*${bootloader}*" --dir "$temp_dir/"
|
||||
tar -xzf "$temp_dir"/*.tar.gz --strip-components=1 -C "$out_dir/"
|
||||
rm -rf "$temp_dir"
|
||||
if [ "$BUILD_EMMC" = "true" ]; then
|
||||
# Download both SD and eMMC bootloaders for boards that support both
|
||||
echo "Downloading SD bootloader: ${BOOTLOADER_SD}"
|
||||
gh run download ${BOOT_RUN_ID} --name artifact-${BOOTLOADER_SD} --dir temp_bootloader_sd/
|
||||
mkdir -p output_sd/images
|
||||
cd temp_bootloader_sd/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output_sd/images/
|
||||
cd ../
|
||||
rm -rf temp_bootloader_sd/
|
||||
|
||||
echo "${target} bootloader files:"
|
||||
ls -la "$out_dir/"
|
||||
done
|
||||
echo "Downloading eMMC bootloader: ${BOOTLOADER_EMMC}"
|
||||
gh run download ${BOOT_RUN_ID} --name artifact-${BOOTLOADER_EMMC} --dir temp_bootloader_emmc/
|
||||
mkdir -p output_emmc/images
|
||||
cd temp_bootloader_emmc/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output_emmc/images/
|
||||
cd ../
|
||||
rm -rf temp_bootloader_emmc/
|
||||
|
||||
echo "SD bootloader files:"
|
||||
ls -la output_sd/images/
|
||||
echo "eMMC bootloader files:"
|
||||
ls -la output_emmc/images/
|
||||
else
|
||||
# Single bootloader for boards that only support SD
|
||||
gh run download ${BOOT_RUN_ID} --name artifact-${BOOTLOADER} --dir temp_bootloader/
|
||||
|
||||
# Extract bootloader directly to output/images
|
||||
cd temp_bootloader/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output/images/
|
||||
cd ../
|
||||
rm -rf temp_bootloader/
|
||||
|
||||
echo "Bootloader files extracted to output/images:"
|
||||
ls -la output/images/
|
||||
fi
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Download Infix artifacts
|
||||
if: ${{ !inputs.use_latest_release }}
|
||||
run: |
|
||||
# Download from latest Kernelkit Trigger workflow for main branch
|
||||
gh run list --workflow=164295764 --branch=main --limit=1 --status=success --json databaseId --jq '.[0].databaseId' > latest_infix_run_id
|
||||
INFIX_RUN_ID=$(cat latest_infix_run_id)
|
||||
|
||||
gh run download ${INFIX_RUN_ID} --name artifact-${ARCH} --dir temp_infix/
|
||||
if [ "$BUILD_EMMC" = "true" ]; then
|
||||
# Copy Infix artifacts to both SD and eMMC output directories
|
||||
gh run download ${INFIX_RUN_ID} --name artifact-${TARGET} --dir temp_infix/
|
||||
|
||||
for target in $TARGETS; do
|
||||
out_dir="output_${target}/images"
|
||||
mkdir -p "$out_dir"
|
||||
tar -xzf temp_infix/*.tar.gz --strip-components=1 -C "$out_dir/"
|
||||
cd temp_infix/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output_sd/images/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output_emmc/images/
|
||||
cd ../
|
||||
rm -rf temp_infix/
|
||||
|
||||
echo "Infix files extracted to ${out_dir}:"
|
||||
ls -la "$out_dir/"
|
||||
done
|
||||
echo "Infix files extracted to output_sd/images:"
|
||||
ls -la output_sd/images/
|
||||
echo "Infix files extracted to output_emmc/images:"
|
||||
ls -la output_emmc/images/
|
||||
else
|
||||
# Single output directory for SD-only boards
|
||||
gh run download ${INFIX_RUN_ID} --name artifact-${TARGET} --dir temp_infix/
|
||||
|
||||
rm -rf temp_infix/
|
||||
# Extract Infix directly to output/images
|
||||
cd temp_infix/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output/images/
|
||||
cd ../
|
||||
rm -rf temp_infix/
|
||||
|
||||
echo "Infix files extracted to output/images:"
|
||||
ls -la output/images/
|
||||
fi
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Download from latest releases
|
||||
if: ${{ inputs.use_latest_release }}
|
||||
run: |
|
||||
if [ "$BUILD_EMMC" = "true" ]; then
|
||||
# Download both SD and eMMC bootloaders
|
||||
gh release download latest-boot --pattern "*${BOOTLOADER_SD}*" --dir temp_bootloader_sd/
|
||||
mkdir -p output_sd/images
|
||||
cd temp_bootloader_sd/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output_sd/images/
|
||||
cd ../
|
||||
rm -rf temp_bootloader_sd/
|
||||
|
||||
gh release download latest-boot --pattern "*${BOOTLOADER_EMMC}*" --dir temp_bootloader_emmc/
|
||||
mkdir -p output_emmc/images
|
||||
cd temp_bootloader_emmc/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output_emmc/images/
|
||||
cd ../
|
||||
rm -rf temp_bootloader_emmc/
|
||||
|
||||
# Download Infix once and extract to both directories
|
||||
gh release download latest --pattern "*${TARGET}*" --dir temp_infix/
|
||||
cd temp_infix/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output_sd/images/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output_emmc/images/
|
||||
cd ../
|
||||
rm -rf temp_infix/
|
||||
|
||||
echo "SD files extracted to output_sd/images:"
|
||||
ls -la output_sd/images/
|
||||
echo "eMMC files extracted to output_emmc/images:"
|
||||
ls -la output_emmc/images/
|
||||
else
|
||||
# Download latest bootloader release
|
||||
gh release download latest-boot --pattern "*${BOOTLOADER}*" --dir temp_bootloader/
|
||||
cd temp_bootloader/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output/images/
|
||||
cd ../
|
||||
rm -rf temp_bootloader/
|
||||
|
||||
# Download latest Infix release
|
||||
gh release download latest --pattern "*${TARGET}*" --dir temp_infix/
|
||||
cd temp_infix/
|
||||
tar -xzf *.tar.gz --strip-components=1 -C ../output/images/
|
||||
cd ../
|
||||
rm -rf temp_infix/
|
||||
|
||||
echo "All files extracted to output/images:"
|
||||
ls -la output/images/
|
||||
fi
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Verify extracted files
|
||||
run: |
|
||||
for target in $TARGETS; do
|
||||
echo "Files available for ${target} image:"
|
||||
ls -la "output_${target}/images/"
|
||||
if [ "$BUILD_EMMC" = "true" ]; then
|
||||
echo "Files available for SD image:"
|
||||
ls -la output_sd/images/
|
||||
echo ""
|
||||
done
|
||||
echo "Files available for eMMC image:"
|
||||
ls -la output_emmc/images/
|
||||
else
|
||||
echo "Files available for mkimage.sh:"
|
||||
ls -la output/images/
|
||||
echo ""
|
||||
echo "File types:"
|
||||
file output/images/* || true
|
||||
fi
|
||||
|
||||
- name: Create images
|
||||
- name: Create SD card image
|
||||
run: |
|
||||
if [ "$BUILD_EMMC" = "true" ]; then
|
||||
export BINARIES_DIR=$PWD/output_sd/images
|
||||
export BUILD_DIR=$PWD/build
|
||||
export BR2_EXTERNAL_INFIX_PATH=$PWD
|
||||
export RELEASE=""
|
||||
export INFIX_ID="infix"
|
||||
./utils/mkimage.sh -t sdcard ${{ inputs.board }}
|
||||
else
|
||||
export BINARIES_DIR=$PWD/output/images
|
||||
export BUILD_DIR=$PWD/build
|
||||
export BR2_EXTERNAL_INFIX_PATH=$PWD
|
||||
export RELEASE=""
|
||||
export INFIX_ID="infix"
|
||||
./utils/mkimage.sh ${{ inputs.board }}
|
||||
fi
|
||||
|
||||
- name: Create eMMC image
|
||||
if: ${{ env.BUILD_EMMC == 'true' }}
|
||||
run: |
|
||||
export BINARIES_DIR=$PWD/output_emmc/images
|
||||
export BUILD_DIR=$PWD/build
|
||||
export BR2_EXTERNAL_INFIX_PATH=$PWD
|
||||
export RELEASE=""
|
||||
export INFIX_ID="infix"
|
||||
|
||||
for target in $TARGETS; do
|
||||
export BINARIES_DIR=$PWD/output_${target}/images
|
||||
./utils/mkimage.sh -t "$target" ${{ inputs.board }}
|
||||
done
|
||||
./utils/mkimage.sh -t emmc ${{ inputs.board }}
|
||||
|
||||
- name: Verify created images
|
||||
run: |
|
||||
mkdir -p output/images
|
||||
|
||||
for target in $TARGETS; do
|
||||
src_dir="output_${target}/images"
|
||||
found=false
|
||||
|
||||
echo "${target} image:"
|
||||
ls -lh "$src_dir"/*-"$target".img* 2>/dev/null || true
|
||||
|
||||
for img in "$src_dir"/*-"$target".img; do
|
||||
[ -e "$img" ] || continue
|
||||
found=true
|
||||
echo "- $(basename "$img")"
|
||||
file "$img"
|
||||
fdisk -l "$img" 2>/dev/null || true
|
||||
done
|
||||
|
||||
if [ "$found" = false ]; then
|
||||
echo "No ${target} image found matching pattern: *-${target}.img"
|
||||
echo "Available files in ${src_dir}:"
|
||||
ls -la "$src_dir/"
|
||||
exit 1
|
||||
if [ "$BUILD_EMMC" = "true" ]; then
|
||||
echo "SD card image:"
|
||||
ls -lh output_sd/images/*-sdcard.img* 2>/dev/null || true
|
||||
if ls output_sd/images/*-sdcard.img 1> /dev/null 2>&1; then
|
||||
for img in output_sd/images/*-sdcard.img; do
|
||||
echo "- $(basename $img)"
|
||||
file "$img"
|
||||
fdisk -l "$img" 2>/dev/null | head -20
|
||||
done
|
||||
fi
|
||||
|
||||
for artifact in "$src_dir"/*-"$target".img*; do
|
||||
[ -e "$artifact" ] || continue
|
||||
cp "$artifact" output/images/
|
||||
done
|
||||
|
||||
echo ""
|
||||
done
|
||||
echo "eMMC image:"
|
||||
ls -lh output_emmc/images/*-emmc.img* 2>/dev/null || true
|
||||
if ls output_emmc/images/*-emmc.img 1> /dev/null 2>&1; then
|
||||
for img in output_emmc/images/*-emmc.img; do
|
||||
echo "- $(basename $img)"
|
||||
file "$img"
|
||||
fdisk -l "$img" 2>/dev/null | head -20
|
||||
done
|
||||
fi
|
||||
|
||||
# Copy both images to output/images for artifact upload
|
||||
mkdir -p output/images
|
||||
cp output_sd/images/*-sdcard.img* output/images/ 2>/dev/null || true
|
||||
cp output_emmc/images/*-emmc.img* output/images/ 2>/dev/null || true
|
||||
else
|
||||
echo "Contents of output/images after mkimage.sh:"
|
||||
ls -lh output/images/
|
||||
|
||||
# Look for SD card image with pattern: *-sdcard.img
|
||||
if ls output/images/*-sdcard.img 1> /dev/null 2>&1; then
|
||||
echo "Found SD card image(s):"
|
||||
for img in output/images/*-sdcard.img; do
|
||||
echo "- $(basename $img)"
|
||||
file "$img"
|
||||
fdisk -l "$img" 2>/dev/null || true
|
||||
done
|
||||
else
|
||||
echo "No SD card image found matching pattern: *-sdcard.img"
|
||||
echo "Available files:"
|
||||
ls -la output/images/
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
- name: Upload images as artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: images-${{ inputs.board }}
|
||||
path: |
|
||||
@@ -246,27 +342,35 @@ jobs:
|
||||
|
||||
- name: Generate summary
|
||||
run: |
|
||||
cat <<EOF >> $GITHUB_STEP_SUMMARY
|
||||
# Image Build Complete! 🚀
|
||||
if [ "$BUILD_EMMC" = "true" ]; then
|
||||
cat <<EOF >> $GITHUB_STEP_SUMMARY
|
||||
# SD Card & eMMC Image Build Complete! 🚀
|
||||
|
||||
**Board:** ${{ inputs.board }}
|
||||
**Arch:** ${{ env.ARCH }}
|
||||
**Targets:** ${{ env.TARGETS }}
|
||||
**Bootloader Source:** latest-boot release
|
||||
**Infix Source:** Latest workflow run on main
|
||||
|
||||
## Bootloaders
|
||||
$(for target in $TARGETS; do
|
||||
case "$target" in
|
||||
sdcard) bootloader="$BOOTLOADER_SDCARD" ;;
|
||||
emmc) bootloader="$BOOTLOADER_EMMC" ;;
|
||||
esac
|
||||
printf -- '- %s: %s\n' "$target" "$bootloader"
|
||||
done)
|
||||
**Target:** ${{ env.TARGET }}
|
||||
**SD Bootloader:** ${{ env.BOOTLOADER_SD }}
|
||||
**eMMC Bootloader:** ${{ env.BOOTLOADER_EMMC }}
|
||||
**Artifact Source:** ${{ inputs.use_latest_release && 'Latest Release' || 'Latest Workflow Run' }}
|
||||
|
||||
## Created Images
|
||||
$(find output/images/ -name "*.img" -o -name "*.img.bmap" | xargs ls -lh 2>/dev/null | awk '{print "- " $9 " (" $5 ")"}' || echo "- No images found")
|
||||
|
||||
## Download
|
||||
The generated images are available as workflow artifacts above and in the latest-boot release.
|
||||
Both SD card and eMMC images are available as workflow artifacts above and in the latest-boot release.
|
||||
EOF
|
||||
else
|
||||
cat <<EOF >> $GITHUB_STEP_SUMMARY
|
||||
# SD Card Image Build Complete! 🚀
|
||||
|
||||
**Board:** ${{ inputs.board }}
|
||||
**Target:** ${{ env.TARGET }}
|
||||
**Bootloader:** ${{ env.BOOTLOADER }}
|
||||
**Artifact Source:** ${{ inputs.use_latest_release && 'Latest Release' || 'Latest Workflow Run' }}
|
||||
|
||||
## Created Images
|
||||
$(find output/images/ -name "*.img" -o -name "*.img.bmap" | xargs ls -lh 2>/dev/null | awk '{print "- " $9 " (" $5 ")"}' || echo "- No images found")
|
||||
|
||||
## Download
|
||||
The SD card image is available as a workflow artifact above.
|
||||
EOF
|
||||
fi
|
||||
|
||||
@@ -20,16 +20,24 @@ jobs:
|
||||
runs-on: [self-hosted, release]
|
||||
strategy:
|
||||
matrix:
|
||||
target: [aarch64, arm, x86_64]
|
||||
target: [aarch64, x86_64]
|
||||
fail-fast: false
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Cleanup podman state
|
||||
run: |
|
||||
set -x
|
||||
podman ps -a || true
|
||||
podman stop -a || true
|
||||
podman rm -a -f || true
|
||||
podman volume prune -f || true
|
||||
podman system prune -a -f || true
|
||||
podman system migrate || true
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
clean: true
|
||||
submodules: recursive
|
||||
|
||||
- uses: kernelkit/actions/podman-cleanup@v1
|
||||
|
||||
- name: Set Release Variables
|
||||
id: vars
|
||||
run: |
|
||||
@@ -40,10 +48,24 @@ jobs:
|
||||
echo "dir=infix-$target" >> $GITHUB_OUTPUT
|
||||
echo "tgz=infix-$target.tar.gz" >> $GITHUB_OUTPUT
|
||||
|
||||
- uses: kernelkit/actions/cache-restore@v1
|
||||
- name: Restore Cache of dl/
|
||||
if: ${{ inputs.use_cache }}
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
target: ${{ matrix.target }}
|
||||
enabled: ${{ inputs.use_cache }}
|
||||
path: dl/
|
||||
key: dl-${{ hashFiles('.git/modules/buildroot/HEAD', 'configs/*', 'package/*/*.hash') }}
|
||||
restore-keys: |
|
||||
dl-
|
||||
|
||||
- name: Restore Cache of .ccache/
|
||||
if: ${{ inputs.use_cache }}
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: .ccache/
|
||||
key: ccache-${{ matrix.target }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }}
|
||||
restore-keys: |
|
||||
ccache-${{ matrix.target }}-
|
||||
ccache-
|
||||
|
||||
- name: Configure & Build
|
||||
env:
|
||||
@@ -86,12 +108,12 @@ jobs:
|
||||
ln -s ${{ steps.vars.outputs.dir }} images
|
||||
tar cfz ${{ steps.vars.outputs.tgz }} ${{ steps.vars.outputs.dir }}
|
||||
|
||||
- uses: actions/upload-artifact@v7
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: artifact-${{ matrix.target }}
|
||||
path: output/*.tar.gz
|
||||
|
||||
- uses: actions/upload-artifact@v7
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: artifact-disk-image-${{ matrix.target }}
|
||||
path: output/images/*.qcow2
|
||||
|
||||
@@ -78,9 +78,18 @@ jobs:
|
||||
rm -rf ./* || true
|
||||
rm -rf ./.??* || true
|
||||
ls -la ./
|
||||
- name: Cleanup podman state
|
||||
run: |
|
||||
set -x
|
||||
podman ps -a || true
|
||||
podman stop -a || true
|
||||
podman rm -a -f || true
|
||||
podman volume prune -f || true
|
||||
podman system prune -a -f || true
|
||||
podman system migrate || true
|
||||
|
||||
- name: Checkout infix repo
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ env.INFIX_REPO }}
|
||||
ref: ${{ env.INFIX_BRANCH != '' && env.INFIX_BRANCH || github.ref }}
|
||||
@@ -89,8 +98,6 @@ jobs:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.CHECKOUT_TOKEN || github.token }}
|
||||
|
||||
- uses: kernelkit/actions/podman-cleanup@v1
|
||||
|
||||
- name: Run pre-build script
|
||||
if: ${{ inputs.pre_build_script != '' }}
|
||||
run: |
|
||||
@@ -120,9 +127,22 @@ jobs:
|
||||
echo "tgz=${name}-${target}.tar.gz" >> $GITHUB_OUTPUT
|
||||
echo "Building target ${target}_defconfig"
|
||||
|
||||
- uses: kernelkit/actions/cache-restore@v1
|
||||
- name: Restore Cache of dl/
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
target: ${{ env.TARGET }}
|
||||
path: dl/
|
||||
key: dl-${{ hashFiles('.git/modules/buildroot/HEAD', 'configs/*', 'package/*/*.hash') }}
|
||||
restore-keys: |
|
||||
dl-
|
||||
|
||||
- name: Restore Cache of .ccache/
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: .ccache/
|
||||
key: ccache-${{ env.TARGET }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }}
|
||||
restore-keys: |
|
||||
ccache-${{ env.TARGET }}-
|
||||
ccache-
|
||||
|
||||
- name: Configure ${{ env.TARGET }}
|
||||
run: |
|
||||
@@ -133,6 +153,10 @@ jobs:
|
||||
podman rm -af || true
|
||||
pkill -9 -f rootlessport || true
|
||||
|
||||
- name: Unit Test ${{ env.TARGET }}
|
||||
run: |
|
||||
make test-unit
|
||||
|
||||
- name: Prepare parallel build
|
||||
id: parallel
|
||||
run: |
|
||||
@@ -178,7 +202,7 @@ jobs:
|
||||
ln -s ${{ steps.vars.outputs.dir }} images
|
||||
tar cfz ${{ steps.vars.outputs.tgz }} ${{ steps.vars.outputs.dir }}
|
||||
|
||||
- uses: actions/upload-artifact@v7
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: output/${{ steps.vars.outputs.tgz }}
|
||||
name: artifact-${{ env.TARGET }}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
name: Check Kernel 6.18 Release
|
||||
name: Check Kernel 6.12 Release
|
||||
|
||||
on:
|
||||
schedule:
|
||||
@@ -12,17 +12,17 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Check out infix repository
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.KERNEL_UPDATE_TOKEN }}
|
||||
|
||||
- name: Fetch kernel.org and check for 6.18 release
|
||||
- name: Fetch kernel.org and check for 6.12 release
|
||||
id: check
|
||||
run: |
|
||||
set -e -o pipefail
|
||||
# Fetch the kernel.org frontpage and extract 6.18 version
|
||||
CURRENT_VERSION=$(curl -s https://www.kernel.org/ | grep -oP '6\.18\.\d+' | head -n1)
|
||||
# Fetch the kernel.org frontpage and extract 6.12 version
|
||||
CURRENT_VERSION=$(curl -s https://www.kernel.org/ | grep -oP '6\.12\.\d+' | head -n1)
|
||||
|
||||
if [ -z "$CURRENT_VERSION" ]; then
|
||||
echo "Failed to fetch kernel version"
|
||||
@@ -30,7 +30,7 @@ jobs:
|
||||
fi
|
||||
|
||||
echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
|
||||
echo "Current 6.18 kernel version: $CURRENT_VERSION"
|
||||
echo "Current 6.12 kernel version: $CURRENT_VERSION"
|
||||
|
||||
# Get the version from infix defconfig
|
||||
INFIX_VERSION=$(grep 'BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE=' configs/aarch64_defconfig | cut -d'"' -f2)
|
||||
@@ -47,7 +47,7 @@ jobs:
|
||||
echo "PR already exists for kernel $CURRENT_VERSION, skipping"
|
||||
else
|
||||
echo "new_release=true" >> $GITHUB_OUTPUT
|
||||
echo "🎉 New 6.18 kernel released: $CURRENT_VERSION (infix version: $INFIX_VERSION)"
|
||||
echo "🎉 New 6.12 kernel released: $CURRENT_VERSION (infix version: $INFIX_VERSION)"
|
||||
fi
|
||||
else
|
||||
echo "new_release=false" >> $GITHUB_OUTPUT
|
||||
@@ -99,11 +99,11 @@ jobs:
|
||||
BRANCH_NAME: ${{ steps.branch.outputs.name }}
|
||||
run: |
|
||||
set -e -o pipefail
|
||||
./utils/kernel-upgrade.sh linux 6.18 "$BRANCH_NAME"
|
||||
./utils/kernel-upgrade.sh linux "$BRANCH_NAME"
|
||||
|
||||
- name: Create pull request
|
||||
if: steps.check.outputs.new_release == 'true'
|
||||
uses: actions/github-script@v8
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
github-token: ${{ secrets.KERNEL_UPDATE_TOKEN }}
|
||||
script: |
|
||||
|
||||
@@ -8,15 +8,13 @@ on:
|
||||
env:
|
||||
PROJECT_NAME: Infix
|
||||
CONTACT_EMAIL: troglobit@gmail.com
|
||||
LIBYANG_VERSION: 4.2.2
|
||||
SYSREPO_VERSION: 4.2.10
|
||||
|
||||
jobs:
|
||||
coverity:
|
||||
if: ${{github.repository_owner == 'kernelkit'}}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/checkout@v4
|
||||
- name: Fetch latest Coverity Scan MD5
|
||||
id: var
|
||||
env:
|
||||
@@ -27,7 +25,7 @@ jobs:
|
||||
-O coverity-latest.tar.gz.md5
|
||||
echo "md5=$(cat coverity-latest.tar.gz.md5)" | tee -a $GITHUB_OUTPUT
|
||||
|
||||
- uses: actions/cache@v5
|
||||
- uses: actions/cache@v4
|
||||
id: cache
|
||||
with:
|
||||
path: coverity-latest.tar.gz
|
||||
@@ -57,24 +55,16 @@ jobs:
|
||||
sudo apt-get -y update
|
||||
sudo apt-get -y install pkg-config libjansson-dev libev-dev \
|
||||
libcrypt-dev libglib2.0-dev libpcre2-dev \
|
||||
libuev-dev libavahi-client-dev
|
||||
libuev-dev
|
||||
|
||||
- name: Build dependencies
|
||||
run: |
|
||||
git clone -b v${LIBYANG_VERSION} --depth 1 https://github.com/CESNET/libyang.git
|
||||
for p in patches/libyang/${LIBYANG_VERSION}/*.patch; do
|
||||
git -C libyang apply < "$p"
|
||||
done
|
||||
git clone https://github.com/CESNET/libyang.git
|
||||
mkdir libyang/build
|
||||
(cd libyang/build && cmake .. && make all && sudo make install)
|
||||
|
||||
git clone -b v${SYSREPO_VERSION} --depth 1 https://github.com/sysrepo/sysrepo.git
|
||||
for p in patches/sysrepo/${SYSREPO_VERSION}/*.patch; do
|
||||
git -C sysrepo apply < "$p"
|
||||
done
|
||||
git clone https://github.com/sysrepo/sysrepo.git
|
||||
mkdir sysrepo/build
|
||||
(cd sysrepo/build && cmake .. && make all && sudo make install)
|
||||
|
||||
git clone https://github.com/troglobit/libite.git
|
||||
(cd libite && ./autogen.sh && ./configure && make && sudo make install)
|
||||
make dep
|
||||
@@ -98,7 +88,7 @@ jobs:
|
||||
https://scan.coverity.com/builds?project=${PROJECT_NAME}
|
||||
|
||||
- name: Upload build.log
|
||||
uses: actions/upload-artifact@v7
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: coverity-build.log
|
||||
path: cov-int/build-log.txt
|
||||
|
||||
@@ -24,12 +24,12 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v6
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.x'
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ jobs:
|
||||
mtools
|
||||
|
||||
- name: Checkout infix repo
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ github.repository }}
|
||||
ref: ${{ github.ref }}
|
||||
@@ -77,7 +77,7 @@ jobs:
|
||||
ln -s Infix-x86_64 images
|
||||
tar cfz Infix-x86_64.tar.gz Infix-x86_64
|
||||
|
||||
- uses: actions/upload-artifact@v7
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: output/Infix-x86_64.tar.gz
|
||||
name: artifact-x86_64
|
||||
|
||||
@@ -44,11 +44,23 @@ jobs:
|
||||
checkout:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: kernelkit/actions/cache-restore@v1
|
||||
- uses: actions/checkout@v4
|
||||
- name: Restore Cache of dl/
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
target: x86_64
|
||||
dl-prefix: dl-netconf
|
||||
path: dl/
|
||||
key: dl-netconf-${{ hashFiles('.git/modules/buildroot/HEAD', 'configs/*', 'package/*/*.hash') }}
|
||||
restore-keys: |
|
||||
dl-netconf-
|
||||
dl-
|
||||
- name: Restore Cache of .ccache/
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: .ccache/
|
||||
key: ccache-x86_64-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }}
|
||||
restore-keys: |
|
||||
ccache-x86_64-
|
||||
ccache-
|
||||
- name: Disk inventory (2/2) ...
|
||||
run: |
|
||||
echo "df -h ========================================================================="
|
||||
|
||||
@@ -48,12 +48,20 @@ jobs:
|
||||
contents: write
|
||||
discussions: write
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Cleanup podman state
|
||||
run: |
|
||||
set -x
|
||||
podman ps -a || true
|
||||
podman stop -a || true
|
||||
podman rm -a -f || true
|
||||
podman volume prune -f || true
|
||||
podman system prune -a -f || true
|
||||
podman system migrate || true
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: 'true'
|
||||
|
||||
- uses: kernelkit/actions/podman-cleanup@v1
|
||||
|
||||
- name: Set Release Variables
|
||||
id: rel
|
||||
run: |
|
||||
@@ -78,7 +86,7 @@ jobs:
|
||||
echo "pre=${{ steps.rel.outputs.pre }}"
|
||||
echo "latest=${{ steps.rel.outputs.latest }}"
|
||||
|
||||
- uses: actions/download-artifact@v7
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: "artifact-*"
|
||||
merge-multiple: true
|
||||
@@ -96,7 +104,11 @@ jobs:
|
||||
|
||||
- name: Extract ChangeLog entry ...
|
||||
run: |
|
||||
cat doc/ChangeLog.md | ./utils/extract-changelog.sh > release.md
|
||||
awk '/^-----*$/{if (x == 1) exit; x=1;next}x' doc/ChangeLog.md \
|
||||
|head -n -1 > release.md
|
||||
echo "" >> release.md
|
||||
echo "> [!TIP]" >> release.md
|
||||
echo "> **Try Infix in GNS3!** Download the appliance from the [GNS3 Marketplace](https://gns3.com/marketplace/appliances/infix) to test Infix in a virtual network environment without hardware." >> release.md
|
||||
cat release.md
|
||||
|
||||
- uses: ncipollo/release-action@v1
|
||||
|
||||
@@ -43,11 +43,6 @@ on:
|
||||
type: string
|
||||
default: ''
|
||||
description: 'Optional script to run after checkout (for spin customization)'
|
||||
release:
|
||||
required: false
|
||||
type: string
|
||||
default: ''
|
||||
description: 'Release version (e.g. v26.04.0), sets INFIX_RELEASE so make test finds versioned artifacts'
|
||||
secrets:
|
||||
CHECKOUT_TOKEN:
|
||||
required: false
|
||||
@@ -65,8 +60,18 @@ jobs:
|
||||
name: Regression Test ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.name || inputs.name }} ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.target || inputs.target }}
|
||||
runs-on: [self-hosted, regression]
|
||||
steps:
|
||||
- name: Cleanup podman state
|
||||
run: |
|
||||
set -x
|
||||
podman ps -a || true
|
||||
podman stop -a || true
|
||||
podman rm -a -f || true
|
||||
podman volume prune -f || true
|
||||
podman system prune -a -f || true
|
||||
podman system migrate || true
|
||||
|
||||
- name: Checkout infix repo
|
||||
uses: actions/checkout@v6
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ env.INFIX_REPO }}
|
||||
ref: ${{ env.INFIX_BRANCH != '' && env.INFIX_BRANCH || github.ref }}
|
||||
@@ -75,8 +80,6 @@ jobs:
|
||||
submodules: recursive
|
||||
token: ${{ secrets.CHECKOUT_TOKEN || github.token }}
|
||||
|
||||
- uses: kernelkit/actions/podman-cleanup@v1
|
||||
|
||||
- name: Run pre-test script
|
||||
if: ${{ inputs.pre_test_script != '' }}
|
||||
run: |
|
||||
@@ -98,7 +101,7 @@ jobs:
|
||||
run: |
|
||||
make ${{ env.TARGET }}_defconfig
|
||||
|
||||
- uses: actions/download-artifact@v7
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: "artifact-*"
|
||||
merge-multiple: true
|
||||
@@ -110,15 +113,12 @@ jobs:
|
||||
|
||||
ls -l
|
||||
mkdir -p output
|
||||
tarfile=$(ls ${name}-${target}*.tar.gz | head -1)
|
||||
mv "$tarfile" output/
|
||||
mv ${name}-${target}.tar.gz output/
|
||||
cd output/
|
||||
tar xf "$tarfile"
|
||||
ln -s "${tarfile%.tar.gz}" images
|
||||
tar xf ${name}-${target}.tar.gz
|
||||
ln -s ${name}-${target} images
|
||||
|
||||
- name: Regression Test ${{ env.TARGET }}
|
||||
env:
|
||||
INFIX_RELEASE: ${{ inputs.release }}
|
||||
run: |
|
||||
if [ -n "$NINEPM_CONF" ]; then
|
||||
export NINEPM_PROJ_CONFIG="${GITHUB_WORKSPACE}/$NINEPM_CONF"
|
||||
@@ -139,7 +139,7 @@ jobs:
|
||||
make test-dir="$(pwd)/$TEST_PATH" test-report
|
||||
|
||||
- name: Upload Test Report as Artifact
|
||||
uses: actions/upload-artifact@v7
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: test-report
|
||||
path: output/images/test-report.pdf
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
name: CI
|
||||
name: Kernelkit Trigger
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
@@ -28,7 +28,6 @@ jobs:
|
||||
outputs:
|
||||
x86_64_target: ${{ steps.set-targets.outputs.x86_64_target }}
|
||||
aarch64_target: ${{ steps.set-targets.outputs.aarch64_target }}
|
||||
arm_target: ${{ steps.set-targets.outputs.arm_target }}
|
||||
steps:
|
||||
- run: |
|
||||
echo "Triggering build, logging meta data ..."
|
||||
@@ -44,40 +43,25 @@ jobs:
|
||||
| grep -q "ci:main"; then
|
||||
echo "x86_64_target=x86_64_minimal" >> $GITHUB_OUTPUT
|
||||
echo "aarch64_target=aarch64_minimal" >> $GITHUB_OUTPUT
|
||||
echo "arm_target=arm_minimal" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "x86_64_target=x86_64" >> $GITHUB_OUTPUT
|
||||
echo "aarch64_target=aarch64" >> $GITHUB_OUTPUT
|
||||
echo "arm_target=arm" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
unit-test:
|
||||
needs: check-trigger
|
||||
uses: ./.github/workflows/unit-test.yml
|
||||
with:
|
||||
name: "infix"
|
||||
target: ${{ needs.check-trigger.outputs.x86_64_target }}
|
||||
|
||||
build-x86_64:
|
||||
needs: [check-trigger, unit-test]
|
||||
needs: check-trigger
|
||||
uses: ./.github/workflows/build.yml
|
||||
with:
|
||||
name: "infix"
|
||||
target: ${{ needs.check-trigger.outputs.x86_64_target }}
|
||||
|
||||
build-aarch64:
|
||||
needs: [check-trigger, unit-test]
|
||||
needs: check-trigger
|
||||
uses: ./.github/workflows/build.yml
|
||||
with:
|
||||
name: "infix"
|
||||
target: ${{ needs.check-trigger.outputs.aarch64_target }}
|
||||
|
||||
build-arm:
|
||||
needs: [check-trigger, unit-test]
|
||||
uses: ./.github/workflows/build.yml
|
||||
with:
|
||||
name: "infix"
|
||||
target: ${{ needs.check-trigger.outputs.arm_target }}
|
||||
|
||||
test-run-x86_64:
|
||||
needs: [check-trigger, build-x86_64]
|
||||
uses: ./.github/workflows/test.yml
|
||||
|
||||
@@ -1,116 +0,0 @@
|
||||
name: unit-test
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
target:
|
||||
description: "Build target (e.g. aarch64 or aarch64_minimal)"
|
||||
default: "x86_64"
|
||||
type: string
|
||||
parallel:
|
||||
description: 'Massive parallel build of each image'
|
||||
default: true
|
||||
type: boolean
|
||||
name:
|
||||
description: "Name (for spin overrides)"
|
||||
default: "infix"
|
||||
type: string
|
||||
infix_repo:
|
||||
description: 'Repo to checkout (for spin overrides)'
|
||||
default: kernelkit/infix
|
||||
type: string
|
||||
infix_branch:
|
||||
description: 'Branch/tag/commit to checkout (for spin overrides)'
|
||||
default: ''
|
||||
type: string
|
||||
|
||||
workflow_call:
|
||||
inputs:
|
||||
target:
|
||||
required: true
|
||||
type: string
|
||||
name:
|
||||
required: true
|
||||
type: string
|
||||
infix_repo:
|
||||
required: false
|
||||
type: string
|
||||
default: kernelkit/infix
|
||||
infix_branch:
|
||||
required: false
|
||||
type: string
|
||||
default: ''
|
||||
description: 'Branch/tag/commit to checkout (for spin overrides). Defaults to github.ref if not specified'
|
||||
parallel:
|
||||
required: false
|
||||
type: boolean
|
||||
default: true
|
||||
pre_build_script:
|
||||
required: false
|
||||
type: string
|
||||
default: ''
|
||||
description: 'Optional script to run after checkout (for spin customization)'
|
||||
secrets:
|
||||
CHECKOUT_TOKEN:
|
||||
required: false
|
||||
description: 'Token for cross-repository access'
|
||||
|
||||
env:
|
||||
NAME: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.name || inputs.name }}
|
||||
TARGET: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.target || inputs.target }}
|
||||
INFIX_REPO: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.infix_repo || inputs.infix_repo }}
|
||||
INFIX_BRANCH: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.infix_branch || inputs.infix_branch }}
|
||||
|
||||
jobs:
|
||||
unit-tests:
|
||||
name: Build ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.name || inputs.name }} ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.target || inputs.target }}
|
||||
runs-on: [ self-hosted, latest ]
|
||||
env:
|
||||
PARALLEL: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.parallel == 'true' || github.event_name != 'workflow_dispatch' && inputs.parallel == true }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
steps:
|
||||
- name: Cleanup Build Folder
|
||||
run: |
|
||||
ls -la ./
|
||||
rm -rf ./* || true
|
||||
rm -rf ./.??* || true
|
||||
ls -la ./
|
||||
|
||||
- name: Checkout infix repo
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
repository: ${{ env.INFIX_REPO }}
|
||||
ref: ${{ env.INFIX_BRANCH != '' && env.INFIX_BRANCH || github.ref }}
|
||||
clean: true
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
token: ${{ secrets.CHECKOUT_TOKEN || github.token }}
|
||||
|
||||
- uses: kernelkit/actions/podman-cleanup@v1
|
||||
|
||||
- name: Run pre-build script
|
||||
if: ${{ inputs.pre_build_script != '' }}
|
||||
run: |
|
||||
cat > ./pre-build.sh << 'EOF'
|
||||
${{ inputs.pre_build_script }}
|
||||
EOF
|
||||
chmod +x ./pre-build.sh
|
||||
bash ./pre-build.sh
|
||||
|
||||
- uses: kernelkit/actions/cache-restore@v1
|
||||
with:
|
||||
target: ${{ env.TARGET }}
|
||||
|
||||
- name: Configure ${{ env.TARGET }}
|
||||
run: |
|
||||
make ${{ env.TARGET }}_defconfig
|
||||
|
||||
- name: Cleanup stale containers and ports
|
||||
run: |
|
||||
podman rm -af || true
|
||||
pkill -9 -f rootlessport || true
|
||||
|
||||
- name: Unit Test ${{ env.TARGET }}
|
||||
run: |
|
||||
make test-unit
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/download-artifact@v6
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
pattern: "artifact-*"
|
||||
merge-multiple: true
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
*~
|
||||
.claude
|
||||
.gdb_history
|
||||
.claude
|
||||
AGENTS.md
|
||||
/.backup
|
||||
/.ccache
|
||||
/dl
|
||||
|
||||
@@ -9,10 +9,8 @@ O ?= output
|
||||
# otherwise treat it as relative to ./buildroot.
|
||||
override O := $(if $(filter /%,$O),$O,$(CURDIR)/$O)
|
||||
|
||||
config := $(O)/.config
|
||||
bmake = $(MAKE) -C buildroot O=$(O) $1
|
||||
SNIPPETS_DIR := $(CURDIR)/configs/snippets
|
||||
MERGE_CONFIG := $(CURDIR)/buildroot/support/kconfig/merge_config.sh
|
||||
config := $(O)/.config
|
||||
bmake = $(MAKE) -C buildroot O=$(O) $1
|
||||
|
||||
|
||||
all: $(config) buildroot/Makefile
|
||||
@@ -28,23 +26,6 @@ $(config):
|
||||
@echo "'make <board>_defconfig' before building an image."
|
||||
@exit 1
|
||||
|
||||
apply-%: $(SNIPPETS_DIR)/%.conf | $(config)
|
||||
@KCONFIG_CONFIG=$(config) $(MERGE_CONFIG) -m $(config) $<
|
||||
@+$(call bmake,olddefconfig)
|
||||
@echo "Applied snippet: $<"
|
||||
|
||||
list-snippets:
|
||||
@echo "Available snippets (use 'make apply-<name>'):"
|
||||
@ls $(SNIPPETS_DIR)/*.conf 2>/dev/null | sed 's|.*/||; s|\.conf$$||; s|^| |'
|
||||
|
||||
dev: | $(config)
|
||||
@for s in $(SNIPPETS_DIR)/*.conf; do \
|
||||
KCONFIG_CONFIG=$(config) $(MERGE_CONFIG) -m $(config) $$s; \
|
||||
echo "Applied snippet: $$s"; \
|
||||
done
|
||||
@+$(call bmake,olddefconfig)
|
||||
@+$(call bmake,all)
|
||||
|
||||
%: | buildroot/Makefile
|
||||
@+$(call bmake,$@)
|
||||
|
||||
@@ -63,4 +44,4 @@ test:
|
||||
buildroot/Makefile:
|
||||
@git submodule update --init
|
||||
|
||||
.PHONY: all check coverity dep test cyclonedx list-snippets dev
|
||||
.PHONY: all check coverity dep test cyclonedx
|
||||
|
||||
@@ -16,12 +16,10 @@ if something goes wrong. Deploy once, trust forever.
|
||||
|
||||
**🤝 Friendly**
|
||||
Actually easy to use. Auto-generated CLI from standard YANG models comes
|
||||
with built-in help for every command — just hit <kbd>?</kbd> or
|
||||
<kbd>TAB</kbd> for context-aware assistance.
|
||||
|
||||
Familiar NETCONF & RESTCONF APIs and [comprehensive documentation][4]
|
||||
mean you're never stuck. Whether you're learning networking or managing
|
||||
enterprise infrastructure.
|
||||
with built-in help for every command — just hit `?` or TAB for
|
||||
context-aware assistance. Familiar NETCONF/RESTCONF APIs and
|
||||
[comprehensive documentation][4] mean you're never stuck. Whether
|
||||
you're learning networking or managing enterprise infrastructure.
|
||||
|
||||
**🛡️ Secure**
|
||||
Built with security as a foundation, not an afterthought. Minimal
|
||||
@@ -55,24 +53,27 @@ your device, your rules.
|
||||
Consistent tooling from development to production deployment.
|
||||
How about a digital twin using raw Qemu or [GNS3](https://gns3.com/infix)!
|
||||
|
||||
## Quick Example
|
||||
## See It In Action
|
||||
|
||||
Configure an interface in seconds - the CLI guides you with built-in help:
|
||||
|
||||
<pre><code>admin@infix-12-34-56:/> <b>configure</b>
|
||||
admin@infix-12-34-56:/config/> <b>edit interface eth0</b>
|
||||
admin@infix-12-34-56:/config/interface/eth0/> <b>set ipv4</b> <kbd>TAB</kbd>
|
||||
address autoconf bind-ni-name dhcp
|
||||
enabled forwarding mtu neighbor
|
||||
admin@infix-12-34-56:/config/interface/eth0/> <b>set ipv4 address 192.168.2.200 prefix-length 24</b>
|
||||
admin@infix-12-34-56:/config/interface/eth0/> <b>show</b>
|
||||
<details><summary><b>Click Here for an example CLI Session</b></summary>
|
||||
|
||||
```bash
|
||||
admin@infix-12-34-56:/> configure
|
||||
admin@infix-12-34-56:/config/> edit interface eth0
|
||||
admin@infix-12-34-56:/config/interface/eth0/> set ipv4 <TAB>
|
||||
address autoconf bind-ni-name enabled
|
||||
forwarding mtu neighbor
|
||||
admin@infix-12-34-56:/config/interface/eth0/> set ipv4 address 192.168.2.200 prefix-length 24
|
||||
admin@infix-12-34-56:/config/interface/eth0/> show
|
||||
type ethernet;
|
||||
ipv4 {
|
||||
address 192.168.2.200 {
|
||||
prefix-length 24;
|
||||
}
|
||||
}
|
||||
admin@infix-12-34-56:/config/interface/eth0/> <b>diff</b>
|
||||
admin@infix-12-34-56:/config/interface/eth0/> diff
|
||||
interfaces {
|
||||
interface eth0 {
|
||||
+ ipv4 {
|
||||
@@ -82,23 +83,25 @@ interfaces {
|
||||
+ }
|
||||
}
|
||||
}
|
||||
admin@infix-12-34-56:/config/interface/eth0/> <b>leave</b>
|
||||
admin@infix-12-34-56:/> <b>show interfaces</b>
|
||||
<u>INTERFACE PROTOCOL STATE DATA </u>
|
||||
lo ethernet UP 00:00:00:00:00:00
|
||||
ipv4 127.0.0.1/8 (static)
|
||||
ipv6 ::1/128 (static)
|
||||
admin@infix-12-34-56:/config/interface/eth0/> leave
|
||||
admin@infix-12-34-56:/> show interfaces
|
||||
INTERFACE PROTOCOL STATE DATA
|
||||
eth0 ethernet UP 52:54:00:12:34:56
|
||||
ipv4 192.168.2.200/24 (static)
|
||||
ipv6 fe80::5054:ff:fe12:3456/64 (link-layer)
|
||||
admin@infix-12-34-56:/> <b>copy running startup</b>
|
||||
</code></pre>
|
||||
lo ethernet UP 00:00:00:00:00:00
|
||||
ipv4 127.0.0.1/8 (static)
|
||||
ipv6 ::1/128 (static)
|
||||
admin@infix-12-34-56:/> copy running-config startup-config
|
||||
```
|
||||
|
||||
Notice how <kbd>TAB</kbd> completion shows available options, `show`
|
||||
displays current config, and `diff` shows exactly what changed before
|
||||
you commit your changes with the `leave` command.
|
||||
Notice how TAB completion shows available options, `show` displays
|
||||
current config, and `diff` shows exactly what changed before you
|
||||
commit your changes with the `leave` command.
|
||||
|
||||
For more information, see [CLI documentation][3].
|
||||
</details>
|
||||
|
||||
> [Full CLI documentation →][3]
|
||||
|
||||
## Get Started
|
||||
|
||||
@@ -108,13 +111,12 @@ containers for any custom functionality you need.
|
||||
|
||||
### Supported Platforms
|
||||
|
||||
- **Raspberry Pi 2B/3B/4B/CM4** - Perfect for home labs, learning, and prototyping
|
||||
- **Raspberry Pi 4B** - Perfect for home labs, learning, and prototyping
|
||||
- **Banana Pi-R3** - Your next home router and gateway
|
||||
- **NanoPi R2S** - Compact dual-port router in a tiny package
|
||||
- **x86_64** - Run in VMs or on mini PCs for development and testing
|
||||
- **Marvell CN9130 CRB, EspressoBIN** - High-performance ARM64 platforms
|
||||
- **Microchip SparX-5i** - Enterprise switching capabilities
|
||||
- **Microchip SAMA7G54-EK** - ARM Cortex-A7
|
||||
- **NXP i.MX8MP EVK** - Highly capable ARM64 SoC
|
||||
- **StarFive VisionFive2** - RISC-V architecture support
|
||||
|
||||
@@ -168,13 +170,13 @@ APIs.
|
||||
[0]: https://www.kernel.org
|
||||
[1]: https://buildroot.org/ "Buildroot Homepage"
|
||||
[2]: https://www.sysrepo.org/ "Sysrepo Homepage"
|
||||
[3]: https://www.kernelkit.org/infix/latest/cli/introduction/
|
||||
[4]: https://www.kernelkit.org/infix/
|
||||
[5]: https://github.com/kernelkit/infix/releases/latest
|
||||
[3]: https://kernelkit.org/infix/latest/cli/introduction/
|
||||
[4]: https://kernelkit.org/infix/
|
||||
[5]: https://github.com/kernelkit/infix/releases
|
||||
[Latest Build]: https://github.com/kernelkit/infix/releases/tag/latest "Latest build"
|
||||
[License]: https://en.wikipedia.org/wiki/GPL_license
|
||||
[License Badge]: https://img.shields.io/badge/License-GPL%20v2-blue.svg
|
||||
[Release]: https://github.com/kernelkit/infix/releases/latest
|
||||
[Release]: https://github.com/kernelkit/infix/releases
|
||||
[Release Badge]: https://img.shields.io/github/v/release/kernelkit/infix
|
||||
[GitHub]: https://github.com/kernelkit/infix/actions/workflows/build.yml/
|
||||
[GitHub Status]: https://github.com/kernelkit/infix/actions/workflows/build.yml/badge.svg
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
menu "Board Support"
|
||||
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/board/arm/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch32/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/board/riscv64/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/board/x86_64/Config.in"
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
Board Support
|
||||
=============
|
||||
|
||||
The board support for an architecture always starts with Qemu support,
|
||||
this is what each `linux_defconfig` at the very least sets up. Then
|
||||
each `$BR2_ARCH` has additional BSPs, e.g., Banana Pi BPI-R3.
|
||||
|
||||
The `board/` directory is matched with the `configs/*_defconfigs` and
|
||||
the only execption is `board/common/`, which holds all shared files for
|
||||
Infix builds.
|
||||
|
||||
Each `board/$BR2_ARCH/` can then have vendor/product sub-directories
|
||||
for the BSPs which may contain "fixups" to the base kernel config and
|
||||
any additional device tree files that should be included as well.
|
||||
|
||||
To rebuild a board-specific package, e.g. NanoPi R2S:
|
||||
|
||||
make friendlyarm-nanopi-r2s-rebuild all
|
||||
@@ -0,0 +1,5 @@
|
||||
if BR2_arm
|
||||
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch32/raspberrypi-rpi2/Config.in"
|
||||
|
||||
endif
|
||||
@@ -1,8 +1,7 @@
|
||||
Arm 32-bit
|
||||
==========
|
||||
aarch32
|
||||
=======
|
||||
|
||||
Board Specific Documentation
|
||||
----------------------------
|
||||
|
||||
- [Microchip SAMA7G54-EK (32-bit)](microchip-sama7g54-ek/)
|
||||
- [Raspberry Pi 2 Model B (32-bit)](raspberrypi-rpi2/)
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -1,19 +1,20 @@
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_AUDIT=y
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_BPF_SYSCALL=y
|
||||
CONFIG_BPF_JIT=y
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
CONFIG_TASKSTATS=y
|
||||
CONFIG_TASK_DELAY_ACCT=y
|
||||
CONFIG_TASK_XACCT=y
|
||||
CONFIG_TASK_IO_ACCOUNTING=y
|
||||
# CONFIG_CPU_ISOLATION is not set
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_LOG_BUF_SHIFT=18
|
||||
CONFIG_MEMCG=y
|
||||
CONFIG_BLK_CGROUP=y
|
||||
CONFIG_CFS_BANDWIDTH=y
|
||||
@@ -30,15 +31,23 @@ CONFIG_SCHED_AUTOGROUP=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_PROFILING=y
|
||||
# CONFIG_ARM_ERRATA_643719 is not set
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_ARCH_MULTI_V6=y
|
||||
CONFIG_ARCH_MULTI_V7=y
|
||||
CONFIG_ARCH_VIRT=y
|
||||
CONFIG_ARCH_BCM=y
|
||||
CONFIG_ARCH_BCM2835=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=4
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
|
||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
|
||||
CONFIG_CPUFREQ_DT=y
|
||||
CONFIG_ARM_RASPBERRYPI_CPUFREQ=y
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_VFP=y
|
||||
CONFIG_NEON=y
|
||||
CONFIG_KERNEL_MODE_NEON=y
|
||||
@@ -50,11 +59,7 @@ CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_ZSWAP=y
|
||||
CONFIG_ZSWAP_DEFAULT_ON=y
|
||||
CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
# CONFIG_BALLOON_COMPACTION is not set
|
||||
CONFIG_KSM=y
|
||||
CONFIG_CMA=y
|
||||
CONFIG_NET=y
|
||||
@@ -73,6 +78,7 @@ CONFIG_IP_MROUTE=y
|
||||
CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
|
||||
CONFIG_IP_PIMSM_V1=y
|
||||
CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_NET_IPVTI=m
|
||||
CONFIG_NET_FOU_IP_TUNNELS=y
|
||||
CONFIG_IPV6_SIT=m
|
||||
@@ -88,31 +94,12 @@ CONFIG_BRIDGE_NETFILTER=y
|
||||
CONFIG_NETFILTER_NETLINK_QUEUE=y
|
||||
CONFIG_NETFILTER_NETLINK_LOG=y
|
||||
CONFIG_NF_CONNTRACK=y
|
||||
CONFIG_NF_CONNTRACK_ZONES=y
|
||||
CONFIG_NF_CONNTRACK_PROCFS=y
|
||||
CONFIG_NF_CONNTRACK_EVENTS=y
|
||||
CONFIG_NF_CONNTRACK_TIMEOUT=y
|
||||
CONFIG_NF_CONNTRACK_TIMESTAMP=y
|
||||
CONFIG_NF_CONNTRACK_AMANDA=y
|
||||
CONFIG_NF_CONNTRACK_FTP=y
|
||||
CONFIG_NF_CONNTRACK_H323=y
|
||||
CONFIG_NF_CONNTRACK_IRC=y
|
||||
CONFIG_NF_CONNTRACK_NETBIOS_NS=y
|
||||
CONFIG_NF_CONNTRACK_SNMP=y
|
||||
CONFIG_NF_CONNTRACK_PPTP=y
|
||||
CONFIG_NF_CONNTRACK_SANE=y
|
||||
CONFIG_NF_CONNTRACK_SIP=y
|
||||
CONFIG_NF_CONNTRACK_TFTP=y
|
||||
CONFIG_NF_CT_NETLINK=y
|
||||
CONFIG_NF_CT_NETLINK_TIMEOUT=y
|
||||
CONFIG_NF_CT_NETLINK_HELPER=y
|
||||
CONFIG_NETFILTER_NETLINK_GLUE_CT=y
|
||||
CONFIG_NF_TABLES=y
|
||||
CONFIG_NF_TABLES_INET=y
|
||||
CONFIG_NF_TABLES_NETDEV=y
|
||||
CONFIG_NFT_NUMGEN=y
|
||||
CONFIG_NFT_CT=m
|
||||
CONFIG_NFT_FLOW_OFFLOAD=y
|
||||
CONFIG_NFT_CONNLIMIT=m
|
||||
CONFIG_NFT_LOG=m
|
||||
CONFIG_NFT_LIMIT=m
|
||||
@@ -121,22 +108,15 @@ CONFIG_NFT_REDIR=m
|
||||
CONFIG_NFT_NAT=m
|
||||
CONFIG_NFT_TUNNEL=m
|
||||
CONFIG_NFT_QUEUE=m
|
||||
CONFIG_NFT_QUOTA=y
|
||||
CONFIG_NFT_REJECT=m
|
||||
CONFIG_NFT_COMPAT=m
|
||||
CONFIG_NFT_HASH=m
|
||||
CONFIG_NFT_FIB_INET=y
|
||||
CONFIG_NFT_XFRM=m
|
||||
CONFIG_NFT_SOCKET=m
|
||||
CONFIG_NFT_OSF=m
|
||||
CONFIG_NFT_TPROXY=y
|
||||
CONFIG_NFT_SYNPROXY=y
|
||||
CONFIG_NFT_DUP_NETDEV=m
|
||||
CONFIG_NFT_FWD_NETDEV=m
|
||||
CONFIG_NFT_FIB_NETDEV=y
|
||||
CONFIG_NFT_REJECT_NETDEV=m
|
||||
CONFIG_NF_FLOW_TABLE_INET=y
|
||||
CONFIG_NF_FLOW_TABLE=y
|
||||
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
||||
CONFIG_NETFILTER_XT_TARGET_LOG=m
|
||||
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
|
||||
@@ -153,58 +133,29 @@ CONFIG_NETFILTER_XT_MATCH_MAC=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MARK=m
|
||||
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
|
||||
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
|
||||
CONFIG_IP_SET=y
|
||||
CONFIG_IP_SET_BITMAP_IP=y
|
||||
CONFIG_IP_SET_BITMAP_IPMAC=y
|
||||
CONFIG_IP_SET_BITMAP_PORT=y
|
||||
CONFIG_IP_SET_HASH_IP=y
|
||||
CONFIG_IP_SET_HASH_IPMARK=y
|
||||
CONFIG_IP_SET_HASH_IPPORT=y
|
||||
CONFIG_IP_SET_HASH_IPPORTIP=y
|
||||
CONFIG_IP_SET_HASH_IPPORTNET=y
|
||||
CONFIG_IP_SET_HASH_IPMAC=y
|
||||
CONFIG_IP_SET_HASH_MAC=y
|
||||
CONFIG_IP_SET_HASH_NETPORTNET=y
|
||||
CONFIG_IP_SET_HASH_NET=y
|
||||
CONFIG_IP_SET_HASH_NETNET=y
|
||||
CONFIG_IP_SET_HASH_NETPORT=y
|
||||
CONFIG_IP_SET_HASH_NETIFACE=y
|
||||
CONFIG_IP_SET_LIST_SET=y
|
||||
CONFIG_NFT_DUP_IPV4=y
|
||||
CONFIG_NFT_FIB_IPV4=y
|
||||
CONFIG_NF_TABLES_ARP=y
|
||||
CONFIG_NF_LOG_ARP=y
|
||||
CONFIG_NF_LOG_IPV4=y
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
CONFIG_IP_NF_MATCH_AH=m
|
||||
CONFIG_IP_NF_MATCH_ECN=m
|
||||
CONFIG_IP_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP_NF_MATCH_TTL=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP_NF_TARGET_ECN=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
CONFIG_NFT_DUP_IPV6=y
|
||||
CONFIG_NFT_FIB_IPV6=y
|
||||
CONFIG_IP_NF_NAT=m
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP_NF_MANGLE=m
|
||||
CONFIG_IP6_NF_IPTABLES=m
|
||||
CONFIG_IP6_NF_MATCH_AH=m
|
||||
CONFIG_IP6_NF_MATCH_EUI64=m
|
||||
CONFIG_IP6_NF_MATCH_FRAG=m
|
||||
CONFIG_IP6_NF_MATCH_OPTS=m
|
||||
CONFIG_IP6_NF_MATCH_HL=m
|
||||
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
|
||||
CONFIG_IP6_NF_MATCH_MH=m
|
||||
CONFIG_IP6_NF_MATCH_RPFILTER=m
|
||||
CONFIG_IP6_NF_MATCH_RT=m
|
||||
CONFIG_IP6_NF_MATCH_SRH=m
|
||||
CONFIG_IP6_NF_FILTER=m
|
||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP6_NF_RAW=m
|
||||
CONFIG_IP6_NF_NAT=m
|
||||
CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
||||
CONFIG_IP6_NF_TARGET_NPT=m
|
||||
CONFIG_NF_TABLES_BRIDGE=m
|
||||
CONFIG_NFT_BRIDGE_META=m
|
||||
CONFIG_NFT_BRIDGE_REJECT=m
|
||||
CONFIG_NF_CONNTRACK_BRIDGE=m
|
||||
CONFIG_BRIDGE_NF_EBTABLES=m
|
||||
CONFIG_BRIDGE_EBT_BROUTE=m
|
||||
CONFIG_BRIDGE_EBT_T_FILTER=m
|
||||
CONFIG_BRIDGE_EBT_T_NAT=m
|
||||
CONFIG_BRIDGE_EBT_802_3=m
|
||||
CONFIG_BRIDGE_EBT_ARP=m
|
||||
CONFIG_BRIDGE_EBT_IP=m
|
||||
@@ -243,21 +194,22 @@ CONFIG_NET_MPLS_GSO=y
|
||||
CONFIG_MPLS_ROUTING=m
|
||||
CONFIG_MPLS_IPTUNNEL=m
|
||||
CONFIG_NET_PKTGEN=y
|
||||
CONFIG_CFG80211=m
|
||||
CONFIG_MAC80211=m
|
||||
CONFIG_RFKILL=y
|
||||
# CONFIG_WIRELESS is not set
|
||||
CONFIG_NET_9P=y
|
||||
CONFIG_NET_9P_VIRTIO=y
|
||||
CONFIG_LWTUNNEL=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
CONFIG_PCI_IOV=y
|
||||
CONFIG_PCI_AARDVARK=y
|
||||
CONFIG_PCI_HOST_GENERIC=y
|
||||
CONFIG_PCIE_ARMADA_8K=y
|
||||
CONFIG_UEVENT_HELPER=y
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
# CONFIG_STANDALONE is not set
|
||||
CONFIG_RASPBERRYPI_FIRMWARE=y
|
||||
CONFIG_FW_CFG_SYSFS=y
|
||||
CONFIG_FW_CFG_SYSFS_CMDLINE=y
|
||||
CONFIG_OF_OVERLAY=y
|
||||
@@ -269,6 +221,7 @@ CONFIG_BLK_DEV_NVME=y
|
||||
CONFIG_SRAM=y
|
||||
CONFIG_EEPROM_AT24=y
|
||||
# CONFIG_SCSI_PROC_FS is not set
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_SCSI_SAS_LIBSAS=y
|
||||
CONFIG_SCSI_SAS_ATA=y
|
||||
@@ -277,6 +230,7 @@ CONFIG_ATA=y
|
||||
CONFIG_SATA_AHCI=y
|
||||
CONFIG_SATA_MOBILE_LPM_POLICY=0
|
||||
CONFIG_SATA_AHCI_PLATFORM=y
|
||||
CONFIG_AHCI_MVEBU=y
|
||||
CONFIG_PATA_OF_PLATFORM=y
|
||||
CONFIG_MD=y
|
||||
CONFIG_BLK_DEV_DM=y
|
||||
@@ -299,29 +253,67 @@ CONFIG_VETH=m
|
||||
CONFIG_VIRTIO_NET=y
|
||||
CONFIG_NLMON=y
|
||||
CONFIG_NET_VRF=y
|
||||
CONFIG_BCMGENET=y
|
||||
CONFIG_SMSC911X=y
|
||||
CONFIG_USB_LAN78XX=y
|
||||
CONFIG_USB_USBNET=y
|
||||
CONFIG_USB_NET_SMSC95XX=y
|
||||
CONFIG_BRCMFMAC=m
|
||||
CONFIG_ZD1211RW=m
|
||||
CONFIG_INPUT_MOUSEDEV=m
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_TOUCHSCREEN_EDT_FT5X06=m
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
CONFIG_SERIAL_8250_BCM2835AUX=y
|
||||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
CONFIG_SERIAL_DEV_BUS=y
|
||||
CONFIG_TTY_PRINTK=y
|
||||
CONFIG_HVC_DRIVER=y
|
||||
CONFIG_VIRTIO_CONSOLE=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_BCM2835=m
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_BCM2835=y
|
||||
CONFIG_SPI_BCM2835AUX=y
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
CONFIG_SENSORS_RASPBERRYPI_HWMON=m
|
||||
CONFIG_THERMAL=y
|
||||
CONFIG_BCM2711_THERMAL=y
|
||||
CONFIG_BCM2835_THERMAL=m
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_BCM2835_WDT=y
|
||||
CONFIG_I6300ESB_WDT=y
|
||||
CONFIG_MFD_SYSCON=y
|
||||
CONFIG_REGULATOR=y
|
||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||
CONFIG_REGULATOR_GPIO=y
|
||||
CONFIG_MEDIA_SUPPORT=y
|
||||
CONFIG_DRM=y
|
||||
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
|
||||
CONFIG_DRM_PANEL_SIMPLE=m
|
||||
CONFIG_DRM_TOSHIBA_TC358762=m
|
||||
CONFIG_DRM_V3D=m
|
||||
CONFIG_DRM_VC4=m
|
||||
CONFIG_DRM_VC4_HDMI_CEC=y
|
||||
CONFIG_DRM_SIMPLEDRM=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_SND_BCM2835_SOC_I2S=y
|
||||
CONFIG_HID_GENERIC=m
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||
CONFIG_USB_OTG=y
|
||||
CONFIG_USB_EHCI_HCD=m
|
||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||
CONFIG_USB_EHCI_HCD_PLATFORM=m
|
||||
CONFIG_USB_OHCI_HCD=m
|
||||
CONFIG_USB_OHCI_HCD_PLATFORM=m
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_DWC2=y
|
||||
CONFIG_NOP_USB_XCEIV=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_ETH=m
|
||||
CONFIG_USB_ETH_EEM=y
|
||||
@@ -329,6 +321,8 @@ CONFIG_USB_G_SERIAL=m
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_SDHCI_PLTFM=y
|
||||
CONFIG_MMC_SDHCI_IPROC=y
|
||||
CONFIG_MMC_BCM2835=y
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
CONFIG_LEDS_GPIO=y
|
||||
@@ -342,16 +336,23 @@ CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
|
||||
CONFIG_LEDS_TRIGGER_TRANSIENT=y
|
||||
CONFIG_LEDS_TRIGGER_CAMERA=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_DMA_BCM2835=y
|
||||
CONFIG_VIRTIO_PCI=y
|
||||
CONFIG_VIRTIO_BALLOON=y
|
||||
CONFIG_VIRTIO_INPUT=y
|
||||
CONFIG_VIRTIO_MMIO=y
|
||||
CONFIG_STAGING=y
|
||||
CONFIG_SND_BCM2835=m
|
||||
CONFIG_VIDEO_BCM2835=m
|
||||
CONFIG_CLK_RASPBERRYPI=y
|
||||
CONFIG_MAILBOX=y
|
||||
CONFIG_BCM2835_MBOX=y
|
||||
# CONFIG_IOMMU_SUPPORT is not set
|
||||
CONFIG_RASPBERRYPI_POWER=y
|
||||
CONFIG_PWM=y
|
||||
CONFIG_PWM_BCM2835=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT2_FS_POSIX_ACL=y
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_BTRFS_FS=y
|
||||
CONFIG_BTRFS_FS_POSIX_ACL=y
|
||||
@@ -370,24 +371,25 @@ CONFIG_SQUASHFS_LZO=y
|
||||
CONFIG_SQUASHFS_XZ=y
|
||||
CONFIG_SQUASHFS_ZSTD=y
|
||||
CONFIG_9P_FS=y
|
||||
CONFIG_NLS_DEFAULT="iso8859-15"
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_ISO8859_15=y
|
||||
CONFIG_NLS_UTF8=y
|
||||
CONFIG_CRYPTO_CCM=y
|
||||
CONFIG_CRYPTO_GCM=y
|
||||
# CONFIG_XZ_DEC_ARM is not set
|
||||
# CONFIG_XZ_DEC_ARMTHUMB is not set
|
||||
CONFIG_DMA_CMA=y
|
||||
CONFIG_CMA_SIZE_MBYTES=32
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_PANIC_ON_OOPS=y
|
||||
CONFIG_PANIC_TIMEOUT=20
|
||||
CONFIG_HARDLOCKUP_DETECTOR=y
|
||||
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
|
||||
CONFIG_WQ_WATCHDOG=y
|
||||
CONFIG_TEST_LOCKUP=m
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
# CONFIG_SCHED_DEBUG is not set
|
||||
# CONFIG_RCU_TRACE is not set
|
||||
CONFIG_FUNCTION_TRACER=y
|
||||
# CONFIG_RUNTIME_TESTING_MENU is not set
|
||||
# CONFIG_STRICT_DEVMEM is not set
|
||||
CONFIG_MEMTEST=y
|
||||
@@ -2,10 +2,14 @@ config BR2_PACKAGE_RASPBERRYPI_RPI2
|
||||
bool "Raspberry Pi 2 Model B (32-bit ARMv7)"
|
||||
depends on BR2_arm
|
||||
select SDCARD_AUX
|
||||
select BR2_PACKAGE_FEATURE_WIFI
|
||||
select BR2_PACKAGE_BRCMFMAC_SDIO_FIRMWARE_RPI
|
||||
select BR2_PACKAGE_BRCMFMAC_SDIO_FIRMWARE_RPI_WIFI
|
||||
|
||||
help
|
||||
Support for the 32-bit ARMv7 Raspberry Pi 2B single-board computer
|
||||
(SBC) with BCM2836 quad-core Cortex-A7 processor.
|
||||
|
||||
This was the only Raspberry Pi model with the BCM2836 and the rare
|
||||
RPi 2B board revision v1.2 actually got an underclocked BCM2837,
|
||||
which is the saem Cortex-A53 as the RPi3, but w/o wifi.
|
||||
This was the only Raspberry Pi model with the BCM2836 and the 2B
|
||||
actually got a BCM2837 (Cortex-A53) underclocked an w/o wifi in
|
||||
the v1.2 board revision.
|
||||
@@ -21,8 +21,9 @@ The board features:
|
||||
How to Build
|
||||
------------
|
||||
|
||||
Since there are no pre-built images for ARM 32-bit, you need to build both
|
||||
Infix and the bootloader from source.
|
||||
Since there are no pre-built images for ARM32, you need to build both Infix
|
||||
and the bootloader from source.
|
||||
|
||||
|
||||
1. Clone the repository
|
||||
|
||||
@@ -36,12 +37,12 @@ Infix and the bootloader from source.
|
||||
|
||||
3. Build Infix (in another tree)
|
||||
|
||||
make O=x-arm arm_defconfig
|
||||
make O=x-arm
|
||||
make O=x-arm32 aarch32_defconfig
|
||||
make O=x-arm32
|
||||
|
||||
4. Create the SD card image
|
||||
|
||||
./utils/mkimage.sh -b x-boot -r x-arm raspberrypi-rpi2
|
||||
./utils/mkimage.sh -b x-boot -r x-arm32 raspberrypi-rpi2
|
||||
|
||||
The resulting image can be found in `x-boot/images/infix-arm-sdcard.img`
|
||||
|
||||
@@ -91,5 +92,5 @@ Serial settings: 115200 8N1
|
||||
> [!WARNING]
|
||||
> Use only 3.3V serial adapters. 5V adapters will damage your Raspberry Pi!
|
||||
|
||||
[0]: https://www.kernelkit.org/posts/flashing-sdcard/
|
||||
[0]: https://kernelkit.org/posts/flashing-sdcard/
|
||||
[1]: https://www.raspberrypi.com/products/raspberry-pi-2-model-b/
|
||||
@@ -1,19 +1,13 @@
|
||||
# Raspberry Pi 2 Model B specific kernel configuration
|
||||
define RASPBERRYPI_RPI2_LINUX_CONFIG_FIXUPS
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_ARCH_BCM)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_ARCH_BCM2835)
|
||||
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_SOUND)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_SND)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_SND_SOC)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_SND_BCM2835_SOC_I2S,y)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_SND_BCM2835,m)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_INPUT_MOUSE)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_INPUT_KEYBOARD)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_INPUT_TOUCHSCREEN)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_INPUT_MOUSEDEV,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_HID_GENERIC,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_TOUCHSCREEN_EDT_FT5X06,m)
|
||||
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_ARCH_BCM)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_ARCH_BCM2835)
|
||||
@@ -21,58 +15,46 @@ define RASPBERRYPI_RPI2_LINUX_CONFIG_FIXUPS
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_BCM2835_WDT)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_DMA_BCM2835)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_RASPBERRYPI_FIRMWARE)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_RASPBERRYPI_POWER)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_ARM_RASPBERRYPI_CPUFREQ)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_CLK_RASPBERRYPI)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_PINCTRL_BCM2835)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_GPIO_BCM2835)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_PWM_BCM2835)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_BRCMFMAC,m)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_BRCMFMAC_SDIO)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_I2C_BCM2835,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_SPI_BCM2835,y)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_SPI_BCM2835AUX,y)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_SENSORS_RASPBERRYPI_HWMON,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_BCM2711_THERMAL,y)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_BCM2835_THERMAL,m)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_MMC_BCM2835)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_MMC_SDHCI_IPROC,y)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_RASPBERRYPI_POWER)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_SERIAL_8250)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_SERIAL_8250_CONSOLE)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_SERIAL_8250_BCM2835AUX)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_SERIAL_8250_EXTENDED)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_SERIAL_8250_SHARE_IRQ)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_SERIAL_AMBA_PL011)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_SERIAL_AMBA_PL011_CONSOLE)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_NET_VENDOR_BROADCOM)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_BCMGENET,y)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_SMSC911X,y)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_USB_USBNET)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_USB_LAN78XX,y)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_USB_NET_SMSC95XX,y)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_REGULATOR_GPIO,y)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_COMMON_CLK_BCM2835)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_CLK_RASPBERRYPI)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_DRM)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_DRM_KMS_HELPER)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_DRM_SIMPLEDRM,y)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_DRM_V3D,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_DRM_VC4,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_STAGING,y)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_SND_BCM2835,m)
|
||||
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_DRM_VC4_HDMI_CEC)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_DRM_LOAD_EDID_FIRMWARE)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_DRM_PANEL_BRIDGE)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_DRM_BRIDGE)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_DRM_TOSHIBA_TC358762,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_DRM_PANEL_SIMPLE,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_STAGING,y)
|
||||
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_FB)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_FRAMEBUFFER_CONSOLE)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_DRM_FBDEV_EMULATION)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_BACKLIGHT_CLASS_DEVICE)
|
||||
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_USB_DWC2)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_NOP_USB_XCEIV)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_TOUCHSCREEN_EDT_FT5X06,m)
|
||||
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_BACKLIGHT_CLASS_DEVICE)
|
||||
endef
|
||||
|
||||
$(eval $(ix-board))
|
||||
@@ -41,32 +41,14 @@
|
||||
"ietf-ip:ipv4": {
|
||||
"infix-dhcp-client:dhcp": {
|
||||
"option": [
|
||||
{
|
||||
"id": "netmask"
|
||||
},
|
||||
{
|
||||
"id": "broadcast"
|
||||
},
|
||||
{
|
||||
"id": "router"
|
||||
},
|
||||
{
|
||||
"id": "domain"
|
||||
},
|
||||
{
|
||||
"id": "hostname",
|
||||
"value": "auto"
|
||||
},
|
||||
{
|
||||
"id": "dns-server"
|
||||
},
|
||||
{
|
||||
"id": "ntp-server"
|
||||
},
|
||||
{
|
||||
"id": "vendor-class",
|
||||
"value": "Raspberry Pi 2 Model B"
|
||||
}
|
||||
{"id": "netmask"},
|
||||
{"id": "broadcast"},
|
||||
{"id": "router"},
|
||||
{"id": "domain"},
|
||||
{"id": "hostname"},
|
||||
{"id": "dns-server"},
|
||||
{"id": "ntp-server"},
|
||||
{"id": "vendor-class", "value": "Raspberry Pi 2 Model B"}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -89,9 +71,6 @@
|
||||
},
|
||||
"ietf-netconf-acm:nacm": {
|
||||
"enable-nacm": true,
|
||||
"read-default": "permit",
|
||||
"write-default": "permit",
|
||||
"exec-default": "permit",
|
||||
"groups": {
|
||||
"group": [
|
||||
{
|
||||
@@ -99,14 +78,6 @@
|
||||
"user-name": [
|
||||
"admin"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "operator",
|
||||
"user-name": []
|
||||
},
|
||||
{
|
||||
"name": "guest",
|
||||
"user-name": []
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -126,37 +97,6 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "operator-acl",
|
||||
"group": [
|
||||
"operator"
|
||||
],
|
||||
"rule": [
|
||||
{
|
||||
"name": "permit-system-rpcs",
|
||||
"module-name": "ietf-system",
|
||||
"rpc-name": "*",
|
||||
"access-operations": "exec",
|
||||
"action": "permit",
|
||||
"comment": "Operators can reboot, shutdown, and set system time."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "guest-acl",
|
||||
"group": [
|
||||
"guest"
|
||||
],
|
||||
"rule": [
|
||||
{
|
||||
"name": "deny-all-write+exec",
|
||||
"module-name": "*",
|
||||
"access-operations": "create update delete exec",
|
||||
"action": "deny",
|
||||
"comment": "Guests cannot change anything or exec rpcs."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "default-deny-all",
|
||||
"group": [
|
||||
@@ -164,25 +104,11 @@
|
||||
],
|
||||
"rule": [
|
||||
{
|
||||
"name": "deny-password-access",
|
||||
"name": "deny-password-read",
|
||||
"module-name": "ietf-system",
|
||||
"path": "/ietf-system:system/authentication/user/password",
|
||||
"access-operations": "*",
|
||||
"action": "deny",
|
||||
"comment": "No user except admins can access password hashes."
|
||||
},
|
||||
{
|
||||
"name": "deny-keystore-access",
|
||||
"module-name": "ietf-keystore",
|
||||
"access-operations": "*",
|
||||
"action": "deny",
|
||||
"comment": "No user except admins can access cryptographic keys."
|
||||
},
|
||||
{
|
||||
"name": "deny-truststore-access",
|
||||
"module-name": "ietf-truststore",
|
||||
"access-operations": "*",
|
||||
"action": "deny",
|
||||
"comment": "No user except admins can access trust store."
|
||||
"action": "deny"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -196,11 +122,7 @@
|
||||
"name": "default-ssh",
|
||||
"ssh": {
|
||||
"tcp-server-parameters": {
|
||||
"local-bind": [
|
||||
{
|
||||
"local-address": "::"
|
||||
}
|
||||
]
|
||||
"local-address": "::"
|
||||
},
|
||||
"ssh-server-parameters": {
|
||||
"server-identity": {
|
||||
@@ -246,7 +168,7 @@
|
||||
"infix-system:motd-banner": "Li0tLS0tLS0uCnwgIC4gLiAgfCBJbmZpeCBPUyDigJQgSW1tdXRhYmxlLkZyaWVuZGx5LlNlY3VyZQp8LS4gdiAuLXwgaHR0cHM6Ly9rZXJuZWxraXQub3JnCictJy0tLSctJwo="
|
||||
},
|
||||
"infix-meta:meta": {
|
||||
"version": "1.7"
|
||||
"version": "1.6"
|
||||
},
|
||||
"infix-services:mdns": {
|
||||
"enabled": true
|
||||
@@ -1,10 +1,7 @@
|
||||
if BR2_aarch64
|
||||
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/alder-alder/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/acer-connect-vero-w6m/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/bananapi-bpi-r3/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/bananapi-bpi-r4/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/bananapi-bpi-r64/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/freescale-imx8mp-evk/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/friendlyarm-nanopi-r2s/Config.in"
|
||||
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/marvell-cn9130-crb/Config.in"
|
||||
|
||||
@@ -4,12 +4,8 @@ aarch64
|
||||
Board Specific Documentation
|
||||
----------------------------
|
||||
|
||||
- [Acer Connect Vero W6m](acer-connect-vero-w6m/)
|
||||
- [Banana Pi BPi-R3](bananapi-bpi-r3/)
|
||||
- [Banana Pi BPi-R4](bananapi-bpi-r4/)
|
||||
- [Banana Pi BPi-R64](bananapi-bpi-r64/)
|
||||
- [Marvell CN9130-CRB](marvell-cn9130-crb/)
|
||||
- [Marvell ESPRESSObin](marvell-espressobin/)
|
||||
- [Microchip SparX-5i PCB135 (eMMC)](microchip-sparx5-pcb135/)
|
||||
- [NanoPi R2S](friendlyarm-nanopi-r2s/)
|
||||
- [Raspberry Pi 64-bit](raspberrypi-rpi64/)
|
||||
- [Banana Pi R3](banana-pi-r3/)
|
||||
- [Marvell CN9130-CRB](cn9130-crb/)
|
||||
- [Microchip SparX-5i PCB135 (eMMC)](sparx5-pcb135/)
|
||||
- [NanoPi R2S](r2s/)
|
||||
- [Raspberry Pi 64-bit](raspberry-pi64/)
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
config BR2_PACKAGE_ACER_CONNECT_VERO_W6M
|
||||
bool "Acer Connect Vero W6m"
|
||||
depends on BR2_aarch64
|
||||
select BR2_PACKAGE_BANANAPI_BPI_R3
|
||||
help
|
||||
Build Acer Connect Vero W6m
|
||||
@@ -1,13 +0,0 @@
|
||||
Copyright (c) 2026 The KernelKit Authors
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
@@ -1,131 +0,0 @@
|
||||
# Acer Connect Vero W6m
|
||||
|
||||
<img src="connect_vero_w6m_case.jpg" alt="Acer Connect Vero W6m" width=400 padding=10>
|
||||
|
||||
## Overview
|
||||
|
||||
The Acer Connect Vero W6m is a compact WiFi 6/6E router platform based
|
||||
on the MediaTek MT7986A SoC. In Infix it is supported as an eMMC-based
|
||||
target that reuses the factory secure boot chain while replacing the
|
||||
system partitions with an Infix installation.
|
||||
|
||||
The Acer Connect Vero W6m is based on the same MT7986a SoC as the
|
||||
BPI-R3, with tri-band WiFi (2.4 GHz + 5 GHz + 6 GHz) using a PCIe
|
||||
MT7916 module and the SoC's built-in MT7976 DBDC radio.
|
||||
|
||||
## Default WiFi Layout
|
||||
|
||||
The factory configuration on this branch enables all three radios in AP
|
||||
mode and bridges them into the default LAN bridge `br0`:
|
||||
|
||||
- `radio0` / `wifi0-ap`: 2.4 GHz, SSID `Infix`
|
||||
- `radio1` / `wifi1-ap`: 6 GHz, SSID `Infix6G`
|
||||
- `radio2` / `wifi2-ap`: 5 GHz, SSID `Infix5G`
|
||||
|
||||
6 GHz operation is enabled in the MT7915e driver configuration, and all
|
||||
three APs use the same default passphrase `infixinfix` from the factory
|
||||
configuration.
|
||||
|
||||
Secure boot is enabled on this device, so the factory bootloader
|
||||
(partitions 1-4: bl2, u-boot-env, factory, fip) must not be modified.
|
||||
Infix is installed by replacing partitions 5+ while keeping the
|
||||
factory bootloader intact. The stock U-Boot chainloads the Infix
|
||||
U-Boot from the first partition after fip.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Serial console access (115200 8N1) — required to interrupt U-Boot.
|
||||
Disassembly is needed to reach the UART header. See the [OpenWrt
|
||||
Vero W6m page][vero-openwrt] for details.
|
||||
- TFTP server on the local network with `u-boot.bin` for the initial
|
||||
RAM boot.
|
||||
- SSH access from the running Infix system to a host that stores
|
||||
`infix-vero-w-emmc.img`.
|
||||
- Ethernet cable connected between the PC and the Vero Internet/WAN
|
||||
port.
|
||||
- DHCP server running on the PC, serving addresses on that link during
|
||||
installation.
|
||||
- **Save the MAC addresses** from the stock U-Boot environment before
|
||||
installing. Interrupt autoboot and run `printenv` to note down:
|
||||
`2gMAC`, `5gMAC`, `6gMAC`, `LANMAC`, and `WANMAC`.
|
||||
|
||||
## Required Files
|
||||
|
||||
Prepare these files on a host reachable from the Vero:
|
||||
|
||||
1. **Infix Vero image:**
|
||||
- [infix-vero-w-emmc.img][1] (Complete system image)
|
||||
2. **eMMC bootloader** (extracted from):
|
||||
- [bpi-r3-emmc-boot-2025.01-latest.tar.gz][2]
|
||||
- Extract `u-boot.bin` from the tarball to your TFTP server
|
||||
|
||||
## Installing Infix
|
||||
|
||||
Connect the PC directly to the Vero Internet/WAN port before starting
|
||||
the installation. The PC should provide DHCP service on that link so
|
||||
the stock U-Boot and the temporary Infix system can reach the TFTP/SSH
|
||||
host.
|
||||
|
||||
1. **RAM-load Infix U-Boot** from the stock U-Boot serial console
|
||||
(hit any key to stop autoboot):
|
||||
|
||||
```
|
||||
setenv serverip <TFTP_SERVER_IP>
|
||||
setenv ipaddr <VERO_IP>
|
||||
setenv bootmenu_default 7
|
||||
tftpboot 0x46000000 u-boot.bin
|
||||
go 0x46000000
|
||||
```
|
||||
|
||||
`serverip` must point to your TFTP server and `ipaddr` must be a free
|
||||
address for the Vero on the same subnet. `bootmenu_default 7`
|
||||
bypasses secure boot verification. The Infix U-Boot will
|
||||
automatically netboot the Infix system.
|
||||
|
||||
2. **From running Infix**, stream the image directly to eMMC:
|
||||
|
||||
```bash
|
||||
ssh <USER>@<HOST> "dd if=/path/to/infix-vero-w-emmc.img bs=512 skip=17408 status=none" | \
|
||||
dd of=/dev/mmcblk0 bs=512 seek=17408 conv=fsync
|
||||
sync
|
||||
```
|
||||
|
||||
This writes only the Infix partitions (starting after fip at sector
|
||||
17408), leaving the factory bootloader and calibration data intact.
|
||||
Do not interrupt the transfer; if it fails, rerun the command from
|
||||
the beginning.
|
||||
|
||||
3. **Update the GPT** to replace stock partitions 5+ with the Infix
|
||||
layout:
|
||||
|
||||
```bash
|
||||
sudo sgdisk --zap-all /dev/mmcblk0
|
||||
sudo sgdisk -a 1 \
|
||||
-n2:8192:9215 -c2:u-boot-env \
|
||||
-n3:9216:13311 -c3:factory \
|
||||
-n4:13312:17407 -c4:fip \
|
||||
-n5:17408:+32M -c5:infix-uboot \
|
||||
-n6:0:+8M -c6:aux \
|
||||
-n7:0:+250M -c7:primary \
|
||||
-n8:0:+250M -c8:secondary \
|
||||
-n9:0:+128M -c9:cfg \
|
||||
-n10:0:+128M -c10:var \
|
||||
-p /dev/mmcblk0
|
||||
```
|
||||
|
||||
4. **Configure U-Boot to chainload Infix permanently** — reboot and
|
||||
interrupt stock U-Boot again:
|
||||
|
||||
```
|
||||
setenv bootmenu_default 7
|
||||
setenv bootcmd 'mmc read 0x46000000 0x4400 0x10000; go 0x46000000'
|
||||
saveenv
|
||||
reset
|
||||
```
|
||||
|
||||
The `bootcmd` reads the Infix U-Boot (at sector 0x4400/17408)
|
||||
into RAM and jumps to it. After `reset`, Infix boots from eMMC.
|
||||
|
||||
[vero-openwrt]: https://openwrt.org/toh/acer/predator_vero_w6m
|
||||
[1]: https://github.com/kernelkit/infix/releases/download/latest-boot/infix-vero-w-emmc.img
|
||||
[2]: https://github.com/kernelkit/infix/releases/download/latest-boot/bpi-r3-emmc-boot-2025.01-latest.tar.gz
|
||||
@@ -1,2 +0,0 @@
|
||||
# Locally calculated
|
||||
sha256 d48246c717b505cc11df95171f2fd548b389e1a463f1af4c68d0b69fe0d1009b LICENSE
|
||||
@@ -1,2 +0,0 @@
|
||||
$(eval $(ix-board))
|
||||
$(eval $(generic-package))
|
||||
|
Before Width: | Height: | Size: 18 KiB |
@@ -1 +0,0 @@
|
||||
dtb-y += mediatek/mt7986a-acer-connect-vero-w6m.dtb
|
||||
@@ -1,425 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/leds/common.h>
|
||||
#include <dt-bindings/pinctrl/mt65xx.h>
|
||||
|
||||
#include <arm64/mediatek/mt7986a.dtsi>
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
stdout-path = "serial0:115200n8";
|
||||
infix {
|
||||
/* Default admin user password: 'admin' */
|
||||
factory-password-hash = "$5$mI/zpOAqZYKLC2WU$i7iPzZiIjOjrBF3NyftS9CCq8dfYwHwrmUK097Jca9A";
|
||||
};
|
||||
};
|
||||
|
||||
memory@40000000 {
|
||||
reg = <0 0x40000000 0 0x20000000>;
|
||||
device_type = "memory";
|
||||
};
|
||||
|
||||
reg_1p8v: regulator-1p8v {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "fixed-1.8V";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
reg_3p3v: regulator-3p3v {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "fixed-3.3V";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
reg_5v: regulator-5v {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "fixed-5V";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
factory {
|
||||
label = "factory";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&pio 9 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
wps {
|
||||
label = "wps";
|
||||
linux,code = <KEY_WPS_BUTTON>;
|
||||
gpios = <&pio 10 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&watchdog {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pio {
|
||||
wifi_rst_hog: wifi-reset-hog {
|
||||
gpio-hog;
|
||||
gpios = <6 GPIO_ACTIVE_LOW>;
|
||||
output-low;
|
||||
line-name = "wifi-reset";
|
||||
};
|
||||
|
||||
mmc0_pins_default: mmc0-pins {
|
||||
mux {
|
||||
function = "emmc";
|
||||
groups = "emmc_51";
|
||||
};
|
||||
|
||||
conf-cmd-dat {
|
||||
pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2",
|
||||
"EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5",
|
||||
"EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD";
|
||||
input-enable;
|
||||
drive-strength = <MTK_DRIVE_4mA>;
|
||||
bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
|
||||
};
|
||||
|
||||
conf-clk {
|
||||
pins = "EMMC_CK";
|
||||
drive-strength = <MTK_DRIVE_6mA>;
|
||||
bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
|
||||
};
|
||||
|
||||
conf-ds {
|
||||
pins = "EMMC_DSL";
|
||||
bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
|
||||
};
|
||||
|
||||
conf-rst {
|
||||
pins = "EMMC_RSTB";
|
||||
drive-strength = <MTK_DRIVE_4mA>;
|
||||
bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
|
||||
};
|
||||
};
|
||||
|
||||
mmc0_pins_uhs: mmc0-uhs-pins {
|
||||
mux {
|
||||
function = "emmc";
|
||||
groups = "emmc_51";
|
||||
};
|
||||
|
||||
conf-cmd-dat {
|
||||
pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2",
|
||||
"EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5",
|
||||
"EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD";
|
||||
input-enable;
|
||||
drive-strength = <MTK_DRIVE_4mA>;
|
||||
bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
|
||||
};
|
||||
|
||||
conf-clk {
|
||||
pins = "EMMC_CK";
|
||||
drive-strength = <MTK_DRIVE_6mA>;
|
||||
bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
|
||||
};
|
||||
|
||||
conf-ds {
|
||||
pins = "EMMC_DSL";
|
||||
bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
|
||||
};
|
||||
|
||||
conf-rst {
|
||||
pins = "EMMC_RSTB";
|
||||
drive-strength = <MTK_DRIVE_4mA>;
|
||||
bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
|
||||
};
|
||||
};
|
||||
|
||||
pcie_pins: pcie-pins {
|
||||
mux {
|
||||
function = "pcie";
|
||||
groups = "pcie_pereset";
|
||||
};
|
||||
};
|
||||
|
||||
wf_2g_5g_pins: wf_2g_5g-pins {
|
||||
mux {
|
||||
function = "wifi";
|
||||
groups = "wf_2g", "wf_5g";
|
||||
};
|
||||
conf {
|
||||
pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4",
|
||||
"WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6",
|
||||
"WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10",
|
||||
"WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1",
|
||||
"WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0",
|
||||
"WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8",
|
||||
"WF1_TOP_CLK", "WF1_TOP_DATA";
|
||||
drive-strength = <MTK_DRIVE_4mA>;
|
||||
};
|
||||
};
|
||||
|
||||
wf_dbdc_pins: wf-dbdc-pins {
|
||||
mux {
|
||||
function = "wifi";
|
||||
groups = "wf_dbdc";
|
||||
};
|
||||
conf {
|
||||
pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4",
|
||||
"WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6",
|
||||
"WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10",
|
||||
"WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1",
|
||||
"WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0",
|
||||
"WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8",
|
||||
"WF1_TOP_CLK", "WF1_TOP_DATA";
|
||||
drive-strength = <MTK_DRIVE_4mA>;
|
||||
};
|
||||
};
|
||||
|
||||
i2c_pins: i2c-pins {
|
||||
mux {
|
||||
function = "i2c";
|
||||
groups = "i2c";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&trng {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&crypto {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uart0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c_pins>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&mmc0 {
|
||||
status = "okay";
|
||||
pinctrl-names = "default", "state_uhs";
|
||||
pinctrl-0 = <&mmc0_pins_default>;
|
||||
pinctrl-1 = <&mmc0_pins_uhs>;
|
||||
bus-width = <0x08>;
|
||||
max-frequency = <200000000>;
|
||||
cap-mmc-highspeed;
|
||||
mmc-hs200-1_8v;
|
||||
mmc-hs400-1_8v;
|
||||
hs400-ds-delay = <0x14014>;
|
||||
vmmc-supply = <®_3p3v>;
|
||||
vqmmc-supply = <®_1p8v>;
|
||||
non-removable;
|
||||
no-sd;
|
||||
no-sdio;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
card@0 {
|
||||
compatible = "mmc-card";
|
||||
reg = <0>;
|
||||
|
||||
block {
|
||||
compatible = "block-device";
|
||||
|
||||
partitions {
|
||||
block-partition-factory {
|
||||
partname = "factory";
|
||||
|
||||
nvmem: nvmem-layout {
|
||||
compatible = "fixed-layout";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
eeprom_factory_0: eeprom@0 {
|
||||
reg = <0x0 0x1000>;
|
||||
};
|
||||
|
||||
precal_factory_1010: precal@1010 {
|
||||
reg = <0x1010 0x62810>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pcie {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pcie_pins>;
|
||||
num-lanes = <1>;
|
||||
status = "okay";
|
||||
|
||||
slot0: pcie@0,0 {
|
||||
reg = <0x0000 0 0 0 0>;
|
||||
#address-cells = <0x03>;
|
||||
#size-cells = <0x02>;
|
||||
|
||||
pcie_wifi: wifi@0,0 {
|
||||
compatible = "mediatek,mt76";
|
||||
reg = <0x0000 0 0 0 0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pcie_phy {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pcie_port {
|
||||
clocks = <&clk40m>, <&topckgen CLK_TOP_PCIE_PHY_SEL>;
|
||||
clock-names = "ref", "da_ref";
|
||||
};
|
||||
|
||||
ð {
|
||||
status = "okay";
|
||||
|
||||
gmac0: mac@0 {
|
||||
compatible = "mediatek,eth-mac";
|
||||
reg = <0>;
|
||||
phy-mode = "2500base-x";
|
||||
|
||||
fixed-link {
|
||||
speed = <2500>;
|
||||
full-duplex;
|
||||
pause;
|
||||
};
|
||||
};
|
||||
|
||||
mdio: mdio-bus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
switch: switch@1f {
|
||||
compatible = "mediatek,mt7531";
|
||||
reg = <31>;
|
||||
reset-gpios = <&pio 5 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
swport0: port@0 {
|
||||
reg = <0>;
|
||||
phy-handle = <&swphy0>;
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
label = "lan1";
|
||||
phy-handle = <&swphy1>;
|
||||
};
|
||||
|
||||
port@2 {
|
||||
reg = <2>;
|
||||
label = "lan2";
|
||||
phy-handle = <&swphy2>;
|
||||
};
|
||||
|
||||
port@3 {
|
||||
reg = <3>;
|
||||
label = "lan3";
|
||||
phy-handle = <&swphy3>;
|
||||
};
|
||||
|
||||
port@6 {
|
||||
reg = <6>;
|
||||
label = "cpu";
|
||||
ethernet = <&gmac0>;
|
||||
phy-mode = "2500base-x";
|
||||
|
||||
fixed-link {
|
||||
speed = <2500>;
|
||||
full-duplex;
|
||||
pause;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
mdio {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
swphy0: phy@0 {
|
||||
reg = <0>;
|
||||
|
||||
mediatek,led-config = <
|
||||
0x21 0x8008 /* BASIC_CTRL */
|
||||
0x22 0x0c00 /* ON_DURATION */
|
||||
0x23 0x1400 /* BLINK_DURATION */
|
||||
0x24 0xc001 /* LED0_ON_CTRL */
|
||||
0x25 0x0003 /* LED0_BLINK_CTRL */
|
||||
0x26 0xc006 /* LED1_ON_CTRL */
|
||||
0x27 0x003c /* LED1_BLINK_CTRL */
|
||||
>;
|
||||
};
|
||||
|
||||
swphy1: phy@1 {
|
||||
reg = <1>;
|
||||
|
||||
mediatek,led-config = <
|
||||
0x21 0x8008 /* BASIC_CTRL */
|
||||
0x22 0x0c00 /* ON_DURATION */
|
||||
0x23 0x1400 /* BLINK_DURATION */
|
||||
0x24 0xc001 /* LED0_ON_CTRL */
|
||||
0x25 0x0003 /* LED0_BLINK_CTRL */
|
||||
0x26 0xc006 /* LED1_ON_CTRL */
|
||||
0x27 0x003c /* LED1_BLINK_CTRL */
|
||||
>;
|
||||
};
|
||||
|
||||
swphy2: phy@2 {
|
||||
reg = <2>;
|
||||
|
||||
mediatek,led-config = <
|
||||
0x21 0x8008 /* BASIC_CTRL */
|
||||
0x22 0x0c00 /* ON_DURATION */
|
||||
0x23 0x1400 /* BLINK_DURATION */
|
||||
0x24 0xc001 /* LED0_ON_CTRL */
|
||||
0x25 0x0003 /* LED0_BLINK_CTRL */
|
||||
0x26 0xc006 /* LED1_ON_CTRL */
|
||||
0x27 0x003c /* LED1_BLINK_CTRL */
|
||||
>;
|
||||
};
|
||||
|
||||
swphy3: phy@3 {
|
||||
reg = <3>;
|
||||
|
||||
mediatek,led-config = <
|
||||
0x21 0x8008 /* BASIC_CTRL */
|
||||
0x22 0x0c00 /* ON_DURATION */
|
||||
0x23 0x1400 /* BLINK_DURATION */
|
||||
0x24 0xc001 /* LED0_ON_CTRL */
|
||||
0x25 0x0003 /* LED0_BLINK_CTRL */
|
||||
0x26 0xc006 /* LED1_ON_CTRL */
|
||||
0x27 0x003c /* LED1_BLINK_CTRL */
|
||||
>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&wifi {
|
||||
nvmem-cells = <&eeprom_factory_0>, <&precal_factory_1010>;
|
||||
nvmem-cell-names = "eeprom", "precal";
|
||||
pinctrl-names = "default", "dbdc";
|
||||
pinctrl-0 = <&wf_2g_5g_pins>;
|
||||
pinctrl-1 = <&wf_dbdc_pins>;
|
||||
status = "okay";
|
||||
};
|
||||
@@ -1,263 +0,0 @@
|
||||
/* Factory EEPROM for MT7976 WMAC (DBDC) - Acer Connect Vero W */
|
||||
/* Band 1 patched from 5GHz-only to 5GHz+6GHz selectable */
|
||||
|
||||
&wifi {
|
||||
mediatek,eeprom-data = <
|
||||
0x86790100 0x000c4326 0x60100000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x01000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000800 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x12525353 0x003c003f 0x3a100700 0x15030000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x0000be00 0x00000000
|
||||
0x0000c100 0x00000000 0x00000000 0xc3000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000009 0x00000000 0x00000000
|
||||
0x00000000 0x00000303 0x03030303 0x03030303
|
||||
0x03030303 0x03030303 0x03040303 0x03040303
|
||||
0x03040303 0x03040000 0x00161b18 0x1b1a1a1a
|
||||
0x1a0d0008 0x0f0d0209 0x0e0d0209 0x0e0d0209
|
||||
0x0e0c020a 0x0e0c020a 0x0e0c020a 0x0e0b020b
|
||||
0x0e2b2b2b 0x2b222222 0x22222222 0x22222222
|
||||
0x22222222 0x22222222 0x22000000 0x00000000
|
||||
0x00000000 0x002a2a2a 0x2a282828 0x282a2a2a
|
||||
0x2a282828 0x282a2a2a 0x2a282828 0x282a2a2a
|
||||
0x2a282828 0x28000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x007f7f20 0x2530363c 0x41014847 0x4c52575c
|
||||
0x7f7f7f7f 0x1b222a33 0x3a40014d 0x464c525a
|
||||
0x5e7f7f7f 0x7f252834 0x3c424a01 0x4a4f555d
|
||||
0x636e7f7f 0x7f7f202a 0x303b444a 0x014a5158
|
||||
0x5f666e7f 0x7f7f7f7f 0x8080c5c5 0xd1d1dddd
|
||||
0xe5e5f3f3 0x40408080 0xcfcfdbdb 0xe3e3efef
|
||||
0xf7f74040 0x8080bfbf 0xcbcbd9d9 0xe5e5eded
|
||||
0x40408080 0xb9b9c5c5 0xd3d3dfdf 0xe7e74040
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0xc0a0c0e0 0xfcfcafe0 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x02200220 0x02200220 0x02300230 0x02300230
|
||||
0x02300230 0x02300230 0x02300230 0x02300230
|
||||
0x02240224 0x02240224 0x02240224 0x02240224
|
||||
0x02240224 0x02240224 0x02240224 0x02240224
|
||||
0x000000c4 0xc4c4c4c4 0x0000c4c4 0xc4c4c1c1
|
||||
0x008282c3 0xc3000000 0x00838300 0xc4c4c4c1
|
||||
0xc1008282 0x8383c3c3 0xc2c10000 0x83838484
|
||||
0xc4c4c4c1 0xc1008282 0x8383c4c4 0xc4c1c100
|
||||
0x82828383 0xc4c4c4c1 0xc1008282 0x8383c4c4
|
||||
0xc3c100c4 0x81c4c3c2 0x00818181 0xc4c4c3c2
|
||||
0x00818282 0x00c4c4c2 0xc2008182 0x8200c4c4
|
||||
0xc3c20081 0x82828484 0xc4c4c3c2 0x00818282
|
||||
0x8484c4c4 0xc2c20081 0x82828484 0xc4c4c2c1
|
||||
0x81828383 0x8585c4c4 0xc3c20081 0x82828484
|
||||
0xc4c4c3c2 0x00818282 0x8484c4c4 0xc3c20081
|
||||
0x82828484 0xc6c5c3c1 0x00c5c5c3 0xc2008182
|
||||
0x828484c5 0xc5c3c200 0x81828284 0x84c4c4c3
|
||||
0xc2008182 0x828484c4 0xc4c2c181 0x82838385
|
||||
0x85c5c5c3 0xc2008182 0x828484c5 0xc5c3c200
|
||||
0x81828284 0x84c5c5c3 0xc2008182 0x82848400
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x378a6e05 0x0ae64a6c 0x00000000 0x50050000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00b40000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x86828786 0x87c8cb8a 0x8380c982 0x00c8ca86
|
||||
0x8383c583 0x83c1c58c 0x8883c78b 0x8780c28c
|
||||
0x8485c682 0xc3c4c4c4 0xc5c6c7c8 0xcfcecdcc
|
||||
0xcccdcec1 0xc1c1c1c2 0xc4c6c7ce 0xcecfcfcf
|
||||
0xcecec6c7 0xc8c9caca 0xcbcbd2d2 0xd2d2d0ce
|
||||
0xcc8100c1 0xc3c5c6c7 0xc8d0d0d1 0xd1d1d0cf
|
||||
0xdeee6be7 0x5fede2eb 0xce08ce09 0xce0ace0a
|
||||
0x4e0b4f0b 0x4f0c4f0c 0x4f0d4f0d 0x540a540b
|
||||
0x540c540b 0x540c510a 0x510b510c 0xd10c510d
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0xde0fde10 0xde115e12
|
||||
0xde12de12 0xde135e14 0x5e0cde0d 0xde0e5e10
|
||||
0x5e105e10 0x5e11de11 0xde0ede0f 0xde10de11
|
||||
0x5e12de12 0x5e135e13 0xde0f5e11 0x5e12de13
|
||||
0x5e13de13 0xde14de14 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00848484 0x84848484 0x84000000 0x00e4d5d4
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
>;
|
||||
};
|
||||
@@ -1,263 +0,0 @@
|
||||
/* Factory EEPROM for PCIe MT7916 radio - Acer Connect Vero W */
|
||||
/* Offset 0xa0000 in the "factory" GPT partition on eMMC */
|
||||
|
||||
&pcie_wifi {
|
||||
mediatek,eeprom-data = <
|
||||
0x16790000 0x000c4326 0x60000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x50750000 0x07670700 0x00000400 0x50710000
|
||||
0x00000000 0x00000400 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0xb101e748 0xf57f5e99
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000800 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x12924848 0x003e003f 0x3a100000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x81a3a380
|
||||
0xa4910091 0x00910091 0x00910000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x000a0000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x0000c500 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000013 0x12120000 0x00000000
|
||||
0x00000000 0x00000303 0x03030303 0x03030303
|
||||
0x03030303 0x03030505 0x05050505 0x05050505
|
||||
0x05050505 0x05050000 0x001b1919 0x19181818
|
||||
0x180f0006 0x1c0e080a 0x170e080a 0x170d0809
|
||||
0x170d020a 0x0e0d020a 0x0e0d020a 0x0e0b020a
|
||||
0x0e22222c 0x2c2b2b2b 0x2b2b2b2b 0x2b2b2b2b
|
||||
0x2b2b2b2b 0x2b2b2b2b 0x2b000000 0x00000000
|
||||
0x00000000 0x001e201e 0x201e2020 0x201e201e
|
||||
0x20201e20 0x20272929 0x29272727 0x27272929
|
||||
0x29272727 0x27000000 0x00000000 0x00000000
|
||||
0x00000000 0x00cdcfcf 0xcfcfcf00 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x007f7f20 0x2530363c 0x41014347 0x4c52575c
|
||||
0x7f7f0000 0x00000000 0x00000000 0x00000000
|
||||
0x0000007f 0x7f252834 0x3c424a01 0x4d4f555f
|
||||
0x636e7f7f 0x7f7f202a 0x303b444a 0x014d5158
|
||||
0x5f666e7f 0x7f7f7f7f 0x8080c5c5 0xcbcbd9d9
|
||||
0xe1e1ebeb 0x40408080 0xcfcfdbdb 0xe3e3efef
|
||||
0xf7f74040 0x8080c1c1 0xcdcdd5d5 0xe1e1eded
|
||||
0x40408080 0xbbbbc7c7 0xcfcfdbdb 0xe7e74040
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0xb0900000 0x0000c0f0 0xf8000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x02000200 0x02000200 0x02000200 0x02000200
|
||||
0x02000200 0x02000200 0x02000200 0x02000200
|
||||
0x02000200 0x02000200 0x02000200 0x02000200
|
||||
0x02000200 0x02000200 0x02000200 0x02000200
|
||||
0x000000c6 0xc6c6c6c4 0x0000c5c5 0xc5c4c1c1
|
||||
0x818383c3 0xc3c2c100 0x81848400 0xc5c5c4c1
|
||||
0xc1818383 0x8585c3c3 0xc2c10081 0x84848686
|
||||
0xc5c5c4c1 0xc1818383 0x8585c5c5 0xc4c1c181
|
||||
0x83838585 0xc5c5c4c1 0xc1818383 0x8585c6c6
|
||||
0xc4c300c6 0x00c6c4c3 0xc1008181 0xc6c6c4c3
|
||||
0xc1008181 0x00c5c5c3 0xc2008182 0x8200c6c6
|
||||
0xc4c3c100 0x81818686 0xc6c6c4c3 0xc1008181
|
||||
0x8686c5c5 0xc3c20081 0x82828787 0xc5c5c3c2
|
||||
0x00818282 0x8787c6c6 0xc4c3c100 0x81818686
|
||||
0xc6c6c4c3 0xc1008181 0x8686c6c6 0xc4c3c100
|
||||
0x81818686 0xc6c6c4c3 0x00c6c6c4 0xc3c10081
|
||||
0x818686c6 0xc6c4c3c1 0x00818186 0x86c5c5c3
|
||||
0xc2008182 0x828787c5 0xc5c3c281 0x82838388
|
||||
0x88c6c6c4 0xc3c10081 0x818686c6 0xc6c4c3c1
|
||||
0x00818186 0x86c6c6c4 0xc3c10081 0x81868600
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00b70000 0x00b70000 0x00000000 0x00000000
|
||||
0x01000000 0x0000c400 0xb8008700 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0xc7c60000 0x89898987 0x87858381 0x898a8b8b
|
||||
0x8a898785 0x88898988 0x87868584 0x00000000
|
||||
0x00000000 0xcccfcecd 0xcdcacecd 0xcbcfcece
|
||||
0xcfcfcfc7 0xcececdce 0xc7cfcec7 0xcfcfcfcf
|
||||
0xcfcf0000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x7fe2f0e4 0x00000000 0xa4de24df 0xa4e0a4e1
|
||||
0xa4e1a4de 0x24dfa4e0 0xa4e1a4e1 0xa4dea4df
|
||||
0xa4e0a4e1 0xa4e1a4de 0xa4df24e0 0xa4e1a4e1
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0xde0fde0f 0xde0fde10
|
||||
0xde11de11 0x5e12de12 0xde10de10 0xde10de11
|
||||
0xde12de12 0xde13de13 0x5a085a09 0x5a0a5a0a
|
||||
0x5a0a5a0a 0x5a0a5a0a 0x5a055a06 0x5a075a08
|
||||
0x5a085a09 0x5a095a09 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00ded453
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
0x00000000 0x00000000 0x00000000 0x00000000
|
||||
>;
|
||||
};
|
||||
@@ -1,63 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
/dts-v1/;
|
||||
#include "mt7986a-acer-connect-vero-w6m-common.dtsi"
|
||||
#include "mt7986a-acer-connect-vero-w6m-pcie-eeprom.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Acer Connect Vero W6m";
|
||||
compatible = "acer,connect-vero-w", "mediatek,mt7986a";
|
||||
|
||||
aliases {
|
||||
serial0 = &uart0;
|
||||
led-boot = &led_status;
|
||||
led-failsafe = &led_status;
|
||||
led-running = &led_status;
|
||||
led-upgrade = &led_status;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
led-controller@30 {
|
||||
compatible = "kinetic,ktd2026";
|
||||
reg = <0x30>;
|
||||
vin-supply = <®_5v>;
|
||||
vio-supply = <®_3p3v>;
|
||||
|
||||
led_status: multi-led {
|
||||
color = <LED_COLOR_ID_RGB>;
|
||||
function = LED_FUNCTION_STATUS;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
led@0 {
|
||||
reg = <0>;
|
||||
color = <LED_COLOR_ID_RED>;
|
||||
};
|
||||
|
||||
led@1 {
|
||||
reg = <1>;
|
||||
color = <LED_COLOR_ID_GREEN>;
|
||||
};
|
||||
|
||||
led@2 {
|
||||
reg = <2>;
|
||||
color = <LED_COLOR_ID_BLUE>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&nvmem {
|
||||
eeprom_factory_a0000: eeprom@a0000 {
|
||||
reg = <0xa0000 0x1000>;
|
||||
};
|
||||
|
||||
precal_factory_a1010: precal@a1010 {
|
||||
reg = <0xa1010 0x62810>;
|
||||
};
|
||||
};
|
||||
|
||||
&swport0 {
|
||||
label = "internet";
|
||||
};
|
||||
@@ -1,86 +0,0 @@
|
||||
image cfg.ext4 {
|
||||
empty = true
|
||||
temporary = true
|
||||
size = 128M
|
||||
ext4 {
|
||||
label = "cfg"
|
||||
use-mke2fs = true
|
||||
features = "uninit_bg"
|
||||
extraargs = "-m 0 -i 4096"
|
||||
}
|
||||
}
|
||||
|
||||
image var.ext4 {
|
||||
empty = true
|
||||
temporary = true
|
||||
size = 128M
|
||||
ext4 {
|
||||
label = "var"
|
||||
use-mke2fs = true
|
||||
features = "uninit_bg"
|
||||
extraargs = "-m 0 -i 4096"
|
||||
}
|
||||
}
|
||||
|
||||
image #INFIX_ID##VERSION#-vero-w-#TARGET#.img {
|
||||
hdimage {
|
||||
partition-table-type = "gpt"
|
||||
gpt-no-backup = true
|
||||
}
|
||||
|
||||
/*
|
||||
* Factory partitions (1-4) -- secure boot, do not overwrite.
|
||||
* Offsets and sizes match the stock Acer GPT exactly.
|
||||
* No image data is written, preserving factory content.
|
||||
*/
|
||||
partition u-boot-env {
|
||||
offset = 8192s
|
||||
size = 1024s
|
||||
}
|
||||
|
||||
partition factory {
|
||||
offset = 9216s
|
||||
size = 4096s
|
||||
}
|
||||
|
||||
partition fip {
|
||||
offset = 13312s
|
||||
size = 4096s
|
||||
}
|
||||
|
||||
/* Infix U-Boot, chainloaded by stock bootloader */
|
||||
partition infix-uboot {
|
||||
offset = 17408s
|
||||
image = "u-boot.bin"
|
||||
size = 32M
|
||||
}
|
||||
|
||||
partition aux {
|
||||
partition-uuid = D4EF35A0-0652-45A1-B3DE-D63339C82035
|
||||
image = "aux.ext4"
|
||||
}
|
||||
|
||||
partition primary {
|
||||
partition-type-uuid = 0FC63DAF-8483-4772-8E79-3D69D8477DE4
|
||||
bootable = true
|
||||
size = 250M
|
||||
image = "rootfs.squashfs"
|
||||
}
|
||||
|
||||
partition secondary {
|
||||
partition-type-uuid = 0FC63DAF-8483-4772-8E79-3D69D8477DE4
|
||||
bootable = true
|
||||
size = 250M
|
||||
image = "rootfs.squashfs"
|
||||
}
|
||||
|
||||
partition cfg {
|
||||
partition-uuid = 7aa497f0-73b5-47e5-b2ab-8752d8a48105
|
||||
image = "cfg.ext4"
|
||||
}
|
||||
|
||||
partition var {
|
||||
partition-uuid = 8046A06A-E45A-4A14-A6AD-6684704A393F
|
||||
image = "var.ext4"
|
||||
}
|
||||
}
|
||||
@@ -1,488 +0,0 @@
|
||||
{
|
||||
"ieee802-dot1ab-lldp:lldp": {
|
||||
"infix-lldp:enabled": true
|
||||
},
|
||||
"ietf-hardware:hardware": {
|
||||
"component": [
|
||||
{
|
||||
"name": "USB",
|
||||
"class": "infix-hardware:usb",
|
||||
"state": {
|
||||
"admin-state": "unlocked"
|
||||
}
|
||||
},
|
||||
{
|
||||
"class": "infix-hardware:usb",
|
||||
"name": "USB2",
|
||||
"state": {
|
||||
"admin-state": "unlocked"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "radio0",
|
||||
"class": "infix-hardware:wifi",
|
||||
"infix-hardware:wifi-radio": {
|
||||
"country-code": "DE",
|
||||
"band": "2.4GHz",
|
||||
"channel": "auto"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "radio1",
|
||||
"class": "infix-hardware:wifi",
|
||||
"infix-hardware:wifi-radio": {
|
||||
"country-code": "DE",
|
||||
"band": "6GHz",
|
||||
"channel": "auto"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "radio2",
|
||||
"class": "infix-hardware:wifi",
|
||||
"infix-hardware:wifi-radio": {
|
||||
"country-code": "DE",
|
||||
"band": "5GHz",
|
||||
"channel": "auto"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"ietf-interfaces:interfaces": {
|
||||
"interface": [
|
||||
{
|
||||
"name": "br0",
|
||||
"type": "infix-if-type:bridge",
|
||||
"ietf-ip:ipv4": {
|
||||
"address": [
|
||||
{
|
||||
"ip": "192.168.0.1",
|
||||
"prefix-length": 24
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "lan1",
|
||||
"type": "infix-if-type:ethernet",
|
||||
"ietf-ip:ipv6": {},
|
||||
"infix-interfaces:bridge-port": {
|
||||
"bridge": "br0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "lan2",
|
||||
"type": "infix-if-type:ethernet",
|
||||
"ietf-ip:ipv6": {},
|
||||
"infix-interfaces:bridge-port": {
|
||||
"bridge": "br0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "lan3",
|
||||
"type": "infix-if-type:ethernet",
|
||||
"ietf-ip:ipv6": {},
|
||||
"infix-interfaces:bridge-port": {
|
||||
"bridge": "br0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "lo",
|
||||
"type": "infix-if-type:loopback",
|
||||
"ietf-ip:ipv4": {
|
||||
"address": [
|
||||
{
|
||||
"ip": "127.0.0.1",
|
||||
"prefix-length": 8
|
||||
}
|
||||
]
|
||||
},
|
||||
"ietf-ip:ipv6": {
|
||||
"address": [
|
||||
{
|
||||
"ip": "::1",
|
||||
"prefix-length": 128
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "internet",
|
||||
"type": "infix-if-type:ethernet",
|
||||
"ietf-ip:ipv4": {
|
||||
"infix-dhcp-client:dhcp": {
|
||||
"option": [
|
||||
{
|
||||
"id": "ntp-server"
|
||||
},
|
||||
{
|
||||
"id": "broadcast"
|
||||
},
|
||||
{
|
||||
"id": "domain"
|
||||
},
|
||||
{
|
||||
"id": "hostname",
|
||||
"value": "auto"
|
||||
},
|
||||
{
|
||||
"id": "dns-server"
|
||||
},
|
||||
{
|
||||
"id": "router"
|
||||
},
|
||||
{
|
||||
"id": "netmask"
|
||||
},
|
||||
{
|
||||
"id": "vendor-class",
|
||||
"value": "Acer Connect Vero W"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"ietf-ip:ipv6": {
|
||||
"infix-dhcpv6-client:dhcp": {
|
||||
"option": [
|
||||
{
|
||||
"id": "ntp-server"
|
||||
},
|
||||
{
|
||||
"id": "client-fqdn"
|
||||
},
|
||||
{
|
||||
"id": "domain-search"
|
||||
},
|
||||
{
|
||||
"id": "dns-server"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "wifi0-ap",
|
||||
"type": "infix-if-type:wifi",
|
||||
"infix-interfaces:wifi": {
|
||||
"radio": "radio0",
|
||||
"access-point": {
|
||||
"ssid": "Infix",
|
||||
"security": {
|
||||
"secret": "wifi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"infix-interfaces:bridge-port": {
|
||||
"bridge": "br0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "wifi1-ap",
|
||||
"type": "infix-if-type:wifi",
|
||||
"infix-interfaces:wifi": {
|
||||
"radio": "radio1",
|
||||
"access-point": {
|
||||
"ssid": "Infix6G",
|
||||
"security": {
|
||||
"secret": "wifi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"infix-interfaces:bridge-port": {
|
||||
"bridge": "br0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "wifi2-ap",
|
||||
"type": "infix-if-type:wifi",
|
||||
"infix-interfaces:wifi": {
|
||||
"radio": "radio2",
|
||||
"access-point": {
|
||||
"ssid": "Infix5G",
|
||||
"security": {
|
||||
"secret": "wifi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"infix-interfaces:bridge-port": {
|
||||
"bridge": "br0"
|
||||
}
|
||||
}
|
||||
|
||||
]
|
||||
},
|
||||
"ietf-keystore:keystore": {
|
||||
"asymmetric-keys": {
|
||||
"asymmetric-key": [
|
||||
{
|
||||
"name": "genkey",
|
||||
"public-key-format": "infix-crypto-types:ssh-public-key-format",
|
||||
"public-key": "",
|
||||
"private-key-format": "infix-crypto-types:rsa-private-key-format",
|
||||
"cleartext-private-key": "",
|
||||
"certificates": {}
|
||||
}
|
||||
]
|
||||
},
|
||||
"symmetric-keys": {
|
||||
"symmetric-key": [
|
||||
{
|
||||
"name": "wifi",
|
||||
"cleartext-symmetric-key": "aW5maXhpbmZpeA==",
|
||||
"key-format": "infix-crypto-types:passphrase-key-format"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"ietf-netconf-acm:nacm": {
|
||||
"enable-nacm": true,
|
||||
"read-default": "permit",
|
||||
"write-default": "permit",
|
||||
"exec-default": "permit",
|
||||
"groups": {
|
||||
"group": [
|
||||
{
|
||||
"name": "admin",
|
||||
"user-name": [
|
||||
"admin"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "operator",
|
||||
"user-name": []
|
||||
},
|
||||
{
|
||||
"name": "guest",
|
||||
"user-name": []
|
||||
}
|
||||
]
|
||||
},
|
||||
"rule-list": [
|
||||
{
|
||||
"name": "admin-acl",
|
||||
"group": [
|
||||
"admin"
|
||||
],
|
||||
"rule": [
|
||||
{
|
||||
"name": "permit-all",
|
||||
"module-name": "*",
|
||||
"access-operations": "*",
|
||||
"action": "permit",
|
||||
"comment": "Allow 'admin' group complete access to all operations and data."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "operator-acl",
|
||||
"group": [
|
||||
"operator"
|
||||
],
|
||||
"rule": [
|
||||
{
|
||||
"name": "permit-system-rpcs",
|
||||
"module-name": "ietf-system",
|
||||
"rpc-name": "*",
|
||||
"access-operations": "exec",
|
||||
"action": "permit",
|
||||
"comment": "Operators can reboot, shutdown, and set system time."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "guest-acl",
|
||||
"group": [
|
||||
"guest"
|
||||
],
|
||||
"rule": [
|
||||
{
|
||||
"name": "deny-all-write+exec",
|
||||
"module-name": "*",
|
||||
"access-operations": "create update delete exec",
|
||||
"action": "deny",
|
||||
"comment": "Guests cannot change anything or exec rpcs."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "default-deny-all",
|
||||
"group": [
|
||||
"*"
|
||||
],
|
||||
"rule": [
|
||||
{
|
||||
"name": "deny-password-access",
|
||||
"path": "/ietf-system:system/authentication/user/password",
|
||||
"access-operations": "*",
|
||||
"action": "deny",
|
||||
"comment": "No user except admins can access password hashes."
|
||||
},
|
||||
{
|
||||
"name": "deny-keystore-access",
|
||||
"module-name": "ietf-keystore",
|
||||
"access-operations": "*",
|
||||
"action": "deny",
|
||||
"comment": "No user except admins can access cryptographic keys."
|
||||
},
|
||||
{
|
||||
"name": "deny-truststore-access",
|
||||
"module-name": "ietf-truststore",
|
||||
"access-operations": "*",
|
||||
"action": "deny",
|
||||
"comment": "No user except admins can access trust store."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"ietf-netconf-server:netconf-server": {
|
||||
"listen": {
|
||||
"endpoints": {
|
||||
"endpoint": [
|
||||
{
|
||||
"name": "default-ssh",
|
||||
"ssh": {
|
||||
"tcp-server-parameters": {
|
||||
"local-bind": [
|
||||
{
|
||||
"local-address": "::"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ssh-server-parameters": {
|
||||
"server-identity": {
|
||||
"host-key": [
|
||||
{
|
||||
"name": "default-key",
|
||||
"public-key": {
|
||||
"central-keystore-reference": "genkey"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"ietf-system:system": {
|
||||
"hostname": "acer-connect-%m",
|
||||
"ntp": {
|
||||
"server": [
|
||||
{
|
||||
"name": "default",
|
||||
"udp": {
|
||||
"address": "pool.ntp.org"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"authentication": {
|
||||
"user": [
|
||||
{
|
||||
"name": "admin",
|
||||
"password": "$factory$",
|
||||
"infix-system:shell": "bash"
|
||||
}
|
||||
]
|
||||
},
|
||||
"infix-system:motd-banner": "Li0tLS0tLS0uCnwgIC4gLiAgfCBJbmZpeCBPUyDigJQgSW1tdXRhYmxlLkZyaWVuZGx5LlNlY3VyZQp8LS4gdiAuLXwgaHR0cHM6Ly9rZXJuZWxraXQub3JnCictJy0tLSctJwo="
|
||||
},
|
||||
"infix-dhcp-server:dhcp-server": {
|
||||
"option": [
|
||||
{
|
||||
"id": "ntp-server",
|
||||
"address": "auto"
|
||||
},
|
||||
{
|
||||
"id": "dns-server",
|
||||
"address": "auto"
|
||||
},
|
||||
{
|
||||
"id": "router",
|
||||
"address": "auto"
|
||||
}
|
||||
],
|
||||
"subnet": [
|
||||
{
|
||||
"subnet": "192.168.0.0/24",
|
||||
"pool": {
|
||||
"start-address": "192.168.0.100",
|
||||
"end-address": "192.168.0.250"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"infix-firewall:firewall": {
|
||||
"default": "wan",
|
||||
"zone": [
|
||||
{
|
||||
"name": "lan",
|
||||
"action": "accept",
|
||||
"interface": [
|
||||
"br0"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "wan",
|
||||
"action": "drop",
|
||||
"interface": [
|
||||
"internet"
|
||||
],
|
||||
"service": [
|
||||
"dhcpv6-client"
|
||||
]
|
||||
}
|
||||
],
|
||||
"policy": [
|
||||
{
|
||||
"name": "lan-to-wan",
|
||||
"action": "accept",
|
||||
"ingress": [
|
||||
"lan"
|
||||
],
|
||||
"egress": [
|
||||
"wan"
|
||||
],
|
||||
"masquerade": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"infix-meta:meta": {
|
||||
"version": "1.7"
|
||||
},
|
||||
"infix-services:mdns": {
|
||||
"enabled": true
|
||||
},
|
||||
"infix-services:ssh": {
|
||||
"enabled": true,
|
||||
"hostkey": [
|
||||
"genkey"
|
||||
],
|
||||
"listen": [
|
||||
{
|
||||
"name": "ipv4",
|
||||
"address": "0.0.0.0",
|
||||
"port": 22
|
||||
},
|
||||
{
|
||||
"name": "ipv6",
|
||||
"address": "::",
|
||||
"port": 22
|
||||
}
|
||||
]
|
||||
},
|
||||
"infix-services:web": {
|
||||
"enabled": true,
|
||||
"console": {
|
||||
"enabled": true
|
||||
},
|
||||
"netbrowse": {
|
||||
"enabled": true
|
||||
},
|
||||
"restconf": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
config BR2_PACKAGE_ALDER_ALDER
|
||||
bool "Alder"
|
||||
depends on BR2_aarch64
|
||||
select BR2_PACKAGE_LINUX_FIRMWARE_INSIDE_SECURE_MINIFW
|
||||
help
|
||||
Alder
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
# Locally calculated
|
||||
sha256 d2f96418893ac66156d0e691cda189b0d85ae1d814065d1d9aa1845383100f46 LICENSE
|
||||
@@ -5,8 +5,6 @@ config BR2_PACKAGE_BANANAPI_BPI_R3
|
||||
select BR2_PACKAGE_LINUX_FIRMWARE
|
||||
select BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK
|
||||
select BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT7986
|
||||
select BR2_PACKAGE_LINUX_FIRMWARE_AIROHA_EN8811H
|
||||
select BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT7916
|
||||
select SDCARD_AUX
|
||||
help
|
||||
Build Banana PI R3 support
|
||||
|
||||
@@ -1,29 +1,20 @@
|
||||
# Banana Pi BPI-R3 / BPI-R3 Mini
|
||||
# Banana Pi BPI-R3
|
||||
|
||||
<img src="bananapi-bpi-r3.webp" alt="The board" width=800 padding=10>
|
||||
|
||||
## Overview
|
||||
|
||||
The Banana Pi BPI-R3 and BPI-R3 Mini are high-performance networking
|
||||
boards with full Infix support for all enabled features including
|
||||
Ethernet, WiFi, and SFP interfaces.
|
||||
|
||||
Both boards share the same SoC and most peripherals. The key
|
||||
differences are:
|
||||
|
||||
| Feature | BPI-R3 | BPI-R3 Mini |
|
||||
|-----------------|--------------------|-------------------------|
|
||||
| Ethernet switch | Yes (4x LAN + WAN) | No (WAN/LAN ports only) |
|
||||
| SD card slot | Yes | No |
|
||||
The Banana Pi R3 is a high-performance networking board with full Infix
|
||||
support for all enabled features including switched Ethernet ports, WiFi,
|
||||
and SFP interfaces.
|
||||
|
||||
### Hardware Features
|
||||
|
||||
- MediaTek MT7986 ARM Cortex-A53 quad-core processor @ 2.0 GHz
|
||||
- 2 GB DDR4 RAM
|
||||
- 8 GB eMMC storage
|
||||
- microSD card slot (BPI-R3 only)
|
||||
- 5x Gigabit Ethernet ports with switch core (BPI-R3 only)
|
||||
- 2x SFP cages for fiber connectivity (1G/2.5G) (BPI-R3 only)
|
||||
- 8 GB eMMC storage + microSD card slot
|
||||
- 5x Gigabit Ethernet ports (4x LAN, 1x WAN)
|
||||
- 2x SFP cages for fiber connectivity (1G/2.5G)
|
||||
- Dual-band WiFi (2.4 GHz + 5 GHz)
|
||||
- USB 3.0 port
|
||||
- Mini PCIe slot
|
||||
@@ -32,20 +23,16 @@ differences are:
|
||||
|
||||
Infix comes preconfigured with:
|
||||
|
||||
- **LAN ports** (lan1-lan4): Bridged for internal networking (BPI-R3 only)
|
||||
- **LAN ports** (lan1-lan4): Bridged for internal networking
|
||||
- **WAN port**: DHCP client enabled for internet connectivity
|
||||
- **SFP ports** (sfp1, sfp2): Available for configuration (BPI-R3 only)
|
||||
- **SFP ports** (sfp1, sfp2): Available for configuration
|
||||
- **WiFi interfaces** (wifi0, wifi1): Available for configuration
|
||||
|
||||
## Getting Started
|
||||
|
||||
### BPI-R3: Quick Start with SD Card
|
||||
### Quick Start with SD Card
|
||||
|
||||
The easiest way to get started with the BPI-R3 is using an SD card:
|
||||
|
||||
> [!NOTE]
|
||||
> SD card boot works but we have observed stability issues. For production
|
||||
> use or long-term reliability, we recommend installing to eMMC (see below).
|
||||
The easiest way to get started is using an SD card:
|
||||
|
||||
1. **Download the SD card image:** [infix-bpi-r3-sdcard.img][2]
|
||||
2. **Flash the image to an SD card:** see [this guide][0]
|
||||
@@ -58,63 +45,67 @@ The easiest way to get started with the BPI-R3 is using an SD card:
|
||||
- Connect to LAN port or console (115200 8N1)
|
||||
- Default login: `admin` / `admin`
|
||||
|
||||
### BPI-R3 Mini: Getting Started
|
||||
|
||||
The BPI-R3 Mini does not have an SD card slot, so you must install
|
||||
directly to eMMC. See [Installing to eMMC — BPI-R3
|
||||
Mini](#bpi-r3-mini) below.
|
||||
|
||||
### Boot Switch Reference
|
||||
|
||||
The BPI-R3 has a 4-position DIP switch that controls boot media:
|
||||
|
||||
<img align="right" src="bootstrap-switch.webp" alt="DIP switches" width=200 padding=10>
|
||||
|
||||
| ABCD | Mode | Description |
|
||||
|------|----------|---------------------------------------|
|
||||
| 0000 | SD card | Boot from microSD card |
|
||||
| 0101 | SPI NAND | Boot from SPI NAND (advanced users) |
|
||||
| 1001 | eMMC | Boot from internal eMMC (recommended) |
|
||||
| Position | Mode | Description |
|
||||
|----------|-------------|---------------------------------------|
|
||||
| 0000 | SD card | Boot from microSD card (recommended) |
|
||||
| 0110 | eMMC | Boot from internal eMMC storage |
|
||||
| 1010 | SPI NAND | Boot from SPI NAND (advanced users) |
|
||||
|
||||
> [!NOTE]
|
||||
> Switch position is read from left to right: "0" = OFF, "1" = ON.
|
||||
> Switch position is read from left to right: "0" = OFF, "1" = ON.
|
||||
> When the DIP switch is in the "UP" position it is OFF(0).
|
||||
|
||||
## Installing to eMMC
|
||||
## Advanced: Installing to eMMC
|
||||
|
||||
For production deployments or better performance, you can install Infix
|
||||
to the internal eMMC storage.
|
||||
to the internal eMMC storage. This is more complex but provides faster
|
||||
boot times and eliminates the external SD card.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> While Infix boots on both SD card and eMMC on the BPI-R3, we have
|
||||
> observed stability issues with SD cards on this platform. **eMMC is
|
||||
> recommended** for reliable operation.
|
||||
### Why Use eMMC?
|
||||
|
||||
**Advantages:**
|
||||
|
||||
- Faster boot and better performance
|
||||
- No external SD card to manage
|
||||
- More robust for industrial/embedded deployments
|
||||
|
||||
**Disadvantages:**
|
||||
|
||||
- More complex installation process
|
||||
- Requires intermediate NAND boot step
|
||||
- Harder to recover from errors
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- FTDI USB-to-serial cable (3.3V) for console access
|
||||
- microSD card with Infix (for initial boot)
|
||||
- USB flash drive (FAT32 formatted)
|
||||
- microSD card with Infix, for initial boot (BPI-R3 only)
|
||||
- Downloaded files (see below)
|
||||
|
||||
### Required Files
|
||||
|
||||
Download and place these files on a FAT32-formatted USB drive:
|
||||
|
||||
1. **Infix eMMC image:**
|
||||
- [infix-bpi-r3-emmc.img][3] (Complete system image)
|
||||
2. **eMMC bootloader** (extracted from):
|
||||
- [bpi-r3-emmc-boot-2025.01-latest.tar.gz][4]
|
||||
- Extract `bl2.img` from the tarball to your USB drive
|
||||
3. **Intermediate NAND bootloader** (BPI-R3 only, from Frank-W's U-Boot):
|
||||
1. **Intermediate NAND bootloader** (from Frank-W's U-Boot):
|
||||
- [bpi-r3_spim-nand_bl2.img][5] (BL2 loader)
|
||||
- [bpi-r3_spim-nand_fip.bin][6] (FIP image)
|
||||
2. **Infix eMMC image:**
|
||||
- [infix-bpi-r3-emmc.img][3] (Complete system image)
|
||||
3. **eMMC bootloader** (extracted from):
|
||||
- [bpi-r3-emmc-boot-2025.01-latest.tar.gz][4]
|
||||
- Extract `bl2.img` from the tarball to your USB drive
|
||||
|
||||
> [!WARNING]
|
||||
> The following process involves multiple boot mode changes. Take your
|
||||
> time and verify each step carefully.
|
||||
> time verify each step carefully.
|
||||
|
||||
### BPI-R3
|
||||
### Installation Steps
|
||||
|
||||
#### Step 1: Boot from SD card
|
||||
|
||||
@@ -150,7 +141,6 @@ From the U-Boot prompt:
|
||||
usb start
|
||||
fatload usb 0:1 0x50000000 infix-bpi-r3-emmc.img
|
||||
setexpr blocks ${filesize} / 0x200
|
||||
mmc dev 0
|
||||
mmc write 0x50000000 0x0 ${blocks}
|
||||
```
|
||||
|
||||
@@ -177,49 +167,13 @@ mmc partconf 0 1 1 0
|
||||
|
||||
Your BPI-R3 should now boot Infix from internal eMMC storage!
|
||||
|
||||
### BPI-R3 Mini
|
||||
|
||||
The BPI-R3 Mini does not have an SD card slot, so you have to go
|
||||
through the factory-installed Linux (OpenWRT) to flash the Infix
|
||||
bootloader and OS to eMMC.
|
||||
|
||||
#### Step 1: Boot from NAND (factory default)
|
||||
|
||||
<img src="r3mini_nandboot2.png" alt="BPI-R3 Mini NAND boot switch position" width=400>
|
||||
|
||||
1. Ensure boot switches are set to NAND mode (factory default)
|
||||
2. Place `infix-bpi-r3-emmc.img` and `bl2.img` on a USB drive
|
||||
3. Power on and boot into Linux
|
||||
4. Mount the USB drive to `/mnt`
|
||||
|
||||
#### Step 2: Flash Infix to eMMC
|
||||
|
||||
From the Linux shell:
|
||||
|
||||
```
|
||||
echo 0 > /proc/sys/kernel/printk
|
||||
dd if=/mnt/infix-bpi-r3-emmc.img of=/dev/mmcblk0
|
||||
echo 0 > /sys/block/mmcblk0boot0/force_ro
|
||||
dd if=/mnt/bl2.img of=/dev/mmcblk0boot0
|
||||
sync
|
||||
```
|
||||
|
||||
#### Step 3: Boot from eMMC
|
||||
|
||||
<img src="r3mini_emmcboot.png" alt="BPI-R3 Mini eMMC boot switch position" width=400>
|
||||
|
||||
1. Power off the board
|
||||
2. Set boot switches to eMMC mode (see image above)
|
||||
3. Power on
|
||||
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Board won't boot
|
||||
|
||||
- Verify boot switch positions (check twice!)
|
||||
- Ensure power supply provides adequate current (12V/2A recommended)
|
||||
- Try booting from SD card with switches at **0000** (BPI-R3 only)
|
||||
- Try booting from SD card with switches at **0000**
|
||||
|
||||
### Can't break into U-Boot
|
||||
|
||||
@@ -231,9 +185,9 @@ sync
|
||||
|
||||
- Boot from NAND (**1010**) and verify eMMC image was written
|
||||
- Check USB drive contents - ensure all files are present
|
||||
- Re-run the eMMC boot configuration step
|
||||
- Re-run Step 5 (eMMC boot configuration)
|
||||
|
||||
### Reverting to SD card (BPI-R3 only)
|
||||
### Reverting to SD card
|
||||
|
||||
Simply set boot switches back to **0000** and boot from SD card. The
|
||||
eMMC installation does not affect SD card functionality.
|
||||
@@ -264,8 +218,8 @@ make aarch64
|
||||
./utils/mkimage.sh -odt emmc bananapi-bpi-r3
|
||||
```
|
||||
|
||||
[0]: https://www.kernelkit.org/posts/flashing-sdcard/
|
||||
[1]: https://www.kernelkit.org/infix/latest/
|
||||
[0]: https://kernelkit.org/posts/flashing-sdcard/
|
||||
[1]: https://kernelkit.org/infix/latest/
|
||||
[2]: https://github.com/kernelkit/infix/releases/download/latest-boot/infix-bpi-r3-sdcard.img
|
||||
[3]: https://github.com/kernelkit/infix/releases/download/latest-boot/infix-bpi-r3-emmc.img
|
||||
[4]: https://github.com/kernelkit/infix/releases/download/latest-boot/bpi-r3-emmc-boot-2025.01-latest.tar.gz
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
# Locally calculated
|
||||
sha256 dbe4eae8debbba8135297e15f24aeefef0b4c03781f3f9328db4398d58a728b3 LICENSE
|
||||
@@ -6,10 +6,9 @@ define BANANAPI_BPI_R3_LINUX_CONFIG_FIXUPS
|
||||
$(call KCONFIG_SET_OPT,CONFIG_I2C_GPIO,y)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_MTK_THERMAL,m)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_MTK_UART)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_MEDIATEK_WATCHDOG)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_MTK_WATCHDOG)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_MEDIATEK_GE_PHY)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_REALTEK_PHY)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_AIR_EN8811H_PHY,m)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_NET_VENDOR_MEDIATEK)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_NET_MEDIATEK_SOC)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_NET_DSA_MT7530,m)
|
||||
|
||||
@@ -1 +1 @@
|
||||
dtb-y += mediatek/mt7986a-bananapi-bpi-r3-sd.dtb mediatek/mt7986a-bananapi-bpi-r3-emmc.dtb mediatek/mt7986a-bananapi-bpi-r3-mini.dtb
|
||||
dtb-y += mediatek/mt7986a-bananapi-bpi-r3-sd.dtb mediatek/mt7986a-bananapi-bpi-r3-emmc.dtb
|
||||
|
||||
@@ -1,4 +1,2 @@
|
||||
#include <arm64/mediatek/mt7986a-bananapi-bpi-r3.dts>
|
||||
|
||||
#include "mt7986a-bananapi-bpi-r3.dtsi"
|
||||
#include "mt7986a-bananapi-bpi-r3-emmc.dtsi"
|
||||
|
||||
@@ -19,34 +19,4 @@ possible to use dtbo in sysboot unless present in syslinux.conf
|
||||
no-sd;
|
||||
no-sdio;
|
||||
status = "okay";
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
card@0 {
|
||||
compatible = "mmc-card";
|
||||
reg = <0>;
|
||||
|
||||
partitions {
|
||||
compatible = "gpt-partitions";
|
||||
|
||||
partition-factory {
|
||||
partname = "factory";
|
||||
|
||||
nvmem-layout {
|
||||
compatible = "fixed-layout";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
eeprom_factory_wmac: eeprom@0 {
|
||||
reg = <0x0 0x1000>;
|
||||
};
|
||||
|
||||
eeprom_factory_pcie: eeprom@a0000 {
|
||||
reg = <0xa0000 0x1000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
#include <arm64/mediatek/mt7986a-bananapi-bpi-r3-mini.dts>
|
||||
|
||||
#include "mt7986a-bananapi-bpi-r3.dtsi"
|
||||
#include "mt7986a-bananapi-bpi-r3-emmc.dtsi"
|
||||
|
||||
&phy0 {
|
||||
compatible = "ethernet-phy-id03a2.a411";
|
||||
};
|
||||
&phy1 {
|
||||
compatible = "ethernet-phy-id03a2.a411";
|
||||
};
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
#include "mt7986a-bananapi-bpi-r3.dtsi"
|
||||
#include "mt7986a-bananapi-bpi-r3-emmc.dtsi"
|
||||
@@ -1,4 +1,2 @@
|
||||
#include <arm64/mediatek/mt7986a-bananapi-bpi-r3.dts>
|
||||
|
||||
#include "mt7986a-bananapi-bpi-r3.dtsi"
|
||||
#include "mt7986a-bananapi-bpi-r3-sd.dtsi"
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#include <arm64/mediatek/mt7986a-bananapi-bpi-r3.dts>
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
infix {
|
||||
@@ -8,33 +10,6 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
/*
|
||||
From 236317dd4e55512933dcdaec3d0b4a0824f5e5bd Mon Sep 17 00:00:00 2001
|
||||
From: Shiji Yang <yangshiji66@outlook.com>
|
||||
Date: Sun, 10 Aug 2025 18:11:01 +0800
|
||||
Subject: [PATCH] arm64: dts: mediatek: mt7986: increase ATF reserved memory to
|
||||
256 kiB
|
||||
|
||||
The latest Mediatek open-source Trusted Firmware-A project has
|
||||
reserved 256 KiB for BL2 and BL31. It is better to increase the
|
||||
reserved memory region in the Linux kernel to protect the data.
|
||||
|
||||
https://github.com/openwrt/openwrt/blob/main/target/linux/mediatek/patches-6.12/199-arm64-dts-mediatek-mt7986-increase-ATF-reserved-memo.patch
|
||||
*/
|
||||
&secmon_reserved {
|
||||
reg = <0 0x43000000 0 0x40000>;
|
||||
};
|
||||
/*
|
||||
* The T-PHY's pcie-phy sub-node only claims clk40m ("ref") in the SoC
|
||||
* dtsi. CLK_TOP_PCIE_PHY_SEL ("da_ref") is left unclaimed, so the
|
||||
* kernel's clk_disable_unused late_initcall gates it — killing the
|
||||
* PCIe REFCLK output to the endpoint mid-probe. Wire it here so the
|
||||
* clock stays enabled while the PHY is active.
|
||||
*/
|
||||
&pcie_port {
|
||||
clocks = <&clk40m>, <&topckgen CLK_TOP_PCIE_PHY_SEL>;
|
||||
clock-names = "ref", "da_ref";
|
||||
};
|
||||
|
||||
&cpu_thermal {
|
||||
/delete-node/ trips;
|
||||
|
||||
@@ -51,11 +51,6 @@ image #INFIX_ID##VERSION#-bpi-r3-#TARGET#.img {
|
||||
size = 4096s
|
||||
}
|
||||
|
||||
partition en8811h_fw {
|
||||
size = 10M
|
||||
image = "en8811h-fw.bin"
|
||||
}
|
||||
|
||||
partition aux {
|
||||
partition-uuid = D4EF35A0-0652-45A1-B3DE-D63339C82035
|
||||
image = "aux.ext4"
|
||||
|
||||
|
Before Width: | Height: | Size: 111 KiB |
|
Before Width: | Height: | Size: 110 KiB |
@@ -17,24 +17,6 @@
|
||||
"state": {
|
||||
"admin-state": "unlocked"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "radio0",
|
||||
"class": "infix-hardware:wifi",
|
||||
"infix-hardware:wifi-radio": {
|
||||
"country-code": "DE",
|
||||
"band": "2.4GHz",
|
||||
"channel": "auto"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "radio1",
|
||||
"class": "infix-hardware:wifi",
|
||||
"infix-hardware:wifi-radio": {
|
||||
"country-code": "DE",
|
||||
"band": "5GHz",
|
||||
"channel": "auto"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -120,116 +102,54 @@
|
||||
"ietf-ip:ipv4": {
|
||||
"infix-dhcp-client:dhcp": {
|
||||
"option": [
|
||||
{
|
||||
"id": "ntp-server"
|
||||
},
|
||||
{
|
||||
"id": "broadcast"
|
||||
},
|
||||
{
|
||||
"id": "domain"
|
||||
},
|
||||
{
|
||||
"id": "hostname",
|
||||
"value": "auto"
|
||||
},
|
||||
{
|
||||
"id": "dns-server"
|
||||
},
|
||||
{
|
||||
"id": "router"
|
||||
},
|
||||
{
|
||||
"id": "netmask"
|
||||
},
|
||||
{
|
||||
"id": "vendor-class",
|
||||
"value": "Banana Pi BPI-R3"
|
||||
}
|
||||
{"id": "ntp-server"},
|
||||
{"id": "broadcast"},
|
||||
{"id": "domain"},
|
||||
{"id": "hostname"},
|
||||
{"id": "dns-server"},
|
||||
{"id": "router"},
|
||||
{"id": "netmask"},
|
||||
{"id": "vendor-class", "value": "Banana Pi BPI-R3"}
|
||||
]
|
||||
}
|
||||
},
|
||||
"ietf-ip:ipv6": {
|
||||
"infix-dhcpv6-client:dhcp": {
|
||||
"option": [
|
||||
{
|
||||
"id": "ntp-server"
|
||||
},
|
||||
{
|
||||
"id": "client-fqdn"
|
||||
},
|
||||
{
|
||||
"id": "domain-search"
|
||||
},
|
||||
{
|
||||
"id": "dns-server"
|
||||
}
|
||||
{"id": "ntp-server"},
|
||||
{"id": "client-fqdn"},
|
||||
{"id": "domain-search"},
|
||||
{"id": "dns-server"}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "wifi0-ap",
|
||||
"type": "infix-if-type:wifi",
|
||||
"infix-interfaces:wifi": {
|
||||
"radio": "radio0",
|
||||
"access-point": {
|
||||
"ssid": "Infix",
|
||||
"security": {
|
||||
"secret": "wifi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"infix-interfaces:bridge-port": {
|
||||
"bridge": "br0"
|
||||
}
|
||||
"name": "wifi0",
|
||||
"type": "infix-if-type:wifi"
|
||||
},
|
||||
{
|
||||
"name": "wifi1-ap",
|
||||
"type": "infix-if-type:wifi",
|
||||
"infix-interfaces:wifi": {
|
||||
"radio": "radio1",
|
||||
"access-point": {
|
||||
"ssid": "Infix5Ghz",
|
||||
"security": {
|
||||
"secret": "wifi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"infix-interfaces:bridge-port": {
|
||||
"bridge": "br0"
|
||||
}
|
||||
"name": "wifi1",
|
||||
"type": "infix-if-type:wifi"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ietf-keystore:keystore": {
|
||||
"asymmetric-keys": {
|
||||
"asymmetric-key": [
|
||||
{
|
||||
"name": "genkey",
|
||||
"public-key-format": "infix-crypto-types:ssh-public-key-format",
|
||||
"public-key": "",
|
||||
"private-key-format": "infix-crypto-types:rsa-private-key-format",
|
||||
"cleartext-private-key": "",
|
||||
"certificates": {}
|
||||
"asymmetric-keys": {
|
||||
"asymmetric-key": [
|
||||
{
|
||||
"name": "genkey",
|
||||
"public-key-format": "infix-crypto-types:ssh-public-key-format",
|
||||
"public-key": "",
|
||||
"private-key-format": "infix-crypto-types:rsa-private-key-format",
|
||||
"cleartext-private-key": "",
|
||||
"certificates": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"symmetric-keys": {
|
||||
"symmetric-key": [
|
||||
{
|
||||
"name": "wifi",
|
||||
"cleartext-symmetric-key": "aW5maXhpbmZpeA==",
|
||||
"key-format": "infix-crypto-types:passphrase-key-format"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"ietf-netconf-acm:nacm": {
|
||||
"enable-nacm": true,
|
||||
"read-default": "permit",
|
||||
"write-default": "permit",
|
||||
"exec-default": "permit",
|
||||
"groups": {
|
||||
"group": [
|
||||
{
|
||||
@@ -237,14 +157,6 @@
|
||||
"user-name": [
|
||||
"admin"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "operator",
|
||||
"user-name": []
|
||||
},
|
||||
{
|
||||
"name": "guest",
|
||||
"user-name": []
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -264,37 +176,6 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "operator-acl",
|
||||
"group": [
|
||||
"operator"
|
||||
],
|
||||
"rule": [
|
||||
{
|
||||
"name": "permit-system-rpcs",
|
||||
"module-name": "ietf-system",
|
||||
"rpc-name": "*",
|
||||
"access-operations": "exec",
|
||||
"action": "permit",
|
||||
"comment": "Operators can reboot, shutdown, and set system time."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "guest-acl",
|
||||
"group": [
|
||||
"guest"
|
||||
],
|
||||
"rule": [
|
||||
{
|
||||
"name": "deny-all-write+exec",
|
||||
"module-name": "*",
|
||||
"access-operations": "create update delete exec",
|
||||
"action": "deny",
|
||||
"comment": "Guests cannot change anything or exec rpcs."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "default-deny-all",
|
||||
"group": [
|
||||
@@ -302,25 +183,11 @@
|
||||
],
|
||||
"rule": [
|
||||
{
|
||||
"name": "deny-password-access",
|
||||
"name": "deny-password-read",
|
||||
"module-name": "ietf-system",
|
||||
"path": "/ietf-system:system/authentication/user/password",
|
||||
"access-operations": "*",
|
||||
"action": "deny",
|
||||
"comment": "No user except admins can access password hashes."
|
||||
},
|
||||
{
|
||||
"name": "deny-keystore-access",
|
||||
"module-name": "ietf-keystore",
|
||||
"access-operations": "*",
|
||||
"action": "deny",
|
||||
"comment": "No user except admins can access cryptographic keys."
|
||||
},
|
||||
{
|
||||
"name": "deny-truststore-access",
|
||||
"module-name": "ietf-truststore",
|
||||
"access-operations": "*",
|
||||
"action": "deny",
|
||||
"comment": "No user except admins can access trust store."
|
||||
"action": "deny"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -334,11 +201,7 @@
|
||||
"name": "default-ssh",
|
||||
"ssh": {
|
||||
"tcp-server-parameters": {
|
||||
"local-bind": [
|
||||
{
|
||||
"local-address": "::"
|
||||
}
|
||||
]
|
||||
"local-address": "::"
|
||||
},
|
||||
"ssh-server-parameters": {
|
||||
"server-identity": {
|
||||
@@ -430,7 +293,7 @@
|
||||
"policy": [
|
||||
{
|
||||
"name": "lan-to-wan",
|
||||
"action": "accept",
|
||||
"action": "accept",
|
||||
"ingress": [
|
||||
"lan"
|
||||
],
|
||||
@@ -442,7 +305,7 @@
|
||||
]
|
||||
},
|
||||
"infix-meta:meta": {
|
||||
"version": "1.7"
|
||||
"version": "1.6"
|
||||
},
|
||||
"infix-services:mdns": {
|
||||
"enabled": true
|
||||
@@ -478,3 +341,4 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
udevadm control --reload-rules
|
||||
udevadm trigger --subsystem-match=net --action=add
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"sfp1": {
|
||||
"comment": "Reports it supports autoneg, but if setting it, dagger crashes",
|
||||
"broken-autoneg": true
|
||||
},
|
||||
"sfp2": {
|
||||
"comment": "Reports it supports autoneg, but if setting it, dagger crashes",
|
||||
"broken-autoneg": true
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,446 +0,0 @@
|
||||
{
|
||||
"ieee802-dot1ab-lldp:lldp": {
|
||||
"infix-lldp:enabled": true
|
||||
},
|
||||
"ietf-hardware:hardware": {
|
||||
"component": [
|
||||
{
|
||||
"name": "USB",
|
||||
"class": "infix-hardware:usb",
|
||||
"state": {
|
||||
"admin-state": "unlocked"
|
||||
}
|
||||
},
|
||||
{
|
||||
"class": "infix-hardware:usb",
|
||||
"name": "USB2",
|
||||
"state": {
|
||||
"admin-state": "unlocked"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "radio0",
|
||||
"class": "infix-hardware:wifi",
|
||||
"infix-hardware:wifi-radio": {
|
||||
"country-code": "DE",
|
||||
"band": "2.4GHz",
|
||||
"channel": "auto"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "radio1",
|
||||
"class": "infix-hardware:wifi",
|
||||
"infix-hardware:wifi-radio": {
|
||||
"country-code": "DE",
|
||||
"band": "5GHz",
|
||||
"channel": "auto"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"ietf-interfaces:interfaces": {
|
||||
"interface": [
|
||||
{
|
||||
"name": "br0",
|
||||
"type": "infix-if-type:bridge",
|
||||
"ietf-ip:ipv4": {
|
||||
"address": [
|
||||
{
|
||||
"ip": "192.168.0.1",
|
||||
"prefix-length": 24
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "lan",
|
||||
"type": "infix-if-type:ethernet",
|
||||
"ietf-ip:ipv6": {},
|
||||
"infix-interfaces:bridge-port": {
|
||||
"bridge": "br0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "lo",
|
||||
"type": "infix-if-type:loopback",
|
||||
"ietf-ip:ipv4": {
|
||||
"address": [
|
||||
{
|
||||
"ip": "127.0.0.1",
|
||||
"prefix-length": 8
|
||||
}
|
||||
]
|
||||
},
|
||||
"ietf-ip:ipv6": {
|
||||
"address": [
|
||||
{
|
||||
"ip": "::1",
|
||||
"prefix-length": 128
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "wan",
|
||||
"type": "infix-if-type:ethernet",
|
||||
"ietf-ip:ipv4": {
|
||||
"infix-dhcp-client:dhcp": {
|
||||
"option": [
|
||||
{
|
||||
"id": "ntp-server"
|
||||
},
|
||||
{
|
||||
"id": "broadcast"
|
||||
},
|
||||
{
|
||||
"id": "domain"
|
||||
},
|
||||
{
|
||||
"id": "hostname",
|
||||
"value": "auto"
|
||||
},
|
||||
{
|
||||
"id": "dns-server"
|
||||
},
|
||||
{
|
||||
"id": "router"
|
||||
},
|
||||
{
|
||||
"id": "netmask"
|
||||
},
|
||||
{
|
||||
"id": "vendor-class",
|
||||
"value": "Banana Pi BPI-R3"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"ietf-ip:ipv6": {
|
||||
"infix-dhcpv6-client:dhcp": {
|
||||
"option": [
|
||||
{
|
||||
"id": "ntp-server"
|
||||
},
|
||||
{
|
||||
"id": "client-fqdn"
|
||||
},
|
||||
{
|
||||
"id": "domain-search"
|
||||
},
|
||||
{
|
||||
"id": "dns-server"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "wifi0-ap",
|
||||
"type": "infix-if-type:wifi",
|
||||
"infix-interfaces:wifi": {
|
||||
"radio": "radio0",
|
||||
"access-point": {
|
||||
"ssid": "Infix",
|
||||
"security": {
|
||||
"secret": "wifi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"infix-interfaces:bridge-port": {
|
||||
"bridge": "br0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "wifi1-ap",
|
||||
"type": "infix-if-type:wifi",
|
||||
"infix-interfaces:wifi": {
|
||||
"radio": "radio1",
|
||||
"access-point": {
|
||||
"ssid": "Infix5Ghz",
|
||||
"security": {
|
||||
"secret": "wifi"
|
||||
}
|
||||
}
|
||||
},
|
||||
"infix-interfaces:bridge-port": {
|
||||
"bridge": "br0"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"ietf-keystore:keystore": {
|
||||
"asymmetric-keys": {
|
||||
"asymmetric-key": [
|
||||
{
|
||||
"name": "genkey",
|
||||
"public-key-format": "infix-crypto-types:ssh-public-key-format",
|
||||
"public-key": "",
|
||||
"private-key-format": "infix-crypto-types:rsa-private-key-format",
|
||||
"cleartext-private-key": "",
|
||||
"certificates": {}
|
||||
}
|
||||
]
|
||||
},
|
||||
"symmetric-keys": {
|
||||
"symmetric-key": [
|
||||
{
|
||||
"name": "wifi",
|
||||
"cleartext-symmetric-key": "aW5maXhpbmZpeA==",
|
||||
"key-format": "infix-crypto-types:passphrase-key-format"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"ietf-netconf-acm:nacm": {
|
||||
"enable-nacm": true,
|
||||
"read-default": "permit",
|
||||
"write-default": "permit",
|
||||
"exec-default": "permit",
|
||||
"groups": {
|
||||
"group": [
|
||||
{
|
||||
"name": "admin",
|
||||
"user-name": [
|
||||
"admin"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "operator",
|
||||
"user-name": []
|
||||
},
|
||||
{
|
||||
"name": "guest",
|
||||
"user-name": []
|
||||
}
|
||||
]
|
||||
},
|
||||
"rule-list": [
|
||||
{
|
||||
"name": "admin-acl",
|
||||
"group": [
|
||||
"admin"
|
||||
],
|
||||
"rule": [
|
||||
{
|
||||
"name": "permit-all",
|
||||
"module-name": "*",
|
||||
"access-operations": "*",
|
||||
"action": "permit",
|
||||
"comment": "Allow 'admin' group complete access to all operations and data."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "operator-acl",
|
||||
"group": [
|
||||
"operator"
|
||||
],
|
||||
"rule": [
|
||||
{
|
||||
"name": "permit-system-rpcs",
|
||||
"module-name": "ietf-system",
|
||||
"rpc-name": "*",
|
||||
"access-operations": "exec",
|
||||
"action": "permit",
|
||||
"comment": "Operators can reboot, shutdown, and set system time."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "guest-acl",
|
||||
"group": [
|
||||
"guest"
|
||||
],
|
||||
"rule": [
|
||||
{
|
||||
"name": "deny-all-write+exec",
|
||||
"module-name": "*",
|
||||
"access-operations": "create update delete exec",
|
||||
"action": "deny",
|
||||
"comment": "Guests cannot change anything or exec rpcs."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "default-deny-all",
|
||||
"group": [
|
||||
"*"
|
||||
],
|
||||
"rule": [
|
||||
{
|
||||
"name": "deny-password-access",
|
||||
"path": "/ietf-system:system/authentication/user/password",
|
||||
"access-operations": "*",
|
||||
"action": "deny",
|
||||
"comment": "No user except admins can access password hashes."
|
||||
},
|
||||
{
|
||||
"name": "deny-keystore-access",
|
||||
"module-name": "ietf-keystore",
|
||||
"access-operations": "*",
|
||||
"action": "deny",
|
||||
"comment": "No user except admins can access cryptographic keys."
|
||||
},
|
||||
{
|
||||
"name": "deny-truststore-access",
|
||||
"module-name": "ietf-truststore",
|
||||
"access-operations": "*",
|
||||
"action": "deny",
|
||||
"comment": "No user except admins can access trust store."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"ietf-netconf-server:netconf-server": {
|
||||
"listen": {
|
||||
"endpoints": {
|
||||
"endpoint": [
|
||||
{
|
||||
"name": "default-ssh",
|
||||
"ssh": {
|
||||
"tcp-server-parameters": {
|
||||
"local-bind": [
|
||||
{
|
||||
"local-address": "::"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ssh-server-parameters": {
|
||||
"server-identity": {
|
||||
"host-key": [
|
||||
{
|
||||
"name": "default-key",
|
||||
"public-key": {
|
||||
"central-keystore-reference": "genkey"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"ietf-system:system": {
|
||||
"hostname": "bpi-%m",
|
||||
"ntp": {
|
||||
"server": [
|
||||
{
|
||||
"name": "default",
|
||||
"udp": {
|
||||
"address": "pool.ntp.org"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"authentication": {
|
||||
"user": [
|
||||
{
|
||||
"name": "admin",
|
||||
"password": "$factory$",
|
||||
"infix-system:shell": "bash"
|
||||
}
|
||||
]
|
||||
},
|
||||
"infix-system:motd-banner": "Li0tLS0tLS0uCnwgIC4gLiAgfCBJbmZpeCBPUyDigJQgSW1tdXRhYmxlLkZyaWVuZGx5LlNlY3VyZQp8LS4gdiAuLXwgaHR0cHM6Ly9rZXJuZWxraXQub3JnCictJy0tLSctJwo="
|
||||
},
|
||||
"infix-dhcp-server:dhcp-server": {
|
||||
"option": [
|
||||
{
|
||||
"id": "ntp-server",
|
||||
"address": "auto"
|
||||
},
|
||||
{
|
||||
"id": "dns-server",
|
||||
"address": "auto"
|
||||
},
|
||||
{
|
||||
"id": "router",
|
||||
"address": "auto"
|
||||
}
|
||||
],
|
||||
"subnet": [
|
||||
{
|
||||
"subnet": "192.168.0.0/24",
|
||||
"pool": {
|
||||
"start-address": "192.168.0.100",
|
||||
"end-address": "192.168.0.250"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"infix-firewall:firewall": {
|
||||
"default": "wan",
|
||||
"zone": [
|
||||
{
|
||||
"name": "lan",
|
||||
"action": "accept",
|
||||
"interface": [
|
||||
"br0"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "wan",
|
||||
"action": "drop",
|
||||
"interface": [
|
||||
"wan"
|
||||
],
|
||||
"service": [
|
||||
"dhcpv6-client"
|
||||
]
|
||||
}
|
||||
],
|
||||
"policy": [
|
||||
{
|
||||
"name": "lan-to-wan",
|
||||
"action": "accept",
|
||||
"ingress": [
|
||||
"lan"
|
||||
],
|
||||
"egress": [
|
||||
"wan"
|
||||
],
|
||||
"masquerade": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"infix-meta:meta": {
|
||||
"version": "1.7"
|
||||
},
|
||||
"infix-services:mdns": {
|
||||
"enabled": true
|
||||
},
|
||||
"infix-services:ssh": {
|
||||
"enabled": true,
|
||||
"hostkey": [
|
||||
"genkey"
|
||||
],
|
||||
"listen": [
|
||||
{
|
||||
"name": "ipv4",
|
||||
"address": "0.0.0.0",
|
||||
"port": 22
|
||||
},
|
||||
{
|
||||
"name": "ipv6",
|
||||
"address": "::",
|
||||
"port": 22
|
||||
}
|
||||
]
|
||||
},
|
||||
"infix-services:web": {
|
||||
"enabled": true,
|
||||
"console": {
|
||||
"enabled": true
|
||||
},
|
||||
"netbrowse": {
|
||||
"enabled": true
|
||||
},
|
||||
"restconf": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
ACTION=="add", SUBSYSTEM=="net", DEVPATH=="/devices/platform/soc/15100000.ethernet/net/eth0", NAME="lan"
|
||||
ACTION=="add", SUBSYSTEM=="net", DEVPATH=="/devices/platform/soc/15100000.ethernet/net/eth1", NAME="wan"
|
||||
@@ -3,9 +3,6 @@ CONFIG_BOOTDELAY=2
|
||||
# CONFIG_MMC_PCI is not set
|
||||
CONFIG_ENV_IS_NOWHERE=y
|
||||
# CONFIG_ENV_IS_IN_MMC is not set
|
||||
CONFIG_MULTI_DTB_FIT=y
|
||||
CONFIG_OF_LIST="mt7986a-bpi-r3-sd mt7986a-bpi-r3-emmc mt7986a-bpi-r3-mini mt7986a-acer-connect-vero-w6m"
|
||||
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_MTK=y
|
||||
@@ -29,17 +26,8 @@ CONFIG_MTD_SPI_NAND=y
|
||||
CONFIG_MTK_SPIM=y
|
||||
CONFIG_MTK_SNOR=y
|
||||
|
||||
CONFIG_DM_MDIO=y
|
||||
CONFIG_DM_ETH_PHY=y
|
||||
CONFIG_PHY_ETHERNET_ID=y
|
||||
|
||||
CONFIG_PHY_AIROHA=y
|
||||
CONFIG_PHY_AIROHA_EN8811H=y
|
||||
CONFIG_PHY_AIROHA_FW_IN_MMC=y
|
||||
|
||||
CONFIG_CMD_SF=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_MTD=y
|
||||
CONFIG_CMD_MDIO=y
|
||||
CONFIG_CMD_MTDPARTS=y
|
||||
CONFIG_CMD_DM=y
|
||||
|
||||
@@ -15,10 +15,6 @@
|
||||
scriptaddr = "0x48000000";
|
||||
ramdisk_addr_r = "0x4A000000";
|
||||
|
||||
en8811h_fw_part = "0#en8811h_fw";
|
||||
en8811h_fw_dm_dir = "EthMD32.dm.bin";
|
||||
en8811h_fw_dsp_dir = "EthMD32.DSP.bin";
|
||||
|
||||
/* This is a development platform, keep
|
||||
* developer mode statically enabled.
|
||||
*/
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
config BR2_PACKAGE_BANANAPI_BPI_R4
|
||||
bool "Banana Pi R4"
|
||||
depends on BR2_aarch64
|
||||
select BR2_PACKAGE_FEATURE_WIFI
|
||||
select BR2_PACKAGE_LINUX_FIRMWARE
|
||||
select BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK
|
||||
select BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT7988
|
||||
select BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT7996
|
||||
select SDCARD_AUX
|
||||
help
|
||||
Build Banana PI R4 support
|
||||
@@ -1,13 +0,0 @@
|
||||
Copyright (c) 2026 The KernelKit Authors
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
@@ -1,360 +0,0 @@
|
||||
# Banana Pi BPI-R4 / BPI-R4-2g5 / BPI-R4P
|
||||
|
||||
<img src="banana_pi_bpi-r4_poe.jpg" alt="The board" width=800 padding=10>
|
||||
|
||||
## Overview
|
||||
|
||||
The Banana Pi BPI-R4 is a high-performance networking board built around the
|
||||
MediaTek MT7988A SoC (Filogic 880). It is a successor to the BPI-R3 and
|
||||
represents a significant step up: the CPU switches from in-order Cortex-A53
|
||||
cores to out-of-order Cortex-A73 cores, and the MT7531 switch is now part of
|
||||
the SOC. The base model comes with two SFP+ cages supporting 1.25/2.5/5/10
|
||||
Gbps, and the R4P model comes with one SFP+ cage and one 2.5 Gbps RJ45 jack,
|
||||
which with an optional PoE board means the board can act as PD. Unlike the
|
||||
BPi-R3, however, there is no on-board WiFi support, that requires an external
|
||||
tri-band WiFi 7 (IEEE 802.11be) card.
|
||||
|
||||
### Variants
|
||||
|
||||
| **Feature** | **BPI-R4** | **BPI-R4-2g5** | **BPI-R4P** |
|
||||
|------------------|------------------|-------------------|---------------------------|
|
||||
| 1G switch ports | wan, lan1–lan3 | lan0–lan3 | lan0–lan3 |
|
||||
| 2.5G RJ45 (WAN) | — | wan | wan (PoE input) |
|
||||
| SFP+ port(s) | sfp1, sfp2 (10G) | sfp1 (10G) | sfp1 (10G) |
|
||||
| Linux DT | bpi-r4 | bpi-r4-2g5 | bpi-r4-2g5 (same) |
|
||||
|
||||
On the standard BPI-R4 the four 1G switch ports are labeled `wan`, `lan1`, `lan2`,
|
||||
and `lan3`. On the R4-2g5 and R4P, the port that would otherwise be `wan` on the
|
||||
switch is relabeled `lan0` via a device tree overlay, since the actual WAN port on
|
||||
those variants is the dedicated 2.5G internal PHY on the separate RJ45 jack.
|
||||
|
||||
The BPI-R4P is mechanically and electrically identical to the BPI-R4-2g5
|
||||
with an additional PoE daughterboard header. From a Linux kernel and
|
||||
Infix perspective the two boards are treated identically.
|
||||
|
||||
### SoC: MediaTek MT7988A vs MT7986 (BPI-R3)
|
||||
|
||||
The MT7988A (Filogic 880) and MT7986 (Filogic 820) may look similar from
|
||||
their part numbers, but they are built on entirely different silicon with
|
||||
distinct system architectures:
|
||||
|
||||
| **Aspect** | **MT7988A (BPI-R4)** | **MT7986 (BPI-R3)** |
|
||||
|------------------|--------------------------|---------------------------|
|
||||
| CPU cores | 4x Cortex-A73 @ 1.8 GHz | 4x Cortex-A53 @ 2.0 GHz |
|
||||
| CPU architecture | ARMv8-A, out-of-order | ARMv8-A, in-order |
|
||||
| Internal switch | 1 Gbps per port | 1 Gbps per port |
|
||||
| Uplinks | USXGMII (native 10 Gbps) | USXGMII (native 2.5 Gbps) |
|
||||
| WiFi | MT7996E PCIe module | MT7915E (built-in) |
|
||||
| WiFi standard | WiFi 7 (802.11be) | WiFi 6 (802.11ax) |
|
||||
| WiFi bands | 2.4 / 5 / 6 GHz | 2.4 / 5 GHz |
|
||||
| Hardware crypto | EIP-197 NPU | EIP-93 |
|
||||
| PCIe slots | 4 (2x mPCIe, 2x M.2) | 1 mPCIe |
|
||||
| Boot ROM offset | Sector 1024 (0x80000) | Sector 1024 (0x80000) |
|
||||
|
||||
### Hardware Features
|
||||
|
||||
- **SoC:** MediaTek MT7988A (Filogic 880)
|
||||
- **CPU:** Quad-core ARM Cortex-A73, up to 1.8 GHz
|
||||
- **RAM:** 4 GB DDR4
|
||||
- **Storage:** 8 GB eMMC, microSD card slot, SPI NAND flash
|
||||
- **Ethernet switch:** 4-port 1 GbE (10/100/1000) internal DSA switch
|
||||
- **SFP+ ports:** 2x 10 Gbps USXGMII (standard R4) or 1x SFP+ (R4-2g5/R4P)
|
||||
- **WiFi:** optional MediaTek MT7996E PCIe module — tri-band WiFi 7 (2.4/5/6 GHz)
|
||||
- **USB:** 1x USB 3.0 (xHCI)
|
||||
- **PCIe:** 2x mPCIe (SIM2/SIM3), 1x M.2 Key-B (SIM1), 1x M.2 Key-M (SSD)
|
||||
- **RTC:** PCF8563 on I2C
|
||||
- **Fan:** PWM-controlled cooling with thermal management
|
||||
- **Console:** UART at 115200 8N1 (3.3 V, USB-to-serial adapter required)
|
||||
|
||||
### Default Network Configuration
|
||||
|
||||
Infix ships with the following factory defaults.
|
||||
|
||||
**Standard BPI-R4:**
|
||||
|
||||
- **LAN bridge** (`br0`, 192.168.0.1/24): `lan1`, `lan2`, `lan3` (1G switch ports)
|
||||
- **WAN port** (`wan`): DHCP client, used for internet uplink (1G switch port)
|
||||
- **SFP+ ports** (`sfp1`, `sfp2`): Present but unconfigured
|
||||
|
||||
**BPI-R4-2g5 and BPI-R4P:**
|
||||
|
||||
- **LAN bridge** (`br0`, 192.168.0.1/24): `lan0`, `lan1`, `lan2`, `lan3` (1G switch ports)
|
||||
- **WAN port** (`wan`): DHCP client, used for internet uplink (2.5G internal PHY)
|
||||
- **SFP+ port** (`sfp1`): Present but unconfigured
|
||||
|
||||
> [!NOTE]
|
||||
> If an optional WiFi 7 (MT7996E) PCIe card is installed, the radio interfaces
|
||||
> are bridged into the LAN as access points. WiFi is not included with the board
|
||||
> and is not part of the factory default configuration.
|
||||
|
||||
|
||||
## Getting Started
|
||||
|
||||
<img align="right" src="console-header.png" alt="Console header pins" width=200 padding=10>
|
||||
|
||||
### Quick Start with SD Card
|
||||
|
||||
1. **Download the SD card image:** [infix-bpi-r4-sdcard.img][2]
|
||||
2. **Flash the image to an SD card:** see [this guide][0]
|
||||
3. **Set boot switches to SD card mode** (see Boot Switch Reference below)
|
||||
4. **Insert the SD card, connect power and a serial console (115200 8N1)**
|
||||
5. Default login: `admin` / `admin`
|
||||
|
||||
### Boot Switch Reference
|
||||
|
||||
<img align="right" src="bootstrap-sw3.png" alt="DIP switches" width=140 padding=10>
|
||||
|
||||
The BPI-R4 has a 2-position DIP switch (SW3) that selects the boot media.
|
||||
Switch positions are printed on the board near the SD card slot.
|
||||
|
||||
| A | B | Boot media (SW3) |
|
||||
|-----|-----|------------------|
|
||||
| OFF | ON | SPI NAND |
|
||||
| ON | OFF | eMMC |
|
||||
| ON | ON | SD card |
|
||||
|
||||
> [!NOTE]
|
||||
> "OFF" = switch in the UP position = logical 0.
|
||||
|
||||
## Installing to eMMC
|
||||
|
||||
For production use or better reliability, install Infix to the internal
|
||||
eMMC storage.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> The MT7988A has a single MMC controller that can only operate in one mode
|
||||
> (SD or eMMC) per boot session. The SD card U-Boot cannot switch to eMMC
|
||||
> mode mid-session, so an intermediate NAND bootloader step is required to
|
||||
> write the eMMC — the same approach as BPi-R3.
|
||||
>
|
||||
> The MT7988A boot chain is: **BROM → BL2 → FIP (BL31 + U-Boot)**. The FIP
|
||||
> (Firmware Image Package) bundles ARM Trusted Firmware (BL31) and U-Boot
|
||||
> together; it is not just a U-Boot binary. When BL2 runs, it loads the FIP
|
||||
> from a fixed offset and hands off to BL31, which then jumps into U-Boot.
|
||||
>
|
||||
> The factory SPI NAND contains a minimal recovery U-Boot that only supports
|
||||
> TFTP — it has no USB command. You cannot use it to load files from a USB
|
||||
> drive. Similarly, the factory eMMC ships with a basic OpenWRT image.
|
||||
> You must first flash a full-featured U-Boot (from Frank-W) to SPI NAND via
|
||||
> the SD card U-Boot before you can write the eMMC.
|
||||
>
|
||||
> This process involves three boot mode changes and multiple flash operations.
|
||||
> Take your time and verify each step carefully.
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- USB-to-serial adapter (3.3 V) for console access
|
||||
- USB flash drive (FAT32 formatted)
|
||||
- microSD card with Infix SD image, for initial boot
|
||||
- Downloaded files (see below)
|
||||
|
||||
### Required Files
|
||||
|
||||
Place these files on a FAT32-formatted USB drive:
|
||||
|
||||
1. **Infix eMMC image:** [infix-bpi-r4-emmc.img][3]
|
||||
2. **eMMC bootloader** (from): [bpi-r4-emmc-boot-2026.01-latest.tar.gz][4]
|
||||
- Extract `bl2.img` from the tarball to your USB drive
|
||||
3. **Intermediate NAND bootloader** from Frank-W's U-Boot (for BPI-R4, SPI NAND):
|
||||
- [bpi-r4_spim-nand_bl2.img][13] — BL2 first-stage loader
|
||||
- [bpi-r4_spim-nand_fip.bin][14] — FIP image (BL31 + U-Boot)
|
||||
|
||||
### Step 1: Boot from SD card
|
||||
|
||||
1. Set boot switches to **SD card mode** (SW3: A=ON, B=ON)
|
||||
2. Insert the SD card with the Infix image
|
||||
3. Power on and break into U-Boot (press Ctrl-C during countdown)
|
||||
|
||||
### Step 2: Flash intermediate NAND bootloader
|
||||
|
||||
This installs a full-featured U-Boot to SPI NAND so the board can load files
|
||||
from USB in the next step. From the SD card U-Boot prompt:
|
||||
|
||||
```
|
||||
usb start
|
||||
mtd erase spi-nand0
|
||||
fatload usb 0:1 0x50000000 bpi-r4_spim-nand_bl2.img
|
||||
mtd write spi-nand0 0x50000000 0x0 0x100000
|
||||
fatload usb 0:1 0x50000000 bpi-r4_spim-nand_fip.bin
|
||||
mtd write spi-nand0 0x50000000 0x580000 0x200000
|
||||
```
|
||||
|
||||
### Step 3: Boot from NAND
|
||||
|
||||
1. Power off the board
|
||||
2. Set boot switches to **SPI NAND mode** (SW3: A=OFF, B=ON)
|
||||
3. Power on — you should boot into U-Boot again
|
||||
|
||||
### Step 4: Write Infix image to eMMC
|
||||
|
||||
From the U-Boot prompt:
|
||||
|
||||
```
|
||||
usb start
|
||||
fatload usb 0:1 0x50000000 infix-bpi-r4-emmc.img
|
||||
setexpr blocks ${filesize} / 0x200
|
||||
mmc write 0x50000000 0x0 ${blocks}
|
||||
```
|
||||
|
||||
### Step 5: Configure eMMC boot partition
|
||||
|
||||
Write the BL2 bootloader to the eMMC boot partition:
|
||||
|
||||
```
|
||||
mmc partconf 0 1 1 1
|
||||
mmc erase 0x0 0x400
|
||||
fatload usb 0:1 0x50000000 bl2.img
|
||||
mmc write 0x50000000 0x0 0x400
|
||||
mmc partconf 0 1 1 0
|
||||
```
|
||||
|
||||
### Step 6: Boot from eMMC
|
||||
|
||||
1. Power off the board
|
||||
2. Set boot switches to **eMMC mode** (SW3: A=ON, B=OFF)
|
||||
3. Remove the SD card (optional, recommended to verify eMMC boot)
|
||||
4. Power on
|
||||
|
||||
Your BPI-R4 should now boot Infix from internal eMMC storage.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Board won't boot
|
||||
|
||||
- Verify boot switch positions — double-check against the wiki
|
||||
- Ensure the power supply provides adequate current (12 V / 3 A recommended)
|
||||
- Check the serial console output at 115200 8N1
|
||||
|
||||
### Can't break into U-Boot
|
||||
|
||||
- Connect the serial console before powering on
|
||||
- Press Ctrl-C immediately when boot messages appear
|
||||
- Try power cycling and pressing Ctrl-C repeatedly during the countdown
|
||||
|
||||
### eMMC boot fails after installation
|
||||
|
||||
- Boot from NAND (SW3=ON) and verify the eMMC write completed without errors
|
||||
- Re-run the `mmc partconf` sequence — a missed step is the most common
|
||||
cause of failure
|
||||
- Use `mmc info` to confirm the eMMC is detected
|
||||
|
||||
### No network connectivity
|
||||
|
||||
The interface names on BPI-R4 differ from BPI-R3. Confirm what Linux
|
||||
has created with `ip link` and compare with the factory configuration:
|
||||
|
||||
- `wan`, `lan1`–`lan3`: 1G switch ports (standard R4)
|
||||
- `wan`, `lan0`–`lan3`: on R4-2g5/R4P, `wan` is the 2.5G internal PHY; `lan0`–`lan3` are 1G switch ports
|
||||
- `sfp1` (and `sfp2` on standard R4): 10G SFP+ cage(s)
|
||||
|
||||
If interface renames look wrong, check `dmesg | grep renamed` and if
|
||||
you spot any errors, please report as an issue to the Infix tracker
|
||||
on GitHub.
|
||||
|
||||
## Board Variants
|
||||
|
||||
### BPI-R4
|
||||
|
||||
The base model BPi-R4 ports look like this, the `wan` port is the same physical
|
||||
switch port as `lan0` on the R4-2g5/R4P, but here it serves as the WAN port in
|
||||
the factory default configuration.
|
||||
|
||||
```
|
||||
.-.
|
||||
| | .-----.-----.-----.-----.
|
||||
| | _______ _______ | | | | | .---.
|
||||
| | | | | | | | | | | | | .-----.
|
||||
'-' '-------' '-------' '-----'-----'-----'-----' '---' '-----'
|
||||
USB1 sfp1 sfp2 wan lan1 lan2 lan3 DC12V PD20V
|
||||
```
|
||||
|
||||
### BPI-R4-2g5 and BPI-R4P
|
||||
|
||||
These variants substitute one SFP+ cage for an internal 2.5 Gbps PHY
|
||||
connected to a standard RJ45 jack. From a kernel perspective they use
|
||||
the `mt7988a-bananapi-bpi-r4-2g5` device tree.
|
||||
|
||||
The BPI-R4P additionally supports an optional PoE input daughterboard on
|
||||
the 2.5 Gbps RJ45 port. The PoE circuitry is passive with respect to
|
||||
Linux — no special kernel driver is required for basic operation.
|
||||
|
||||
For these board variants, the WAN role moves to the dedicated 2.5G internal PHY,
|
||||
so all four switch ports become LAN ports (`lan0`–`lan3`) instead of three:
|
||||
|
||||
```
|
||||
.-.
|
||||
| | .-----. .-----.-----.-----.-----.
|
||||
| | _______ | | | | | | | .---.
|
||||
| | | | | | | | | | | | | .-----.
|
||||
'-' '-------' '-----' '-----'-----'-----'-----' '---' '-----'
|
||||
USB1 sfp1 wan lan0 lan1 lan2 lan3 DC12V PD20V
|
||||
```
|
||||
|
||||
### Selecting the Board Variant
|
||||
|
||||
U-Boot cannot automatically distinguish the standard R4 from the R4-2g5/R4P at
|
||||
boot time (the on-board EEPROM is not programmed from factory). Instead, the
|
||||
variant is read from the persistent U-Boot environment on the `aux` partition,
|
||||
and you have to set it manually using `fw_setenv` from a UNIX shell:
|
||||
|
||||
```bash
|
||||
# For BPI-R4-2g5 or BPI-R4P (1x SFP+ + 1x 2.5 Gbps RJ45):
|
||||
sudo fw_setenv BOARD_VARIANT 2g5
|
||||
|
||||
# To revert to the standard BPI-R4 (2x SFP+) clear the setting:
|
||||
sudo fw_setenv BOARD_VARIANT
|
||||
```
|
||||
|
||||
> [!IMPORTANT]
|
||||
> The change takes effect on the next reboot. No re-flashing is required, but
|
||||
> you may want to do a factory reset to activate the changes in your system
|
||||
> `startup-config`: `sudo factory -y` from shell, or the CLI.
|
||||
|
||||
`fw_setenv` writes to the `uboot.env` file on the aux partition. U-Boot
|
||||
reads this at every boot (before loading the kernel) and selects the
|
||||
matching device tree:
|
||||
|
||||
| `BOARD_VARIANT` | Device tree loaded |
|
||||
|-----------------|-----------------------------------|
|
||||
| *(unset)* | `mt7988a-bananapi-bpi-r4.dtb` |
|
||||
| `2g5` | `mt7988a-bananapi-bpi-r4-2g5.dtb` |
|
||||
|
||||
## Additional Resources
|
||||
|
||||
- [Infix Documentation][1]
|
||||
- [Official BPI-R4 Page][7]
|
||||
- [BPI-R4 Forum][8]
|
||||
- [Frank-W's site][9]
|
||||
- [Release Downloads][10]
|
||||
- [Bootloader Builds][11]
|
||||
|
||||
## Building Custom Images
|
||||
|
||||
```bash
|
||||
# Build bootloaders for SD and eMMC
|
||||
make x-bpi-r4-sd-boot
|
||||
make x-bpi-r4-emmc-boot
|
||||
|
||||
# Build main system
|
||||
make aarch64
|
||||
|
||||
# Create SD card image
|
||||
./utils/mkimage.sh -od bananapi-bpi-r4
|
||||
|
||||
# Create eMMC image
|
||||
./utils/mkimage.sh -odt emmc bananapi-bpi-r4
|
||||
```
|
||||
|
||||
[0]: https://www.kernelkit.org/posts/flashing-sdcard/
|
||||
[1]: https://www.kernelkit.org/infix/latest/
|
||||
[2]: https://github.com/kernelkit/infix/releases/download/latest-boot/infix-bpi-r4-sdcard.img
|
||||
[3]: https://github.com/kernelkit/infix/releases/download/latest-boot/infix-bpi-r4-emmc.img
|
||||
[4]: https://github.com/kernelkit/infix/releases/download/latest-boot/bpi-r4-emmc-boot-2026.01-latest.tar.gz
|
||||
[7]: https://docs.banana-pi.org/en/BPI-R4/BananaPi_BPI-R4
|
||||
[8]: https://forum.banana-pi.org/
|
||||
[9]: https://wiki.fw-web.de/doku.php?id=en:bpi-r4:start
|
||||
[10]: https://github.com/kernelkit/infix/releases/tag/latest
|
||||
[11]: https://github.com/kernelkit/infix/releases/tag/latest-boot
|
||||
[12]: https://github.com/frank-w/u-boot/releases
|
||||
[13]: https://github.com/frank-w/u-boot/releases/download/CI-BUILD-2026-01-bpi-2026.01-2026-01-15_2013/bpi-r4_spim-nand_bl2.img
|
||||
[14]: https://github.com/frank-w/u-boot/releases/download/CI-BUILD-2026-01-bpi-2026.01-2026-01-15_2013/bpi-r4_spim-nand_fip.bin
|
||||
|
Before Width: | Height: | Size: 92 KiB |
@@ -1,2 +0,0 @@
|
||||
# Locally calculated
|
||||
sha256 d48246c717b505cc11df95171f2fd548b389e1a463f1af4c68d0b69fe0d1009b LICENSE
|
||||
@@ -1,49 +0,0 @@
|
||||
define BANANAPI_BPI_R4_LINUX_CONFIG_FIXUPS
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_ARCH_MEDIATEK)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_MACH_MT7988)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_PINCTRL_MT7988)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_SERIAL_8250_MT6577)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_I2C_GPIO,y)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_MTK_THERMAL,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_MTK_LVTS_THERMAL,m)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_MTK_UART)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_MEDIATEK_WATCHDOG)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_MEDIATEK_GE_PHY)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_MEDIATEK_GE_SOC_PHY)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_NET_VENDOR_MEDIATEK)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_NET_MEDIATEK_SOC)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_NET_DSA_MT7530,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_MT7996E,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_PCIE_MEDIATEK_GEN3,m)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_MTK_SCPSYS)
|
||||
$(call KCONFIG_ENABLE_OPT,CONFIG_MMC_MTK)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_I2C_MT65XX,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_USB_XHCI_MTK,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_PHY_MTK_TPHY,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_PHY_MTK_XSPHY,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_PHY_MTK_XFI_TPHY,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_PCS_STANDALONE,y)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_PCS_MTK_USXGMII,y)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_PWM_MEDIATEK,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_SENSORS_PWM_FAN,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_NVMEM_MTK_EFUSE,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_MEDIATEK_2P5GE_PHY,m)
|
||||
$(call KCONFIG_SET_OPT,CONFIG_CRYPTO_DEV_SAFEXCEL,m)
|
||||
endef
|
||||
|
||||
LINUX_DTS_MT7988 = $(LINUX_DIR)/arch/arm64/boot/dts/mediatek
|
||||
|
||||
define BANANAPI_BPI_R4_KERNEL_DTBS_INSTALL_TARGET
|
||||
@$(call MESSAGE,"Installing kernel DTBs and DTBOs for BPI-R4")
|
||||
$(foreach f, \
|
||||
mt7988a-bananapi-bpi-r4.dtb \
|
||||
mt7988a-bananapi-bpi-r4-2g5.dtb \
|
||||
mt7988a-bananapi-bpi-r4-sd.dtbo \
|
||||
mt7988a-bananapi-bpi-r4-emmc.dtbo, \
|
||||
$(INSTALL) -D $(LINUX_DTS_MT7988)/$(f) \
|
||||
$(TARGET_DIR)/boot/mediatek/$(f)$(sep))
|
||||
endef
|
||||
BANANAPI_BPI_R4_POST_INSTALL_TARGET_HOOKS += BANANAPI_BPI_R4_KERNEL_DTBS_INSTALL_TARGET
|
||||
|
||||
$(eval $(ix-board))
|
||||
$(eval $(generic-package))
|
||||
|
Before Width: | Height: | Size: 348 KiB |
|
Before Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 282 KiB |
@@ -1,2 +0,0 @@
|
||||
dtb-y += infix/bananapi,bpi-r4.dtbo
|
||||
dtb-y += infix/bananapi,bpi-r4-2g5.dtbo
|
||||
@@ -1,32 +0,0 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
|
||||
/dts-v1/;
|
||||
/plugin/;
|
||||
|
||||
/ {
|
||||
compatible = "bananapi,bpi-r4-2g5";
|
||||
};
|
||||
|
||||
/*
|
||||
* On the 2g5 variant, GMAC1 uses the internal 2.5G PHY (eth1 renamed to
|
||||
* "wan" by udev). The switch's port0, which is labeled "wan" in the base
|
||||
* DTS, would cause a name collision when the switch driver registers it.
|
||||
* Rename it to "lan0" here so the kernel names it correctly from the start.
|
||||
*/
|
||||
&gsw_port0 {
|
||||
label = "lan0";
|
||||
};
|
||||
|
||||
/*
|
||||
* The upstream mt7988a.dtsi sets compatible = "ethernet-phy-ieee802.3-c45"
|
||||
* on the internal 2.5G PHY node. That gives genphy_c45 (built-in) OF-match
|
||||
* priority over the PHY-ID-based mtk-2p5ge driver, leaving the PHY powered
|
||||
* down and unclaimed. Replace it with the standard ethernet-phy-idXXXX.XXXX
|
||||
* form so of_get_phy_id() registers the PHY as C22 with explicit ID 0x00339c11.
|
||||
* mtk-2p5ge then matches via PHY_ID_MATCH_VENDOR(0x00339c00) instead of
|
||||
* genphy_c45 winning via OF-match.
|
||||
* Note: /delete-property/ is not used because U-Boot fdt apply does not
|
||||
* implement property deletion in overlays.
|
||||
*/
|
||||
&int_2p5g_phy {
|
||||
compatible = "ethernet-phy-id0033.9c11";
|
||||
};
|
||||
@@ -1,28 +0,0 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
|
||||
/dts-v1/;
|
||||
/plugin/;
|
||||
|
||||
/ {
|
||||
compatible = "bananapi,bpi-r4", "mediatek,mt7988a";
|
||||
};
|
||||
|
||||
/*
|
||||
* The upstream mt7988a-bananapi-bpi-r4.dtsi sets stdout-path = "serial0:..."
|
||||
* but the aliases node there only has ethernet entries. Linux resolves
|
||||
* stdout-path by looking in /aliases, so we must add serial0 here.
|
||||
* Path references in overlay aliases cannot use &label, so use the full path.
|
||||
*/
|
||||
&{/} {
|
||||
aliases {
|
||||
serial0 = "/soc/serial@11000000";
|
||||
};
|
||||
|
||||
chosen {
|
||||
infix {
|
||||
/* Default admin user password: 'admin' */
|
||||
factory-password-hash = "$5$mI/zpOAqZYKLC2WU$i7iPzZiIjOjrBF3NyftS9CCq8dfYwHwrmUK097Jca9A";
|
||||
usb-ports = <&ssusb1>;
|
||||
usb-port-names = "USB";
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -1,81 +0,0 @@
|
||||
image cfg.ext4 {
|
||||
empty = true
|
||||
temporary = true
|
||||
size = 128M
|
||||
ext4 {
|
||||
label = "cfg"
|
||||
use-mke2fs = true
|
||||
features = "uninit_bg"
|
||||
extraargs = "-m 0 -i 4096"
|
||||
}
|
||||
}
|
||||
|
||||
# The /var partition will be expanded automatically at first boot
|
||||
# to use the full size of the SD-card or eMMC media.
|
||||
image var.ext4 {
|
||||
empty = true
|
||||
temporary = true
|
||||
size = 128M
|
||||
ext4 {
|
||||
label = "var"
|
||||
use-mke2fs = true
|
||||
features = "uninit_bg"
|
||||
extraargs = "-m 0 -i 4096"
|
||||
}
|
||||
}
|
||||
|
||||
image #INFIX_ID##VERSION#-bpi-r4-#TARGET#.img {
|
||||
hdimage {
|
||||
partition-table-type = "gpt"
|
||||
gpt-no-backup = true
|
||||
}
|
||||
# BL2 bootloader partition (MediaTek official location)
|
||||
partition bl2 {
|
||||
image = "bl2.img"
|
||||
offset = 1024s # 0x80000 = sector 1024
|
||||
size = 4M # 0x400000
|
||||
bootable = true
|
||||
}
|
||||
|
||||
# Factory/calibration data (sectors 9216-13311)
|
||||
partition factory {
|
||||
offset = 4608K # 0x480000
|
||||
size = 2M # 0x200000
|
||||
}
|
||||
|
||||
# FIP partition - BL31 + U-Boot (sectors 13312-17407)
|
||||
partition fip {
|
||||
image = "fip.bin"
|
||||
offset = 13312s
|
||||
size = 4096s
|
||||
}
|
||||
|
||||
partition aux {
|
||||
partition-uuid = D4EF35A0-0652-45A1-B3DE-D63339C82035
|
||||
image = "aux.ext4"
|
||||
}
|
||||
|
||||
partition primary {
|
||||
partition-type-uuid = 0FC63DAF-8483-4772-8E79-3D69D8477DE4
|
||||
bootable = true
|
||||
size = 250M
|
||||
image = "rootfs.squashfs"
|
||||
}
|
||||
|
||||
partition secondary {
|
||||
partition-type-uuid = 0FC63DAF-8483-4772-8E79-3D69D8477DE4
|
||||
bootable = true
|
||||
size = 250M
|
||||
image = "rootfs.squashfs"
|
||||
}
|
||||
|
||||
partition cfg {
|
||||
partition-uuid = 7aa497f0-73b5-47e5-b2ab-8752d8a48105
|
||||
image = "cfg.ext4"
|
||||
}
|
||||
|
||||
partition var {
|
||||
partition-uuid = 8046A06A-E45A-4A14-A6AD-6684704A393F
|
||||
image = "var.ext4"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
label Infix (aarch64)
|
||||
kernel /boot/Image
|
||||
fdtdir /boot
|
||||
fdtoverlays /boot/mediatek/mt7988a-bananapi-bpi-r4-emmc.dtbo /boot/infix/bananapi,bpi-r4.dtbo /boot/infix/bananapi,bpi-r4-2g5.dtbo
|
||||
append ${bootargs_root} ${bootargs_log} usbcore.authorized_default=2 -- ${bootargs_user}
|
||||
@@ -1,5 +0,0 @@
|
||||
label Infix (aarch64)
|
||||
kernel /boot/Image
|
||||
fdtdir /boot
|
||||
fdtoverlays /boot/mediatek/mt7988a-bananapi-bpi-r4-sd.dtbo /boot/infix/bananapi,bpi-r4.dtbo /boot/infix/bananapi,bpi-r4-2g5.dtbo
|
||||
append ${bootargs_root} ${bootargs_log} usbcore.authorized_default=2 -- ${bootargs_user}
|
||||
@@ -1,5 +0,0 @@
|
||||
label Infix (aarch64)
|
||||
kernel /boot/Image
|
||||
fdtdir /boot
|
||||
fdtoverlays /boot/mediatek/mt7988a-bananapi-bpi-r4-emmc.dtbo /boot/infix/bananapi,bpi-r4.dtbo
|
||||
append ${bootargs_root} ${bootargs_log} usbcore.authorized_default=2 -- ${bootargs_user}
|
||||