mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-29 20:23:01 +02:00
Compare commits
371
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
226ea49e7c | ||
|
|
cb633a78d6 | ||
|
|
d2e55eadf8 | ||
|
|
70d51420c9 | ||
|
|
1e80b20856 | ||
|
|
918353dcc7 | ||
|
|
d53a35b867 | ||
|
|
331f60be64 | ||
|
|
4b3ee0fa5e | ||
|
|
06a4995a13 | ||
|
|
45efa9484e | ||
|
|
b9e53e5721 | ||
|
|
1a0dbec571 | ||
|
|
151d04a2dd | ||
|
|
10ef03c971 | ||
|
|
f4fb2f4f84 | ||
|
|
c3b1c28551 | ||
|
|
97d4068f68 | ||
|
|
38bd71614f | ||
|
|
8ffb15773d | ||
|
|
7b26f096fa | ||
|
|
f82534d828 | ||
|
|
ed2355833e | ||
|
|
089b160029 | ||
|
|
75c25201ae | ||
|
|
f1f2c66934 | ||
|
|
4b37474d8e | ||
|
|
b1e08bd32f | ||
|
|
2fa495b112 | ||
|
|
02615be500 | ||
|
|
daf8b29178 | ||
|
|
24755e7e5f | ||
|
|
4b55e38741 | ||
|
|
c66c0b46b5 | ||
|
|
7784e68347 | ||
|
|
ab56c1be50 | ||
|
|
8af593707a | ||
|
|
20d09febeb | ||
|
|
921c4c809d | ||
|
|
d1fda087ec | ||
|
|
46919e2d1f | ||
|
|
08c9c97823 | ||
|
|
8b10cce172 | ||
|
|
ee6def793c | ||
|
|
ee37a19ab0 | ||
|
|
3265f46990 | ||
|
|
e39b9cfee4 | ||
|
|
db06ddb93b | ||
|
|
6aaf612095 | ||
|
|
54d88cc00e | ||
|
|
9b057ad547 | ||
|
|
937d4c38c7 | ||
|
|
b2a41e4868 | ||
|
|
804fd1e08e | ||
|
|
eb829afb93 | ||
|
|
a280960d47 | ||
|
|
98b30d7d45 | ||
|
|
5cdcf1f4fe | ||
|
|
da29771398 | ||
|
|
021e864a6f | ||
|
|
9aba65e14b | ||
|
|
489487be16 | ||
|
|
aad3f83a6a | ||
|
|
0977ab476b | ||
|
|
d26e311c6d | ||
|
|
11cf4ddda9 | ||
|
|
b5b35e7615 | ||
|
|
bb274dcdd7 | ||
|
|
483ee14dbe | ||
|
|
9d271eb7c6 | ||
|
|
b72fb8fc7d | ||
|
|
7e37fc49a3 | ||
|
|
cb5d804a88 | ||
|
|
d80186a556 | ||
|
|
f8e62fb8df | ||
|
|
a5fc2f797b | ||
|
|
b6d7e4f24e | ||
|
|
cc86463233 | ||
|
|
3870bd562a | ||
|
|
99dd268682 | ||
|
|
d457d43753 | ||
|
|
c119436f97 | ||
|
|
3384507040 | ||
|
|
b7d91e4747 | ||
|
|
171b757acb | ||
|
|
2903f6f472 | ||
|
|
18d177328d | ||
|
|
f081bef3ba | ||
|
|
ef73ec6ce8 | ||
|
|
ff175c02f7 | ||
|
|
21256a8ac1 | ||
|
|
3e03ece1d9 | ||
|
|
ad96965b16 | ||
|
|
92e80b4239 | ||
|
|
e6a04fbd95 | ||
|
|
3b24fab324 | ||
|
|
ce8dc0de9c | ||
|
|
9273f4cd1e | ||
|
|
905df0dab7 | ||
|
|
640a47bceb | ||
|
|
671fc93ce0 | ||
|
|
ea2c4be237 | ||
|
|
da5b4bcfff | ||
|
|
f53d26bf34 | ||
|
|
7fbc2eba4f | ||
|
|
5b7325261a | ||
|
|
0eddd1ba64 | ||
|
|
68bb01545c | ||
|
|
c6f3e75aa4 | ||
|
|
af7c2d7801 | ||
|
|
e5da7f0473 | ||
|
|
a880939a2e | ||
|
|
6c742b5cda | ||
|
|
2aab13088c | ||
|
|
bc24a8b64e | ||
|
|
365618526d | ||
|
|
30104bd1b6 | ||
|
|
f5496b3c6a | ||
|
|
bafad20ef2 | ||
|
|
5a4c676782 | ||
|
|
57dd35f419 | ||
|
|
8e6323d663 | ||
|
|
7fd3a47bf1 | ||
|
|
e2aef716b3 | ||
|
|
042f9f8c51 | ||
|
|
acb6cdc043 | ||
|
|
887e34e0ef | ||
|
|
c972eebaac | ||
|
|
151f3491a2 | ||
|
|
948247254b | ||
|
|
c76f3ea164 | ||
|
|
4123074272 | ||
|
|
b3ea0f3207 | ||
|
|
391e971573 | ||
|
|
0957fc3c11 | ||
|
|
81f1da6272 | ||
|
|
20316daf2d | ||
|
|
5f00184bb1 | ||
|
|
f91aa0b705 | ||
|
|
5903d36861 | ||
|
|
23ed6e2f03 | ||
|
|
e6d945b77c | ||
|
|
c069308c27 | ||
|
|
a81f7c82e9 | ||
|
|
47c4ddfb7d | ||
|
|
1735a97dce | ||
|
|
7c87034d5e | ||
|
|
3224f49b65 | ||
|
|
c4ac9e44a7 | ||
|
|
d1f7abcc3e | ||
|
|
4790806d8d | ||
|
|
af2de7708a | ||
|
|
1ef8465095 | ||
|
|
9bc5f06d4c | ||
|
|
5f51ef065e | ||
|
|
4cfd0eb7a0 | ||
|
|
e12920bd67 | ||
|
|
e91ffebfda | ||
|
|
701dcda535 | ||
|
|
1125f3b549 | ||
|
|
0c52bac4d7 | ||
|
|
fcd2e15019 | ||
|
|
1ba91236b7 | ||
|
|
2d7cb12afe | ||
|
|
ff5b5f98b4 | ||
|
|
97fd671c12 | ||
|
|
ebb37732f4 | ||
|
|
3cc7923058 | ||
|
|
94f8d1a700 | ||
|
|
39b4101d19 | ||
|
|
5cd9197fa8 | ||
|
|
dcc39da87d | ||
|
|
a096a56428 | ||
|
|
0b81e46306 | ||
|
|
3720e09779 | ||
|
|
91fdf6144c | ||
|
|
c23c2245f2 | ||
|
|
cb85b6fc43 | ||
|
|
9ca0dd6cdc | ||
|
|
c59f53eeed | ||
|
|
040bd5b10c | ||
|
|
bb07f87f9c | ||
|
|
40755424ee | ||
|
|
fe8610b30d | ||
|
|
a0a4051c8a | ||
|
|
d38c3f3406 | ||
|
|
9d9e099cdb | ||
|
|
a9430070d2 | ||
|
|
a3d30eb32f | ||
|
|
6bd00d8403 | ||
|
|
d715f02da0 | ||
|
|
81a56fe304 | ||
|
|
99c87d0f1d | ||
|
|
3a164e294d | ||
|
|
c42b0b536d | ||
|
|
c61b4361ab | ||
|
|
065f86a74c | ||
|
|
0f6c7608ec | ||
|
|
93d59b024a | ||
|
|
096a8ab2e2 | ||
|
|
1a3e1dcabc | ||
|
|
69056bfb2c | ||
|
|
dd4221802f | ||
|
|
e1783f3c23 | ||
|
|
0957774208 | ||
|
|
77963d5267 | ||
|
|
03f4a8d044 | ||
|
|
8cca8913a7 | ||
|
|
2f13fc7843 | ||
|
|
e7f68be143 | ||
|
|
197bb1507e | ||
|
|
b18a719cee | ||
|
|
b330c6c70d | ||
|
|
64a3770a76 | ||
|
|
6a745f50f8 | ||
|
|
f41ff6d3e7 | ||
|
|
400691af85 | ||
|
|
0bada691fc | ||
|
|
164a1018a0 | ||
|
|
805acdf782 | ||
|
|
df3f9f2e40 | ||
|
|
2761a17abc | ||
|
|
77b364d682 | ||
|
|
1989effaad | ||
|
|
142e4e95b7 | ||
|
|
44d37808f1 | ||
|
|
eb3e64d243 | ||
|
|
2171fd12ca | ||
|
|
249af70dcd | ||
|
|
b4a5b35c0e | ||
|
|
fe2d0f488d | ||
|
|
c14140a8fe | ||
|
|
9fe661f422 | ||
|
|
87f9b58957 | ||
|
|
b657183209 | ||
|
|
1aad255846 | ||
|
|
52beeb5814 | ||
|
|
c1ad8075a8 | ||
|
|
3fcb6a376a | ||
|
|
33e873c2fa | ||
|
|
56fce18d66 | ||
|
|
399894e9a1 | ||
|
|
8146e0570e | ||
|
|
153ceda2f4 | ||
|
|
b134733dd2 | ||
|
|
8082b271d9 | ||
|
|
02d8c97e98 | ||
|
|
7bb3f64191 | ||
|
|
f2af4d6cdf | ||
|
|
4417465135 | ||
|
|
cf50c75a3e | ||
|
|
7ab265992a | ||
|
|
35cf9e4cc9 | ||
|
|
3fbbd16690 | ||
|
|
01029321c9 | ||
|
|
0477446e49 | ||
|
|
700ec2f855 | ||
|
|
709f2769ce | ||
|
|
19b965ac41 | ||
|
|
28d8748bdb | ||
|
|
497990a2d3 | ||
|
|
dce9a9c53d | ||
|
|
4f0aded5a0 | ||
|
|
73298469d5 | ||
|
|
7c019190c8 | ||
|
|
17df77ca0f | ||
|
|
a188f4269d | ||
|
|
6cdcd5775d | ||
|
|
1d0c2be515 | ||
|
|
fc7e1d0745 | ||
|
|
950a6ef794 | ||
|
|
7f829cfbdf | ||
|
|
86df54c107 | ||
|
|
34dead1a50 | ||
|
|
313554d12e | ||
|
|
8b39d3fdc7 | ||
|
|
66a5e5304b | ||
|
|
12df83e6d2 | ||
|
|
6b0145f92e | ||
|
|
b21043c7e5 | ||
|
|
ab9b2f555b | ||
|
|
cfeefc1d86 | ||
|
|
d65c478a28 | ||
|
|
477f7aed72 | ||
|
|
da3bf57515 | ||
|
|
0d43e135a9 | ||
|
|
ddd5172a6b | ||
|
|
6717bbbe26 | ||
|
|
7683466424 | ||
|
|
6cc380d8ce | ||
|
|
8740b2eb23 | ||
|
|
7244fad2e8 | ||
|
|
edbc28a48b | ||
|
|
33c95e860b | ||
|
|
a60968b7b2 | ||
|
|
8abc27e698 | ||
|
|
2646a48227 | ||
|
|
a8f57618b8 | ||
|
|
9374feefb0 | ||
|
|
d4726aff82 | ||
|
|
3ac6eaa16b | ||
|
|
e6bd55c0be | ||
|
|
c3975f4ce5 | ||
|
|
611c1a6d51 | ||
|
|
d5536fa536 | ||
|
|
ce895a4c59 | ||
|
|
a7d91b4f80 | ||
|
|
bb19d064d5 | ||
|
|
fa7c743843 | ||
|
|
a2a11e816a | ||
|
|
7c73ddeaaf | ||
|
|
bc6180680d | ||
|
|
21df66d221 | ||
|
|
684bbafad5 | ||
|
|
ce6b4729cd | ||
|
|
b0a6e167bc | ||
|
|
54bb3a01e2 | ||
|
|
fcce71fe23 | ||
|
|
de4db3e6bc | ||
|
|
7803f6bc10 | ||
|
|
5c1bcbaf44 | ||
|
|
eefe84fd4b | ||
|
|
a3c26c4ef3 | ||
|
|
a845c3e9f3 | ||
|
|
d151b5ef7c | ||
|
|
0491c1f195 | ||
|
|
1c04409cf3 | ||
|
|
14dd7cbc33 | ||
|
|
ebf4157e2c | ||
|
|
8a1747db2c | ||
|
|
ded65cf94a | ||
|
|
30757c8160 | ||
|
|
b3fe0d58d8 | ||
|
|
15a2221b23 | ||
|
|
c135230289 | ||
|
|
99af0ba0e5 | ||
|
|
2f296e9857 | ||
|
|
f02048e904 | ||
|
|
bdc391b4ce | ||
|
|
9aacd251b8 | ||
|
|
867ea6e92a | ||
|
|
ce89499518 | ||
|
|
cf4a29da84 | ||
|
|
edc1346753 | ||
|
|
ed5baf5839 | ||
|
|
5b100fb99e | ||
|
|
dc8fc40002 | ||
|
|
5a339e46cb | ||
|
|
90ec35c69e | ||
|
|
f98b00fcca | ||
|
|
83f2c27e6d | ||
|
|
b0adf85f12 | ||
|
|
fcbd75a0ef | ||
|
|
d1e71454cf | ||
|
|
fdf1aaebcc | ||
|
|
238ea9118b | ||
|
|
67838fa66b | ||
|
|
c574f23210 | ||
|
|
a66e000699 | ||
|
|
c692c93f94 | ||
|
|
a491f2a88b | ||
|
|
9d912446a7 | ||
|
|
3d3a4cac55 | ||
|
|
fc0a68a18a | ||
|
|
ea2627d4f6 | ||
|
|
21321f0196 | ||
|
|
dadb90a6d8 | ||
|
|
d5d3eef08b | ||
|
|
14fb93f5cf | ||
|
|
7b3cd7d663 | ||
|
|
67817a182c |
@@ -27,10 +27,17 @@ Pull Requests
|
|||||||
Releases
|
Releases
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
Recommended checkpoints, use at your own discretion:
|
||||||
|
|
||||||
- Make at least one -betaN release to verify the GitHub workflow well in time release day
|
- Make at least one -betaN release to verify the GitHub workflow well in time release day
|
||||||
- Stuff happens, remember kernelkit/infix#735
|
- Stuff happens, remember kernelkit/infix#735
|
||||||
- Make at least one -rcN to flush out any issues in customer repos
|
- Make at least one -rcN to flush out any issues in customer repos
|
||||||
- Easy to forget adaptations/hacks in customer repos -- may need Infix change/support
|
- Easy to forget adaptations/hacks in customer repos -- may need Infix change/support
|
||||||
|
- Verify release artifacts (checksums, completeness, no corrupted files)
|
||||||
|
- Test on actual hardware for at least one architecture
|
||||||
|
- Review ChangeLog for completeness
|
||||||
|
- Check for release-blocking issues
|
||||||
|
- Verify generated GNS3 appliance, no marketplace update on -rc builds
|
||||||
- Ensure the markdown link for the release diff is updated
|
- Ensure the markdown link for the release diff is updated
|
||||||
- Ensure subrepos are tagged (can be automated, see kernelkit/infix#393)
|
- Ensure subrepos are tagged (can be automated, see kernelkit/infix#393)
|
||||||
- Sync tags for all repo. sync activities
|
- Sync tags for all repo. sync activities
|
||||||
|
|||||||
@@ -0,0 +1,215 @@
|
|||||||
|
name: bitSign Infix Release
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
release_version:
|
||||||
|
description: 'Release version (e.g., v25.08.0)'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
push:
|
||||||
|
branches: [ sign-with-bitsign ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
sign-infix-release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Validate release version format
|
||||||
|
id: validate
|
||||||
|
run: |
|
||||||
|
# Use default version for push events, input version for manual dispatch
|
||||||
|
if [ "${{ github.event_name }}" = "push" ]; then
|
||||||
|
VERSION="v25.08.0"
|
||||||
|
echo "Using default version for push trigger: $VERSION"
|
||||||
|
else
|
||||||
|
VERSION="${{ inputs.release_version }}"
|
||||||
|
echo "Using input version for manual trigger: $VERSION"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if version starts with 'v' and has proper format
|
||||||
|
if ! echo "$VERSION" | grep -qE '^v[0-9]+\.[0-9]+(\.[0-9]+)?(-alpha[0-9]*|-beta[0-9]*|-rc[0-9]*)?$'; then
|
||||||
|
echo "❌ Invalid version format. Expected format: vYY.MM(.PP)(-alphaN|-betaN|-rcN)"
|
||||||
|
echo "Examples: v25.08.0, v25.08.0-alpha1, v25.08.0-rc1"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract version without 'v' prefix for filename
|
||||||
|
FILE_VERSION="${VERSION#v}"
|
||||||
|
FILENAME="infix-x86_64-${FILE_VERSION}.tar.gz"
|
||||||
|
RELEASE_URL="https://github.com/kernelkit/infix/releases/download/${VERSION}/${FILENAME}"
|
||||||
|
|
||||||
|
echo "✅ Version format valid"
|
||||||
|
echo "file_version=${FILE_VERSION}" >> $GITHUB_OUTPUT
|
||||||
|
echo "filename=${FILENAME}" >> $GITHUB_OUTPUT
|
||||||
|
echo "release_url=${RELEASE_URL}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Download Infix release
|
||||||
|
run: |
|
||||||
|
RELEASE_URL="${{ steps.validate.outputs.release_url }}"
|
||||||
|
FILENAME="${{ steps.validate.outputs.filename }}"
|
||||||
|
|
||||||
|
echo "Downloading Infix release: $FILENAME"
|
||||||
|
echo "From: $RELEASE_URL"
|
||||||
|
|
||||||
|
if ! curl -L "$RELEASE_URL" -o "$FILENAME" --fail --show-error --progress-bar; then
|
||||||
|
echo "❌ Failed to download release file from: $RELEASE_URL"
|
||||||
|
echo "Please verify that the release version exists and contains the x86_64 build."
|
||||||
|
echo "You can check available releases at: https://github.com/kernelkit/infix/releases"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verify download
|
||||||
|
if [ -f "$FILENAME" ] && [ -s "$FILENAME" ]; then
|
||||||
|
FILE_SIZE=$(ls -lh "$FILENAME" | awk '{print $5}')
|
||||||
|
echo "✅ Successfully downloaded: $FILENAME ($FILE_SIZE)"
|
||||||
|
else
|
||||||
|
echo "❌ Failed to download release file"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Create signing request
|
||||||
|
id: create_request
|
||||||
|
run: |
|
||||||
|
FILENAME="${{ steps.validate.outputs.filename }}"
|
||||||
|
FILE_VERSION="${{ steps.validate.outputs.file_version }}"
|
||||||
|
RELEASE="infix-x86_64-${FILE_VERSION}"
|
||||||
|
|
||||||
|
echo "Creating signing request for $FILENAME..."
|
||||||
|
echo "RELEASE parameter: $RELEASE"
|
||||||
|
|
||||||
|
# Create signing request using bitSign API
|
||||||
|
RESPONSE=$(curl -s -X POST "https://portal.bitsign.se/api/v1/requests" \
|
||||||
|
-H "Authorization: Bearer ${{ secrets.BITSIGN_API_KEY }}" \
|
||||||
|
-F "file=@$FILENAME" \
|
||||||
|
-F "key=bit42-Demo1" \
|
||||||
|
-F "job=Infix-x86" \
|
||||||
|
-F "parameters={\"RELEASE\": \"$RELEASE\"}")
|
||||||
|
|
||||||
|
echo "API Response: $RESPONSE"
|
||||||
|
|
||||||
|
# Check if request was successful
|
||||||
|
if echo "$RESPONSE" | jq -e '.success == true' > /dev/null; then
|
||||||
|
REQUEST_ID=$(echo "$RESPONSE" | jq -r '.requestId')
|
||||||
|
echo "✅ Request created successfully with ID: $REQUEST_ID"
|
||||||
|
echo "request_id=$REQUEST_ID" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "❌ Failed to create signing request"
|
||||||
|
echo "$RESPONSE" | jq -r '.error // .message // "Unknown error"'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Wait for signing completion
|
||||||
|
id: wait_completion
|
||||||
|
run: |
|
||||||
|
REQUEST_ID="${{ steps.create_request.outputs.request_id }}"
|
||||||
|
echo "Waiting for signing completion for request: $REQUEST_ID"
|
||||||
|
|
||||||
|
# Poll status for up to 10 minutes (600 seconds) - longer timeout for larger files
|
||||||
|
MAX_WAIT=600
|
||||||
|
WAITED=0
|
||||||
|
|
||||||
|
while [ $WAITED -lt $MAX_WAIT ]; do
|
||||||
|
RESPONSE=$(curl -s -X GET "https://portal.bitsign.se/api/v1/requests/$REQUEST_ID/status" \
|
||||||
|
-H "Authorization: Bearer ${{ secrets.BITSIGN_API_KEY }}")
|
||||||
|
|
||||||
|
STATUS=$(echo "$RESPONSE" | jq -r '.status')
|
||||||
|
echo "Current status: $STATUS (waited ${WAITED}s)"
|
||||||
|
|
||||||
|
if [ "$STATUS" = "completed" ]; then
|
||||||
|
echo "✅ Signing completed successfully!"
|
||||||
|
break
|
||||||
|
elif [ "$STATUS" = "failed" ]; then
|
||||||
|
echo "❌ Signing failed"
|
||||||
|
echo "$RESPONSE" | jq -r '.error // .message // "Unknown error"'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
sleep 10
|
||||||
|
WAITED=$((WAITED + 10))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $WAITED -ge $MAX_WAIT ]; then
|
||||||
|
echo "❌ Timeout: Signing did not complete within ${MAX_WAIT} seconds"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Download signed file
|
||||||
|
id: download_signed
|
||||||
|
run: |
|
||||||
|
REQUEST_ID="${{ steps.create_request.outputs.request_id }}"
|
||||||
|
FILENAME="${{ steps.validate.outputs.filename }}"
|
||||||
|
FILE_VERSION="${{ steps.validate.outputs.file_version }}"
|
||||||
|
SIGNED_FILENAME="infix-x86_64-${FILE_VERSION}-signed.tar.gz"
|
||||||
|
|
||||||
|
echo "Downloading signed file for request: $REQUEST_ID"
|
||||||
|
echo "Expected signed filename: $SIGNED_FILENAME"
|
||||||
|
|
||||||
|
# Download the signed file
|
||||||
|
curl -X GET "https://portal.bitsign.se/api/v1/requests/$REQUEST_ID/download" \
|
||||||
|
-H "Authorization: Bearer ${{ secrets.BITSIGN_API_KEY }}" \
|
||||||
|
-o "$SIGNED_FILENAME" \
|
||||||
|
--fail --show-error
|
||||||
|
|
||||||
|
if [ -f "$SIGNED_FILENAME" ] && [ -s "$SIGNED_FILENAME" ]; then
|
||||||
|
FILE_SIZE=$(ls -lh "$SIGNED_FILENAME" | awk '{print $5}')
|
||||||
|
echo "Successfully downloaded signed file: $SIGNED_FILENAME ($FILE_SIZE)"
|
||||||
|
echo "signed_filename=$SIGNED_FILENAME" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
# Calculate SHA256 checksums for both files
|
||||||
|
ORIGINAL_SHA256=$(sha256sum "$FILENAME" | cut -d' ' -f1)
|
||||||
|
SIGNED_SHA256=$(sha256sum "$SIGNED_FILENAME" | cut -d' ' -f1)
|
||||||
|
echo "original_sha256=$ORIGINAL_SHA256" >> $GITHUB_OUTPUT
|
||||||
|
echo "signed_sha256=$SIGNED_SHA256" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "Failed to download signed file"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Upload signed artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: signed-infix-${{ steps.validate.outputs.file_version }}
|
||||||
|
path: ${{ steps.download_signed.outputs.signed_filename }}
|
||||||
|
retention-days: 90
|
||||||
|
|
||||||
|
- name: Summary
|
||||||
|
run: |
|
||||||
|
# Determine the actual version used (could be from push or input)
|
||||||
|
if [ "${{ github.event_name }}" = "push" ]; then
|
||||||
|
ACTUAL_VERSION="v25.08.0"
|
||||||
|
else
|
||||||
|
ACTUAL_VERSION="${{ inputs.release_version }}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat >> $GITHUB_STEP_SUMMARY << EOF
|
||||||
|
# bitSign Infix Release Signing Complete
|
||||||
|
|
||||||
|
The Infix release has been successfully signed using the bitSign API.
|
||||||
|
|
||||||
|
## Signing Details
|
||||||
|
|
||||||
|
| Property | Value |
|
||||||
|
|----------|-------|
|
||||||
|
| 📦 **Original File** | \`${{ steps.validate.outputs.filename }}\` (\`${{ steps.download_signed.outputs.original_sha256 }}\`) |
|
||||||
|
| ✍️ **Signed File** | \`${{ steps.download_signed.outputs.signed_filename }}\` (\`${{ steps.download_signed.outputs.signed_sha256 }}\`) |
|
||||||
|
| 🔑 **Signing Key** | \`bit42-Demo1\` |
|
||||||
|
| ⚙️ **Job Type** | \`Infix-x86\` |
|
||||||
|
| 🆔 **Request ID** | \`${{ steps.create_request.outputs.request_id }}\` |
|
||||||
|
| 📋 **Release Version** | \`\$ACTUAL_VERSION\` |
|
||||||
|
| 🌐 **API Endpoint** | \`portal.bitsign.se\` |
|
||||||
|
|
||||||
|
## Download Files
|
||||||
|
|
||||||
|
> **The signed release file is available as a workflow artifact:**
|
||||||
|
> **\`signed-infix-${{ steps.validate.outputs.file_version }}\`**
|
||||||
|
>
|
||||||
|
> The artifact contains the signed file: \`${{ steps.download_signed.outputs.signed_filename }}\`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Next Steps:** The signed release can now be distributed with cryptographic verification of authenticity.
|
||||||
|
EOF
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
name: Build Bootloaders
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
branch:
|
||||||
|
description: 'Branch to build from'
|
||||||
|
default: 'main'
|
||||||
|
type: string
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build ${{ matrix.defconfig }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
defconfig:
|
||||||
|
- aarch64_qemu_boot
|
||||||
|
- bpi_r3_boot
|
||||||
|
- cn9130_crb_boot
|
||||||
|
- fireant_boot
|
||||||
|
- nanopi_r2s_boot
|
||||||
|
- rpi64_boot
|
||||||
|
env:
|
||||||
|
MAKEFLAGS: -j5
|
||||||
|
steps:
|
||||||
|
- name: Cleanup Build Folder
|
||||||
|
run: |
|
||||||
|
ls -la ./
|
||||||
|
rm -rf ./* || true
|
||||||
|
rm -rf ./.??* || true
|
||||||
|
ls -la ./
|
||||||
|
|
||||||
|
- name: Checkout infix repo
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.branch || github.ref }}
|
||||||
|
clean: true
|
||||||
|
fetch-depth: 0
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Set Build Variables
|
||||||
|
id: vars
|
||||||
|
run: |
|
||||||
|
defconfig=${{ matrix.defconfig }}
|
||||||
|
version=$(awk -F'"' '/BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE=/ {print $2}' configs/${defconfig}_defconfig)
|
||||||
|
version=${version:-git}
|
||||||
|
filename=$(echo "${defconfig}" | tr '_' '-')
|
||||||
|
|
||||||
|
# TODO: Replace hardcoded rev with actual revision stepping
|
||||||
|
rev="latest"
|
||||||
|
|
||||||
|
archive="${filename}-${version}-${rev}.tar.gz"
|
||||||
|
dirname="${filename}-${version}-${rev}"
|
||||||
|
|
||||||
|
echo "defconfig=${defconfig}" >> $GITHUB_OUTPUT
|
||||||
|
echo "version=${version}" >> $GITHUB_OUTPUT
|
||||||
|
echo "rev=${rev}" >> $GITHUB_OUTPUT
|
||||||
|
echo "archive=${archive}" >> $GITHUB_OUTPUT
|
||||||
|
echo "dirname=${dirname}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
echo "Building ${defconfig}_defconfig, version ${version}-${rev}, artifact ${archive} ..."
|
||||||
|
|
||||||
|
- name: Restore Cache of dl/
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
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: |
|
||||||
|
make ${{ matrix.defconfig }}_defconfig
|
||||||
|
|
||||||
|
- name: Build ${{ matrix.defconfig }}_defconfig
|
||||||
|
run: |
|
||||||
|
echo "Building ${{ matrix.defconfig }}_defconfig ..."
|
||||||
|
make -j$((`getconf _NPROCESSORS_ONLN` / 2 + 2))
|
||||||
|
|
||||||
|
- name: Resulting size of build
|
||||||
|
run: |
|
||||||
|
printf "Size of output/images/: "
|
||||||
|
ls -l output/images/
|
||||||
|
|
||||||
|
- name: Prepare ${{ matrix.defconfig }} Artifact
|
||||||
|
run: |
|
||||||
|
cd output/
|
||||||
|
mv images ${{ steps.vars.outputs.dirname }}
|
||||||
|
tar cfz ${{ steps.vars.outputs.archive }} ${{ steps.vars.outputs.dirname }}/
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
path: output/${{ steps.vars.outputs.archive }}
|
||||||
|
name: artifact-${{ matrix.defconfig }}
|
||||||
|
|
||||||
|
publish:
|
||||||
|
name: Upload Bootloader Artifacts
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
pattern: "artifact-*"
|
||||||
|
merge-multiple: true
|
||||||
|
|
||||||
|
- name: Create checksums ...
|
||||||
|
run: |
|
||||||
|
for file in *.tar.gz; do
|
||||||
|
sha256sum $file > $file.sha256
|
||||||
|
done
|
||||||
|
|
||||||
|
- uses: ncipollo/release-action@v1
|
||||||
|
with:
|
||||||
|
allowUpdates: true
|
||||||
|
omitName: true
|
||||||
|
omitBody: true
|
||||||
|
omitBodyDuringUpdate: true
|
||||||
|
prerelease: true
|
||||||
|
tag: "latest-boot"
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
artifacts: "*.tar.gz*"
|
||||||
|
|
||||||
|
- name: Summary
|
||||||
|
run: |
|
||||||
|
cat <<EOF >> $GITHUB_STEP_SUMMARY
|
||||||
|
# Bootloader Build Complete! :rocket:
|
||||||
|
|
||||||
|
For the public download links of these bootloader artifacts, please see:
|
||||||
|
<https://github.com/kernelkit/infix/releases/tag/latest-boot>
|
||||||
|
EOF
|
||||||
@@ -0,0 +1,218 @@
|
|||||||
|
name: Create SD Card Images
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
board:
|
||||||
|
description: 'Board to create image for'
|
||||||
|
type: choice
|
||||||
|
required: true
|
||||||
|
options:
|
||||||
|
- raspberrypi-rpi64
|
||||||
|
- bananapi-bpi-r3
|
||||||
|
- friendlyarm-nanopi-r2s
|
||||||
|
default: 'raspberrypi-rpi64'
|
||||||
|
use_latest_release:
|
||||||
|
description: 'Use latest release artifacts instead of workflow artifacts'
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
create-image:
|
||||||
|
name: Create SD Card Image for ${{ inputs.board }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
clean: true
|
||||||
|
fetch-depth: 0
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y \
|
||||||
|
genimage \
|
||||||
|
u-boot-tools \
|
||||||
|
parted \
|
||||||
|
gdisk \
|
||||||
|
qemu-utils \
|
||||||
|
dosfstools \
|
||||||
|
e2fsprogs \
|
||||||
|
genext2fs \
|
||||||
|
mtools \
|
||||||
|
jq
|
||||||
|
|
||||||
|
- name: Prepare build environment
|
||||||
|
run: |
|
||||||
|
# Set up directory structure similar to buildroot build
|
||||||
|
mkdir -p output/images
|
||||||
|
mkdir -p build
|
||||||
|
|
||||||
|
- name: Set bootloader and target based on board
|
||||||
|
run: |
|
||||||
|
case "${{ inputs.board }}" in
|
||||||
|
raspberrypi-rpi64)
|
||||||
|
echo "BOOTLOADER=rpi64_boot" >> $GITHUB_ENV
|
||||||
|
echo "TARGET=aarch64" >> $GITHUB_ENV
|
||||||
|
;;
|
||||||
|
bananapi-bpi-r3)
|
||||||
|
echo "BOOTLOADER=bpi_r3_boot" >> $GITHUB_ENV
|
||||||
|
echo "TARGET=aarch64" >> $GITHUB_ENV
|
||||||
|
;;
|
||||||
|
friendlyarm-nanopi-r2s)
|
||||||
|
echo "BOOTLOADER=nanopi_r2s_boot" >> $GITHUB_ENV
|
||||||
|
echo "TARGET=aarch64" >> $GITHUB_ENV
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Error: Unknown board ${{ inputs.board }}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo "Using bootloader: $BOOTLOADER and target: $TARGET for board: ${{ inputs.board }}"
|
||||||
|
|
||||||
|
- name: Download bootloader artifacts
|
||||||
|
if: ${{ !inputs.use_latest_release }}
|
||||||
|
run: |
|
||||||
|
# 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)
|
||||||
|
|
||||||
|
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/
|
||||||
|
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-${TARGET} --dir 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/
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Download from latest releases
|
||||||
|
if: ${{ inputs.use_latest_release }}
|
||||||
|
run: |
|
||||||
|
# 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/
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Verify extracted files
|
||||||
|
run: |
|
||||||
|
echo "Files available for mkimage.sh:"
|
||||||
|
ls -la output/images/
|
||||||
|
echo ""
|
||||||
|
echo "File types:"
|
||||||
|
file output/images/* || true
|
||||||
|
|
||||||
|
- name: Create SD card image
|
||||||
|
run: |
|
||||||
|
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 }}
|
||||||
|
|
||||||
|
- name: Verify created image
|
||||||
|
run: |
|
||||||
|
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
|
||||||
|
|
||||||
|
- name: Upload SD card image
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: sdcard-image-${{ inputs.board }}-${{ env.BOOTLOADER }}
|
||||||
|
path: |
|
||||||
|
output/images/*-sdcard.img*
|
||||||
|
retention-days: 30
|
||||||
|
|
||||||
|
- name: Create checksums
|
||||||
|
run: |
|
||||||
|
cd output/images/
|
||||||
|
for file in *-sdcard.img; do
|
||||||
|
if [ -f "$file" ]; then
|
||||||
|
sha256sum "$file" > "$file.sha256"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Upload to release
|
||||||
|
uses: ncipollo/release-action@v1
|
||||||
|
with:
|
||||||
|
allowUpdates: true
|
||||||
|
omitName: true
|
||||||
|
omitBody: true
|
||||||
|
omitBodyDuringUpdate: true
|
||||||
|
prerelease: true
|
||||||
|
tag: "latest-boot"
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
artifacts: "output/images/*-sdcard.img*"
|
||||||
|
|
||||||
|
- name: Generate summary
|
||||||
|
run: |
|
||||||
|
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 "*.qcow2" -o -name "*.raw" | xargs ls -lh 2>/dev/null | sed 's/^/- /' || echo "- No images found")
|
||||||
|
|
||||||
|
## Download
|
||||||
|
The SD card image is available as a workflow artifact above.
|
||||||
|
EOF
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
name: Build Release
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
version:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
use_cache:
|
||||||
|
required: false
|
||||||
|
type: boolean
|
||||||
|
default: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build Infix ${{ inputs.version }} [${{ matrix.target }}]
|
||||||
|
runs-on: [self-hosted, release]
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
target: [aarch64, x86_64]
|
||||||
|
fail-fast: false
|
||||||
|
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
|
||||||
|
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
clean: true
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Set Release Variables
|
||||||
|
id: vars
|
||||||
|
run: |
|
||||||
|
ver=${{ inputs.version }}
|
||||||
|
echo "ver=${ver}" >> $GITHUB_OUTPUT
|
||||||
|
fver=${ver#v}
|
||||||
|
target=${{ matrix.target }}-${fver}
|
||||||
|
echo "dir=infix-$target" >> $GITHUB_OUTPUT
|
||||||
|
echo "tgz=infix-$target.tar.gz" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Restore Cache of dl/
|
||||||
|
if: ${{ inputs.use_cache }}
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
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:
|
||||||
|
INFIX_RELEASE: ${{ steps.vars.outputs.ver }}
|
||||||
|
run: |
|
||||||
|
target=${{ matrix.target }}_defconfig
|
||||||
|
echo "Building $target ..."
|
||||||
|
make $target
|
||||||
|
make
|
||||||
|
|
||||||
|
- name: Generate SBOM from Build
|
||||||
|
run: |
|
||||||
|
make legal-info
|
||||||
|
|
||||||
|
- name: Build test specification
|
||||||
|
run: |
|
||||||
|
make test-spec
|
||||||
|
|
||||||
|
- name: Prepare Artifacts
|
||||||
|
run: |
|
||||||
|
cd output/
|
||||||
|
mv images ${{ steps.vars.outputs.dir }}
|
||||||
|
ln -s ${{ steps.vars.outputs.dir }} images
|
||||||
|
tar cfz ${{ steps.vars.outputs.tgz }} ${{ steps.vars.outputs.dir }}
|
||||||
|
|
||||||
|
mv legal-info legal-info-${{ matrix.target }}-${{ steps.vars.outputs.ver }}
|
||||||
|
tar cfz legal-info-${{ matrix.target }}-${{ steps.vars.outputs.ver }}.tar.gz legal-info-${{ matrix.target }}-${{ steps.vars.outputs.ver }}
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: artifact-${{ matrix.target }}
|
||||||
|
path: output/*.tar.gz
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: artifact-disk-image-${{ matrix.target }}
|
||||||
|
path: output/images/*.qcow2
|
||||||
+43
-27
@@ -3,23 +3,23 @@ name: Build
|
|||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
flavor:
|
target:
|
||||||
description: 'Optional build flavor (e.g. _minimal)'
|
description: "Build target (e.g. aarch64 or aarch64_minimal)"
|
||||||
required: false
|
default: "x86_64"
|
||||||
default: ''
|
|
||||||
type: string
|
type: string
|
||||||
parallel:
|
parallel:
|
||||||
description: 'Massive parallel build of each image'
|
description: 'Massive parallel build of each image'
|
||||||
required: false
|
|
||||||
default: true
|
default: true
|
||||||
type: boolean
|
type: boolean
|
||||||
|
name:
|
||||||
|
description: "Name (for spin overrides)"
|
||||||
|
default: "infix"
|
||||||
|
type: string
|
||||||
infix_repo:
|
infix_repo:
|
||||||
description: 'Repo to checkout (for spin overrides)'
|
description: 'Repo to checkout (for spin overrides)'
|
||||||
required: false
|
|
||||||
default: kernelkit/infix
|
default: kernelkit/infix
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
|
|
||||||
workflow_call:
|
workflow_call:
|
||||||
inputs:
|
inputs:
|
||||||
target:
|
target:
|
||||||
@@ -28,23 +28,26 @@ on:
|
|||||||
name:
|
name:
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
flavor:
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ''
|
|
||||||
infix_repo:
|
infix_repo:
|
||||||
required: false
|
required: false
|
||||||
type: string
|
type: string
|
||||||
default: kernelkit/infix
|
default: kernelkit/infix
|
||||||
|
parallel:
|
||||||
|
required: false
|
||||||
|
type: boolean
|
||||||
|
default: true
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FLV: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.flavor || inputs.flavor }}
|
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_REPO: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.infix_repo || inputs.infix_repo }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build ${{ inputs.name }} ${{ inputs.target }}
|
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 ]
|
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:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
outputs:
|
outputs:
|
||||||
@@ -56,6 +59,15 @@ jobs:
|
|||||||
rm -rf ./* || true
|
rm -rf ./* || true
|
||||||
rm -rf ./.??* || true
|
rm -rf ./.??* || true
|
||||||
ls -la ./
|
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
|
- name: Checkout infix repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@@ -80,12 +92,11 @@ jobs:
|
|||||||
| tee -a $GITHUB_OUTPUT $GITHUB_ENV
|
| tee -a $GITHUB_OUTPUT $GITHUB_ENV
|
||||||
fi
|
fi
|
||||||
|
|
||||||
target=${{ inputs.target }}
|
target=${{ env.TARGET }}
|
||||||
name=${{ inputs.name }}
|
name=${{ env.NAME }}
|
||||||
echo "dir=${name}-${target}" >> $GITHUB_OUTPUT
|
echo "dir=${name}-${target}" >> $GITHUB_OUTPUT
|
||||||
echo "tgz=${name}-${target}.tar.gz" >> $GITHUB_OUTPUT
|
echo "tgz=${name}-${target}.tar.gz" >> $GITHUB_OUTPUT
|
||||||
echo "flv=$FLV" >> $GITHUB_OUTPUT
|
echo "Building target ${target}_defconfig"
|
||||||
echo "Building target ${target}${FLV}_defconfig"
|
|
||||||
|
|
||||||
- name: Restore Cache of dl/
|
- name: Restore Cache of dl/
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
@@ -99,16 +110,21 @@ jobs:
|
|||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: .ccache/
|
path: .ccache/
|
||||||
key: ccache-${{ inputs.target }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }}
|
key: ccache-${{ env.TARGET }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
ccache-${{ inputs.target }}-
|
ccache-${{ env.TARGET }}-
|
||||||
ccache-
|
ccache-
|
||||||
|
|
||||||
- name: Configure ${{ inputs.target }}${{ steps.vars.outputs.flv }}
|
- name: Configure ${{ env.TARGET }}
|
||||||
run: |
|
run: |
|
||||||
make ${{ inputs.target }}${{ steps.vars.outputs.flv }}_defconfig
|
make ${{ env.TARGET }}_defconfig
|
||||||
|
|
||||||
- name: Unit Test ${{ inputs.target }}
|
- name: Cleanup stale containers and ports
|
||||||
|
run: |
|
||||||
|
podman rm -af || true
|
||||||
|
pkill -9 -f rootlessport || true
|
||||||
|
|
||||||
|
- name: Unit Test ${{ env.TARGET }}
|
||||||
run: |
|
run: |
|
||||||
make test-unit
|
make test-unit
|
||||||
|
|
||||||
@@ -116,7 +132,7 @@ jobs:
|
|||||||
id: parallel
|
id: parallel
|
||||||
run: |
|
run: |
|
||||||
|
|
||||||
if [ "${{ ((github.event.inputs.parallel == 'true' && github.event_name == 'workflow_dispatch') || (github.ref_name != 'main' && github.event_name != 'workflow_dispatch')) }}" == "true" ]; then
|
if [ "$PARALLEL" == "true" ]; then
|
||||||
echo "BR2_PER_PACKAGE_DIRECTORIES=y" >> output/.config
|
echo "BR2_PER_PACKAGE_DIRECTORIES=y" >> output/.config
|
||||||
MAKE="make -j$((`getconf _NPROCESSORS_ONLN` / 2 + 2))"
|
MAKE="make -j$((`getconf _NPROCESSORS_ONLN` / 2 + 2))"
|
||||||
echo "Building in parallel with -j$((`getconf _NPROCESSORS_ONLN` / 2 + 2))"
|
echo "Building in parallel with -j$((`getconf _NPROCESSORS_ONLN` / 2 + 2))"
|
||||||
@@ -126,9 +142,9 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
echo "MAKE=$MAKE" >> $GITHUB_OUTPUT
|
echo "MAKE=$MAKE" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Build ${{ inputs.target }}${{ steps.vars.outputs.flv }}
|
- name: Build ${{ env.TARGET }}
|
||||||
run: |
|
run: |
|
||||||
echo "Building ${{ inputs.target }}${{ steps.vars.outputs.flv }}_defconfig ..."
|
echo "Building ${{ env.TARGET }}_defconfig ..."
|
||||||
eval "${{ steps.parallel.outputs.MAKE }}"
|
eval "${{ steps.parallel.outputs.MAKE }}"
|
||||||
|
|
||||||
- name: Check SBOM from Build
|
- name: Check SBOM from Build
|
||||||
@@ -150,7 +166,7 @@ jobs:
|
|||||||
printf "Size of output/images/: "
|
printf "Size of output/images/: "
|
||||||
ls -l output/images/
|
ls -l output/images/
|
||||||
|
|
||||||
- name: Prepare ${{ inputs.target }} Artifact
|
- name: Prepare ${{ env.TARGET }} Artifact
|
||||||
run: |
|
run: |
|
||||||
cd output/
|
cd output/
|
||||||
mv images ${{ steps.vars.outputs.dir }}
|
mv images ${{ steps.vars.outputs.dir }}
|
||||||
@@ -160,4 +176,4 @@ jobs:
|
|||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
path: output/${{ steps.vars.outputs.tgz }}
|
path: output/${{ steps.vars.outputs.tgz }}
|
||||||
name: artifact-${{ inputs.target }}
|
name: artifact-${{ env.TARGET }}
|
||||||
|
|||||||
@@ -0,0 +1,115 @@
|
|||||||
|
name: Check Kernel 6.12 Release
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch: # Allow manual triggering
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-kernel:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out infix repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
token: ${{ secrets.KERNEL_UPDATE_TOKEN }}
|
||||||
|
|
||||||
|
- name: Check out linux repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: kernelkit/linux
|
||||||
|
path: linux
|
||||||
|
fetch-depth: 0
|
||||||
|
token: ${{ secrets.KERNEL_UPDATE_TOKEN }}
|
||||||
|
|
||||||
|
- 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.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"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
|
||||||
|
echo "Current 6.12 kernel version: $CURRENT_VERSION"
|
||||||
|
|
||||||
|
# Get the latest tag from our linux tree
|
||||||
|
cd linux
|
||||||
|
git fetch origin
|
||||||
|
LATEST_TAG=$(git tag -l "v6.12.*" | sort -V | tail -n1 | sed 's/^v//')
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
echo "latest_tag=$LATEST_TAG" >> $GITHUB_OUTPUT
|
||||||
|
echo "Latest tag in our tree: $LATEST_TAG"
|
||||||
|
|
||||||
|
if [ "$CURRENT_VERSION" != "$LATEST_TAG" ]; then
|
||||||
|
echo "new_release=true" >> $GITHUB_OUTPUT
|
||||||
|
echo "🎉 New 6.12 kernel released: $CURRENT_VERSION (our version: $LATEST_TAG)"
|
||||||
|
else
|
||||||
|
echo "new_release=false" >> $GITHUB_OUTPUT
|
||||||
|
echo "No change - still at $CURRENT_VERSION"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Set up git credentials
|
||||||
|
if: steps.check.outputs.new_release == 'true'
|
||||||
|
run: |
|
||||||
|
set -e -o pipefail
|
||||||
|
git config --global user.email "ael-bot@users.noreply.github.com"
|
||||||
|
git config --global user.name "ael-bot"
|
||||||
|
|
||||||
|
# Configure git to use the token for HTTPS operations
|
||||||
|
git config --global url."https://ael-bot:${{ secrets.KERNEL_UPDATE_TOKEN }}@github.com/".insteadOf "git@github.com:"
|
||||||
|
git config --global url."https://ael-bot:${{ secrets.KERNEL_UPDATE_TOKEN }}@github.com/".insteadOf "https://github.com/"
|
||||||
|
|
||||||
|
- name: Run kernel upgrade script
|
||||||
|
if: steps.check.outputs.new_release == 'true'
|
||||||
|
env:
|
||||||
|
GIT_TERMINAL_PROMPT: 0
|
||||||
|
run: |
|
||||||
|
set -e -o pipefail
|
||||||
|
./utils/kernel-upgrade.sh linux
|
||||||
|
|
||||||
|
- name: Create pull request
|
||||||
|
if: steps.check.outputs.new_release == 'true'
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.KERNEL_UPDATE_TOKEN }}
|
||||||
|
script: |
|
||||||
|
// Check if PR already exists
|
||||||
|
const { data: pulls } = await github.rest.pulls.list({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
head: `${context.repo.owner}:kernel-upgrade`,
|
||||||
|
state: 'open'
|
||||||
|
});
|
||||||
|
|
||||||
|
if (pulls.length === 0) {
|
||||||
|
const { data: pr } = await github.rest.pulls.create({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
title: `Upgrade to kernel ${{ steps.check.outputs.current_version }}`,
|
||||||
|
head: 'kernel-upgrade',
|
||||||
|
base: 'main',
|
||||||
|
body: `Automated kernel upgrade to version ${{ steps.check.outputs.current_version }}.\n\n**Previous version:** ${{ steps.check.outputs.latest_tag }}\n**New version:** ${{ steps.check.outputs.current_version }}\n**Source:** https://www.kernel.org/\n\nThis PR was automatically created by the kernel release monitoring workflow.`
|
||||||
|
});
|
||||||
|
|
||||||
|
// Add label
|
||||||
|
await github.rest.issues.addLabels({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: pr.number,
|
||||||
|
labels: ['ci:main']
|
||||||
|
});
|
||||||
|
|
||||||
|
// Request reviews
|
||||||
|
await github.rest.pulls.requestReviewers({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
pull_number: pr.number,
|
||||||
|
reviewers: ['troglobit', 'wkz', 'mattiaswal']
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
name: User Guide Generator
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- doc
|
||||||
|
- main
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
paths:
|
||||||
|
- 'doc/**'
|
||||||
|
- 'mkdocs.yml'
|
||||||
|
- '.github/workflows/docs.yml'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: "docs-${{ github.ref }}"
|
||||||
|
cancel-in-progress: false
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docs:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
pipx install mkdocs
|
||||||
|
pipx inject mkdocs mkdocs-material
|
||||||
|
pipx inject mkdocs pymdown-extensions
|
||||||
|
pipx inject mkdocs mkdocs-callouts
|
||||||
|
pipx inject mkdocs mike
|
||||||
|
pipx inject mkdocs mkdocs-to-pdf
|
||||||
|
pipx inject mkdocs mkdocs-glightbox
|
||||||
|
# Workaround, if pipx inject fails to install symlink
|
||||||
|
ln -s "$(pipx environment -V PIPX_LOCAL_VENVS)/mkdocs/bin/mike" \
|
||||||
|
"$(pipx environment -V PIPX_BIN_DIR)/mike" || true
|
||||||
|
|
||||||
|
- name: Configure Git
|
||||||
|
run: |
|
||||||
|
git config --global user.name "github-actions[bot]"
|
||||||
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
|
|
||||||
|
- name: Deploy dev version
|
||||||
|
if: github.event_name == 'push' && (github.ref == 'refs/heads/doc' || github.ref == 'refs/heads/main')
|
||||||
|
run: |
|
||||||
|
mike deploy --push --update-aliases dev latest
|
||||||
|
mike set-default --push latest
|
||||||
|
|
||||||
|
- name: Deploy tagged version
|
||||||
|
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
||||||
|
run: |
|
||||||
|
TAG=${GITHUB_REF#refs/tags/v}
|
||||||
|
# Extract YEAR.MONTH from tag (e.g., v25.06.0-beta1 -> 25.06)
|
||||||
|
VERSION=$(echo $TAG | sed -E 's/^([0-9]+\.[0-9]+)(\.[0-9]+)?(-.*)?$/\1/')
|
||||||
|
echo "Deploying tag $TAG as docs version $VERSION"
|
||||||
|
mike deploy --push --update-aliases $VERSION latest
|
||||||
|
mike set-default --push latest
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
name: Generic X86 GitHub Build
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
if: github.repository != 'kernelkit/infix'
|
||||||
|
name: Infix x86_64
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Free Disk Space
|
||||||
|
uses: jlumbroso/free-disk-space@main
|
||||||
|
with:
|
||||||
|
tool-cache: true
|
||||||
|
android: true
|
||||||
|
dotnet: true
|
||||||
|
haskell: true
|
||||||
|
large-packages: true
|
||||||
|
docker-images: true
|
||||||
|
swap-storage: false
|
||||||
|
|
||||||
|
- name: Install build dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y \
|
||||||
|
bc binutils build-essential bzip2 cpio \
|
||||||
|
diffutils file findutils git gzip \
|
||||||
|
libncurses-dev libssl-dev perl patch \
|
||||||
|
python3 rsync sed tar unzip wget \
|
||||||
|
autopoint bison flex autoconf automake \
|
||||||
|
mtools
|
||||||
|
|
||||||
|
- name: Checkout infix repo
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: ${{ github.repository }}
|
||||||
|
ref: ${{ github.ref }}
|
||||||
|
fetch-depth: 0
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Set Build Variables
|
||||||
|
id: vars
|
||||||
|
run: |
|
||||||
|
echo "INFIX_BUILD_ID=${{ github.run_id }}" >> $GITHUB_OUTPUT
|
||||||
|
echo "dir=Infix-x86_64" >> $GITHUB_OUTPUT
|
||||||
|
echo "tgz=Infix-x86_64.tar.gz" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Configure x86_64_minimal
|
||||||
|
run: |
|
||||||
|
make x86_64_minimal_defconfig
|
||||||
|
|
||||||
|
- name: Unit Test x86_64
|
||||||
|
run: |
|
||||||
|
make test-unit
|
||||||
|
|
||||||
|
- name: Build x86_64_minimal
|
||||||
|
run: |
|
||||||
|
make
|
||||||
|
|
||||||
|
- name: Check SBOM
|
||||||
|
run: |
|
||||||
|
make legal-info
|
||||||
|
|
||||||
|
- name: Report Build Size
|
||||||
|
run: |
|
||||||
|
du -sh .
|
||||||
|
du -sh output
|
||||||
|
du -sh dl || true
|
||||||
|
ls -l output/images/
|
||||||
|
|
||||||
|
- name: Prepare Artifact
|
||||||
|
run: |
|
||||||
|
cd output/
|
||||||
|
mv images Infix-x86_64
|
||||||
|
ln -s Infix-x86_64 images
|
||||||
|
tar cfz Infix-x86_64.tar.gz Infix-x86_64
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
path: output/Infix-x86_64.tar.gz
|
||||||
|
name: artifact-x86_64
|
||||||
|
|
||||||
@@ -25,6 +25,7 @@ jobs:
|
|||||||
- uses: ncipollo/release-action@v1
|
- uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
allowUpdates: true
|
allowUpdates: true
|
||||||
|
replacesArtifacts: true
|
||||||
omitName: true
|
omitName: true
|
||||||
omitBody: true
|
omitBody: true
|
||||||
omitBodyDuringUpdate: true
|
omitBodyDuringUpdate: true
|
||||||
|
|||||||
@@ -18,96 +18,46 @@ on:
|
|||||||
type: string
|
type: string
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
set-version:
|
||||||
if: github.repository == 'kernelkit/infix' && startsWith(github.ref, 'refs/tags/')
|
if: github.repository == 'kernelkit/infix' && startsWith(github.ref, 'refs/tags/')
|
||||||
name: Build Infix ${{ github.ref_name }} [${{ matrix.target }}]
|
runs-on: ubuntu-latest
|
||||||
runs-on: [ self-hosted, release ]
|
outputs:
|
||||||
strategy:
|
version: ${{ steps.set-ver.outputs.version }}
|
||||||
matrix:
|
|
||||||
target: [aarch64, x86_64]
|
|
||||||
fail-fast: false
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- id: set-ver
|
||||||
with:
|
|
||||||
clean: true
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: Set Release Variables
|
|
||||||
id: vars
|
|
||||||
run: |
|
run: |
|
||||||
if [ -n "${{ inputs.version }}" ]; then
|
if [ -n "${{ inputs.version }}" ]; then
|
||||||
ver=${{ inputs.version }}
|
ver=${{ inputs.version }}
|
||||||
else
|
else
|
||||||
ver=${GITHUB_REF#refs/tags/}
|
ver=${GITHUB_REF#refs/tags/}
|
||||||
fi
|
fi
|
||||||
echo "ver=${ver}" >> $GITHUB_OUTPUT
|
echo "version=${ver}" >> $GITHUB_OUTPUT
|
||||||
fver=${ver#v}
|
|
||||||
target=${{ matrix.target }}-${fver}
|
|
||||||
echo "dir=infix-$target" >> $GITHUB_OUTPUT
|
|
||||||
echo "tgz=infix-$target.tar.gz" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Restore Cache of dl/
|
build:
|
||||||
uses: actions/cache@v4
|
needs: set-version
|
||||||
with:
|
uses: ./.github/workflows/build-release.yml
|
||||||
path: dl/
|
with:
|
||||||
key: dl-${{ hashFiles('.git/modules/buildroot/HEAD', 'configs/*', 'package/*/*.hash') }}
|
version: ${{ needs.set-version.outputs.version }}
|
||||||
restore-keys: |
|
use_cache: true
|
||||||
dl-
|
|
||||||
|
|
||||||
- name: Restore Cache of .ccache/
|
|
||||||
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:
|
|
||||||
INFIX_RELEASE: ${{ steps.vars.outputs.ver }}
|
|
||||||
run: |
|
|
||||||
target=${{ matrix.target }}_defconfig
|
|
||||||
echo "Building $target ..."
|
|
||||||
make $target
|
|
||||||
make
|
|
||||||
|
|
||||||
- name: Generate SBOM from Build
|
|
||||||
run: |
|
|
||||||
make legal-info
|
|
||||||
|
|
||||||
- name: Build test specification
|
|
||||||
run: |
|
|
||||||
make test-spec
|
|
||||||
|
|
||||||
- name: Prepare Artifacts
|
|
||||||
run: |
|
|
||||||
cd output/
|
|
||||||
mv images ${{ steps.vars.outputs.dir }}
|
|
||||||
ln -s ${{ steps.vars.outputs.dir }} images
|
|
||||||
tar cfz ${{ steps.vars.outputs.tgz }} ${{ steps.vars.outputs.dir }}
|
|
||||||
|
|
||||||
mv legal-info legal-info-${{ matrix.target }}-${{ steps.vars.outputs.ver }}
|
|
||||||
tar cfz legal-info-${{ matrix.target }}-${{ steps.vars.outputs.ver }}.tar.gz legal-info-${{ matrix.target }}-${{ steps.vars.outputs.ver }}
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: artifact-${{ matrix.target }}
|
|
||||||
path: output/*.tar.gz
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: artifact-disk-image-${{ matrix.target }}
|
|
||||||
path: output/images/*.qcow2
|
|
||||||
|
|
||||||
release:
|
release:
|
||||||
name: Release Infix ${{ github.ref_name }}
|
name: Release Infix ${{ github.ref_name }}
|
||||||
needs: build
|
needs: build
|
||||||
runs-on: [ self-hosted, release ]
|
runs-on: [self-hosted, release]
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
discussions: write
|
discussions: write
|
||||||
steps:
|
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
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: 'true'
|
submodules: 'true'
|
||||||
@@ -156,6 +106,9 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
awk '/^-----*$/{if (x == 1) exit; x=1;next}x' doc/ChangeLog.md \
|
awk '/^-----*$/{if (x == 1) exit; x=1;next}x' doc/ChangeLog.md \
|
||||||
|head -n -1 > release.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
|
cat release.md
|
||||||
|
|
||||||
- uses: ncipollo/release-action@v1
|
- uses: ncipollo/release-action@v1
|
||||||
|
|||||||
+27
-27
@@ -17,10 +17,6 @@ on:
|
|||||||
name:
|
name:
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
flavor:
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ''
|
|
||||||
infix_repo:
|
infix_repo:
|
||||||
required: false
|
required: false
|
||||||
type: string
|
type: string
|
||||||
@@ -35,16 +31,26 @@ on:
|
|||||||
default: 'test'
|
default: 'test'
|
||||||
|
|
||||||
env:
|
env:
|
||||||
FLV: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.flavor || inputs.flavor }}
|
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_REPO: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.infix_repo || inputs.infix_repo }}
|
||||||
NINEPM_CONF: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.ninepm-conf || inputs.ninepm-conf }}
|
NINEPM_CONF: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.ninepm-conf || inputs.ninepm-conf }}
|
||||||
TEST_PATH: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.test-path || inputs.test-path }}
|
TEST_PATH: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.test-path || inputs.test-path }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
name: Regression Test ${{ inputs.name }} ${{ inputs.target }}
|
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 ]
|
runs-on: [self-hosted, regression]
|
||||||
steps:
|
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
|
- name: Checkout infix repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
@@ -62,20 +68,18 @@ jobs:
|
|||||||
>>$GITHUB_ENV
|
>>$GITHUB_ENV
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "flv=$FLV" >> $GITHUB_OUTPUT
|
- name: Configure ${{ env.TARGET }}
|
||||||
|
|
||||||
- name: Configure ${{ inputs.target }}${{ steps.vars.outputs.flv }}
|
|
||||||
run: |
|
run: |
|
||||||
make ${{ inputs.target }}${{ steps.vars.outputs.flv }}_defconfig
|
make ${{ env.TARGET }}_defconfig
|
||||||
|
|
||||||
- uses: actions/download-artifact@v4
|
- uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
pattern: "artifact-*"
|
pattern: "artifact-*"
|
||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
|
|
||||||
- name: Restore x86-64${{ steps.vars.outputs.flv }} output/
|
- name: Restore ${{ env.TARGET }} output/
|
||||||
run: |
|
run: |
|
||||||
target=${{ inputs.target }}
|
target=${{ env.TARGET }}
|
||||||
name=${{ inputs.name }}
|
name=${{ inputs.name }}
|
||||||
|
|
||||||
ls -l
|
ls -l
|
||||||
@@ -85,7 +89,7 @@ jobs:
|
|||||||
tar xf ${name}-${target}.tar.gz
|
tar xf ${name}-${target}.tar.gz
|
||||||
ln -s ${name}-${target} images
|
ln -s ${name}-${target} images
|
||||||
|
|
||||||
- name: Regression Test x86_64${{ steps.vars.outputs.flv }}
|
- name: Regression Test ${{ env.TARGET }}
|
||||||
run: |
|
run: |
|
||||||
if [ -n "$NINEPM_CONF" ]; then
|
if [ -n "$NINEPM_CONF" ]; then
|
||||||
export NINEPM_PROJ_CONFIG="${GITHUB_WORKSPACE}/$NINEPM_CONF"
|
export NINEPM_PROJ_CONFIG="${GITHUB_WORKSPACE}/$NINEPM_CONF"
|
||||||
@@ -93,24 +97,20 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
make test
|
make test
|
||||||
|
|
||||||
- name: Publish Test Result for x86_64${{ steps.vars.outputs.flv }}
|
- name: Publish Test Result for ${{ env.TARGET }}
|
||||||
# Ensure this runs even if Regression Test fails
|
|
||||||
if: always()
|
|
||||||
run: cat $TEST_PATH/.log/last/result-gh.md >> $GITHUB_STEP_SUMMARY
|
|
||||||
|
|
||||||
- name: Generate Test Report for x86_64${{ steps.vars.outputs.flv }}
|
|
||||||
# Ensure this runs even if Regression Test fails
|
# Ensure this runs even if Regression Test fails
|
||||||
if: always()
|
if: always()
|
||||||
run: |
|
run: |
|
||||||
asciidoctor-pdf \
|
cat $TEST_PATH/.log/last/result-gh.md >> $GITHUB_STEP_SUMMARY
|
||||||
--theme $TEST_PATH/9pm/report/theme.yml \
|
|
||||||
-a pdf-fontsdir=$TEST_PATH/9pm/report/fonts \
|
- name: Generate Test Report for ${{ env.TARGET }}
|
||||||
$TEST_PATH/.log/last/report.adoc \
|
# Ensure this runs even if Regression Test fails
|
||||||
-o $TEST_PATH/.log/last/report.pdf
|
if: always()
|
||||||
|
run: |
|
||||||
|
make test-dir="$(pwd)/$TEST_PATH" test-report
|
||||||
|
|
||||||
- name: Upload Test Report as Artifact
|
- name: Upload Test Report as Artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: test-report
|
name: test-report
|
||||||
path: ${{ env.TEST_PATH }}/.log/last/report.pdf
|
path: output/images/test-report.pdf
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
name: Self Trigger
|
name: Kernelkit Trigger
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
@@ -6,32 +6,70 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
- ci-workflow-redesign
|
- ci-work
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ci-${{ github.event.pull_request.number || github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
# Gate all builds through this check to prevent wasted runs. Only run on
|
||||||
|
# 'labeled' events when the label is actually 'ci:main'. Concurrency control
|
||||||
|
# above handles canceling the 'opened' event when 'labeled' arrives quickly
|
||||||
|
# after (e.g., when creating a PR with ci:main already attached). See #1154.
|
||||||
|
check-trigger:
|
||||||
|
if: |
|
||||||
|
startsWith(github.repository, 'kernelkit/') &&
|
||||||
|
(github.event_name != 'pull_request' ||
|
||||||
|
github.event.action != 'labeled' ||
|
||||||
|
github.event.label.name == 'ci:main')
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
x86_64_target: ${{ steps.set-targets.outputs.x86_64_target }}
|
||||||
|
aarch64_target: ${{ steps.set-targets.outputs.aarch64_target }}
|
||||||
|
steps:
|
||||||
|
- run: |
|
||||||
|
echo "Triggering build, logging meta data ..."
|
||||||
|
echo "Event : ${{ github.event_name }}"
|
||||||
|
echo "Action : ${{ github.event.action }}"
|
||||||
|
echo "Ref : ${{ github.ref }}"
|
||||||
|
echo "PR : ${{ github.event.pull_request.number }}"
|
||||||
|
echo "Label : ${{ github.event.label.name }}"
|
||||||
|
- id: set-targets
|
||||||
|
run: |
|
||||||
|
if [[ "${{ github.event_name }}" == "pull_request" ]] && \
|
||||||
|
! echo '${{ toJSON(github.event.pull_request.labels.*.name) }}' \
|
||||||
|
| grep -q "ci:main"; then
|
||||||
|
echo "x86_64_target=x86_64_minimal" >> $GITHUB_OUTPUT
|
||||||
|
echo "aarch64_target=aarch64_minimal" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "x86_64_target=x86_64" >> $GITHUB_OUTPUT
|
||||||
|
echo "aarch64_target=aarch64" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
build-x86_64:
|
build-x86_64:
|
||||||
|
needs: check-trigger
|
||||||
uses: ./.github/workflows/build.yml
|
uses: ./.github/workflows/build.yml
|
||||||
with:
|
with:
|
||||||
target: "x86_64"
|
|
||||||
name: "infix"
|
name: "infix"
|
||||||
flavor: "_minimal"
|
target: ${{ needs.check-trigger.outputs.x86_64_target }}
|
||||||
|
|
||||||
build-aarch64:
|
build-aarch64:
|
||||||
|
needs: check-trigger
|
||||||
uses: ./.github/workflows/build.yml
|
uses: ./.github/workflows/build.yml
|
||||||
with:
|
with:
|
||||||
target: "aarch64"
|
|
||||||
name: "infix"
|
name: "infix"
|
||||||
flavor: "_minimal"
|
target: ${{ needs.check-trigger.outputs.aarch64_target }}
|
||||||
|
|
||||||
test-run-x86_64:
|
test-run-x86_64:
|
||||||
needs: build-x86_64
|
needs: [check-trigger, build-x86_64]
|
||||||
uses: ./.github/workflows/test.yml
|
uses: ./.github/workflows/test.yml
|
||||||
with:
|
with:
|
||||||
target: "x86_64"
|
target: ${{ needs.check-trigger.outputs.x86_64_target }}
|
||||||
name: "infix"
|
name: "infix"
|
||||||
|
|
||||||
test-publish-x86_64:
|
test-publish-x86_64:
|
||||||
|
if: ${{ github.repository_owner == 'kernelkit' && github.ref_name == 'main' }}
|
||||||
needs: test-run-x86_64
|
needs: test-run-x86_64
|
||||||
uses: ./.github/workflows/publish.yml
|
uses: ./.github/workflows/publish.yml
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
# Weekly release build to catch flaky tests and verify clean builds.
|
||||||
|
# Runs without caches (ccache) to ensure reproducibility. See issue #1003.
|
||||||
|
name: Weekly Build
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '5 0 * * 6' # Saturday at 00:05 UTC, same as Coverity
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
if: github.repository == 'kernelkit/infix'
|
||||||
|
uses: ./.github/workflows/build-release.yml
|
||||||
|
with:
|
||||||
|
version: "latest"
|
||||||
|
use_cache: false
|
||||||
|
|
||||||
|
publish:
|
||||||
|
name: Publish Weekly Build
|
||||||
|
needs: build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
pattern: "artifact-*"
|
||||||
|
merge-multiple: true
|
||||||
|
|
||||||
|
- name: Create checksums
|
||||||
|
run: |
|
||||||
|
for file in *.tar.gz; do
|
||||||
|
sha256sum $file > $file.sha256
|
||||||
|
done
|
||||||
|
if ls *.qcow2 &>/dev/null; then
|
||||||
|
for file in *.qcow2; do
|
||||||
|
sha256sum "$file" > "$file.sha256"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
- uses: ncipollo/release-action@v1
|
||||||
|
with:
|
||||||
|
tag: latest
|
||||||
|
name: "Latest Weekly Build"
|
||||||
|
prerelease: true
|
||||||
|
makeLatest: false
|
||||||
|
allowUpdates: true
|
||||||
|
removeArtifacts: true
|
||||||
|
body: |
|
||||||
|
Automated weekly build from `${{ github.sha }}`.
|
||||||
|
|
||||||
|
This build runs without caches to catch potential flaky tests and build issues.
|
||||||
|
Not intended for production use - use official releases instead.
|
||||||
|
|
||||||
|
**Commit:** ${{ github.sha }}
|
||||||
|
**Built:** ${{ github.run_id }}
|
||||||
|
artifacts: "*.tar.gz*,*.qcow2*"
|
||||||
|
|
||||||
|
- name: Summary
|
||||||
|
run: |
|
||||||
|
cat <<EOF >> $GITHUB_STEP_SUMMARY
|
||||||
|
# Weekly Build Published! :package:
|
||||||
|
|
||||||
|
Latest artifacts uploaded to:
|
||||||
|
<https://github.com/kernelkit/infix/releases/tag/latest>
|
||||||
|
|
||||||
|
Built from commit: \`${{ github.sha }}\`
|
||||||
|
EOF
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
source "$BR2_EXTERNAL_INFIX_PATH/board/Config.in"
|
||||||
|
|
||||||
menu "Branding"
|
menu "Branding"
|
||||||
|
|
||||||
config INFIX_VENDOR
|
config INFIX_VENDOR
|
||||||
|
|||||||
@@ -1,58 +1,70 @@
|
|||||||
[![License Badge][]][License] [![GitHub Status][]][GitHub] [![Coverity Status][]][Coverity Scan] [![Discord][discord-badge]][discord-url]
|
[![License Badge][]][License] [![Release Badge][]][Release] [![GitHub Status][]][GitHub] [![Coverity Status][]][Coverity Scan] [![Discord][discord-badge]][discord-url]
|
||||||
|
|
||||||
<img align="right" src="doc/logo.png" alt="Infix - Linux <3 NETCONF" width=480 border=10>
|
<img align="right" src="doc/logo.png" alt="Infix — Immutable.Friendly.Secure" width=480 padding=10>
|
||||||
|
|
||||||
Infix is a free, Linux-based, immutable operating system built around
|
Turn any ARM or x86 device into a powerful, manageable network appliance
|
||||||
[Buildroot][1] and [sysrepo][2]. A powerful mix that ease porting to
|
in minutes. From $35 Raspberry Pi boards to enterprise switches — deploy
|
||||||
different platforms, simplify long-term maintenance, and provide
|
routers, IoT gateways, edge devices, or custom network solutions that
|
||||||
made-easy management using NETCONF, RESTCONF[^2], or the built-in
|
just work.
|
||||||
command line interface (CLI) from a console or SSH login.
|
|
||||||
|
|
||||||
> Click the **▶ Example CLI Session** foldout below for an example, or
|
## Our Values
|
||||||
> head on over to the [Infix Documentation](doc/README.md) for more
|
|
||||||
> information on how to set up the system.
|
|
||||||
|
|
||||||
Although primarily focused on switches and routers, the core values
|
**🔒 Immutable**
|
||||||
may be appealing for other use-cases as well:
|
Your system never breaks. Read-only filesystem with atomic upgrades
|
||||||
|
means no configuration drift, no corrupted updates, and instant rollback
|
||||||
|
if something goes wrong. Deploy once, trust forever.
|
||||||
|
|
||||||
- Runs from a squashfs image on a read-only partition
|
**🤝 Friendly**
|
||||||
- Single configuration file on a separate partition
|
Actually easy to use. Auto-generated CLI from standard YANG models comes
|
||||||
- Built around YANG with standard IETF models
|
with built-in help for every command — just hit `?` or TAB for
|
||||||
- Linux switchdev provides open switch APIs
|
context-aware assistance. Familiar NETCONF/RESTCONF APIs and
|
||||||
- Atomic upgrades to secondary partition
|
[comprehensive documentation][4] mean you're never stuck. Whether
|
||||||
- Highly security focused
|
you're learning networking or managing enterprise infrastructure.
|
||||||
|
|
||||||
An immutable[^1] operating system enhances security and inherently makes
|
**🛡️ Secure**
|
||||||
it maintenance-free. Configuration and data, e.g, containers, is stored
|
Built with security as a foundation, not an afterthought. Minimal
|
||||||
on separate partitions to ensure complete separation from system files
|
attack surface, separation between system and data, and container
|
||||||
and allow for seamless backup, restore, and provisioning.
|
isolation. Sleep better knowing your infrastructure is protected.
|
||||||
|
|
||||||
In itself, Infix is perfectly suited for dedicated networking tasks,
|
## Why Choose Infix
|
||||||
such as routing, switching, and monitoring. This is how it started, as
|
|
||||||
a network focused operating system. Now, with native support for Docker
|
|
||||||
containers, it provides a versatile platform that can easily be adapted
|
|
||||||
to any customer need. Be it legacy applications, network protocols,
|
|
||||||
process monitoring, or edge data analysis, it can run close to end
|
|
||||||
equipment. Either directly connected on dedicated Ethernet ports or
|
|
||||||
indirectly using virtual network cables to exist on the same LAN as
|
|
||||||
other connected equipment.
|
|
||||||
|
|
||||||
The simple design of Infix provides complete control over both system
|
**Hardware Flexibility**: Start with a $35 Raspberry Pi, scale to
|
||||||
and data, minimal cognitive burden, and makes it incredibly easy to get
|
enterprise switching hardware. Same OS, same tools, same reliability.
|
||||||
started.
|
|
||||||
|
|
||||||
<details><summary><b>Example CLI Session</b></summary>
|
**Standards-Based**: Built around YANG models and IETF standards. Learn
|
||||||
|
once, use everywhere - no vendor lock-in.
|
||||||
|
|
||||||
The CLI configure context is automatically generated from the loaded
|
**Container Ready**: Run your applications alongside networking
|
||||||
YANG models and their corresponding [sysrepo][2] plugins. The following
|
functions. GPIO access, dedicated Ethernet ports, custom protocols —
|
||||||
is brief example of how to set the IP address of an interface:
|
your device, your rules.
|
||||||
|
|
||||||
```
|
## Use Cases
|
||||||
|
|
||||||
|
1. **Home Labs & Hobbyists**:
|
||||||
|
Transform a Raspberry Pi into a full-featured router with WiFi
|
||||||
|
1. **IoT & Edge Computing**:
|
||||||
|
Bridge devices to the cloud with reliable, updatable gateways
|
||||||
|
1. **Small Business Networks**:
|
||||||
|
Enterprise-grade features without the complexity or cost
|
||||||
|
1. **Developers & Makers**:
|
||||||
|
Test networking concepts, prototype IoT solutions, or build custom
|
||||||
|
appliances
|
||||||
|
1. **Network Professionals**:
|
||||||
|
Consistent tooling from development to production deployment.
|
||||||
|
How about a digital twin using raw Qemu or [GNS3](https://gns3.com/infix)!
|
||||||
|
|
||||||
|
## See It In Action
|
||||||
|
|
||||||
|
Configure an interface in seconds - the CLI guides you with built-in help:
|
||||||
|
|
||||||
|
<details><summary><b>Click Here for an example CLI Session</b></summary>
|
||||||
|
|
||||||
|
```bash
|
||||||
admin@infix-12-34-56:/> configure
|
admin@infix-12-34-56:/> configure
|
||||||
admin@infix-12-34-56:/config/> edit interface eth0
|
admin@infix-12-34-56:/config/> edit interface eth0
|
||||||
admin@infix-12-34-56:/config/interface/eth0/> set ipv4 <TAB>
|
admin@infix-12-34-56:/config/interface/eth0/> set ipv4 <TAB>
|
||||||
address autoconf bind-ni-name enabled
|
address autoconf bind-ni-name enabled
|
||||||
forwarding mtu neighbor
|
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/> set ipv4 address 192.168.2.200 prefix-length 24
|
||||||
admin@infix-12-34-56:/config/interface/eth0/> show
|
admin@infix-12-34-56:/config/interface/eth0/> show
|
||||||
type ethernet;
|
type ethernet;
|
||||||
@@ -61,7 +73,6 @@ ipv4 {
|
|||||||
prefix-length 24;
|
prefix-length 24;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ipv6
|
|
||||||
admin@infix-12-34-56:/config/interface/eth0/> diff
|
admin@infix-12-34-56:/config/interface/eth0/> diff
|
||||||
interfaces {
|
interfaces {
|
||||||
interface eth0 {
|
interface eth0 {
|
||||||
@@ -84,57 +95,89 @@ lo ethernet UP 00:00:00:00:00:00
|
|||||||
admin@infix-12-34-56:/> copy running-config startup-config
|
admin@infix-12-34-56:/> copy running-config startup-config
|
||||||
```
|
```
|
||||||
|
|
||||||
[Click here][3] for more details.
|
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.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Infix can run on many different types of architectures and boards, much
|
> [Full CLI documentation →][3]
|
||||||
thanks to Linux and Buildroot. Currently the focus is on 64-bit ARM
|
|
||||||
devices, optionally with switching fabric supported by Linux switchdev.
|
|
||||||
The [following boards](board/aarch64/README.md) are fully supported:
|
|
||||||
|
|
||||||
- Marvell CN9130 CRB
|
## Get Started
|
||||||
- Marvell EspressoBIN
|
|
||||||
- Microchip SparX-5i PCB135 (eMMC)
|
|
||||||
- Raspberry Pi 4B
|
|
||||||
- NanoPi R2S
|
|
||||||
|
|
||||||
Additionally, StarFive VisionFive2, a RISC-V based two-port router, and
|
Get [pre-built images][5] for your hardware. Use the CLI, web
|
||||||
an x86_64 build is also available. The latter is primarily intended for
|
interface, or standard NETCONF/RESTCONF tools, e.g., `curl`. Add
|
||||||
development and testing, but can also be used for evaluation and demo
|
containers for any custom functionality you need.
|
||||||
purposes. For more information, see: [Infix in Virtual
|
|
||||||
Environments](doc/virtual.md).
|
|
||||||
|
|
||||||
> See the [GitHub Releases](https://github.com/kernelkit/infix/releases)
|
### Supported Platforms
|
||||||
> page for our pre-built images. The *[Latest Build][]* has bleeding
|
|
||||||
> edge images, if possible we recommend using a versioned release.
|
|
||||||
>
|
|
||||||
> For *customer specific builds* of Infix, see your product repository.
|
|
||||||
|
|
||||||
|
- **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
|
||||||
|
- **NXP i.MX8MP EVK** - Highly capable ARM64 SoC
|
||||||
|
- **StarFive VisionFive2** - RISC-V architecture support
|
||||||
|
|
||||||
----
|
*Why start with Raspberry Pi?* It's affordable, widely available, has
|
||||||
|
built-in WiFi + Ethernet, and runs the exact same Infix OS you'd deploy
|
||||||
|
in production. Perfect for learning, prototyping, or even small-scale
|
||||||
|
deployments.
|
||||||
|
|
||||||
|
> 📖 **[Complete documentation][4]** • 💬 **[Join our Discord][discord-url]**
|
||||||
|
|
||||||
|
## Technical Details
|
||||||
|
|
||||||
|
<a href="https://bitsign.se">
|
||||||
|
<picture>
|
||||||
|
<source media="(prefers-color-scheme: dark)" srcset="https://bitsign.se/assets/badges/bitsign-badge-dark-mode.png">
|
||||||
|
<source media="(prefers-color-scheme: light)" srcset="https://bitsign.se/assets/badges/bitsign-badge-light-mode.png">
|
||||||
|
<img alt="bitSign - Code Signing" src="https://bitsign.se/assets/badges/bitsign-badge-light-mode.png" align="right" width=150 padding=10>
|
||||||
|
</picture>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
Built on proven open-source foundations: [Linux][0], [Buildroot][1], and
|
||||||
|
[sysrepo][2] — for reliability you can trust:
|
||||||
|
|
||||||
|
- **Immutable OS**: Read-only filesystem, atomic updates, instant rollback
|
||||||
|
- **YANG Configuration**: Industry-standard models with auto-generated tooling
|
||||||
|
- **Hardware Acceleration**: Linux switchdev support for wire-speed packet processing
|
||||||
|
- **Container Integration**: Docker support with flexible network and hardware access
|
||||||
|
- **Memory Efficient**: Runs comfortably on devices with as little as 256 MB RAM
|
||||||
|
- **Code Signing**: Releases are cryptographically signed for integrity verification
|
||||||
|
|
||||||
|
Perfect for everything from resource-constrained edge devices to
|
||||||
|
high-throughput network appliances.
|
||||||
|
|
||||||
|
With the entire system modeled in YANG, scalability is no longer an
|
||||||
|
issue, be it in development, testing, or end users deploying and
|
||||||
|
monitoring their devices. All knobs and dials are accessible from the
|
||||||
|
CLI (console/SSH), or remotely using the native NETCONF or RESTCONF
|
||||||
|
APIs.
|
||||||
|
|
||||||
|
> Check the *[Latest Build][]* for bleeding-edge features.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<a href="https://github.com/wires-se"><img src="https://raw.githubusercontent.com/wires-se/.github/main/profile/logo.png" width=300></a>
|
<a href="https://github.com/wires-se"><img src="https://raw.githubusercontent.com/wires-se/.github/main/profile/play.svg" width=300></a>
|
||||||
<br />Infix development is sponsored by <a href="https://wires.se">Wires<a>
|
<br />Infix development is sponsored by <a href="https://wires.se">Wires</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
----
|

|
||||||
|
|
||||||
[^1]: An immutable operating system is one with read-only file systems,
|
[0]: https://www.kernel.org
|
||||||
atomic updates, rollbacks, declarative configuration, and workload
|
[1]: https://buildroot.org/ "Buildroot Homepage"
|
||||||
isolation. All to improve reliability, scalability, and security.
|
[2]: https://www.sysrepo.org/ "Sysrepo Homepage"
|
||||||
For more information, see <https://ceur-ws.org/Vol-3386/paper9.pdf>
|
[3]: https://kernelkit.org/infix/latest/cli/introduction/
|
||||||
and <https://www.zdnet.com/article/what-is-immutable-linux-heres-why-youd-run-an-immutable-linux-distro/>.
|
[4]: https://kernelkit.org/infix/
|
||||||
|
[5]: https://github.com/kernelkit/infix/releases
|
||||||
[^2]: Partial RESTCONF support, features like HTTP PATCH, OPTIONS, HEAD,
|
[Latest Build]: https://github.com/kernelkit/infix/releases/tag/latest "Latest build"
|
||||||
and copying between datastores are still missing.
|
|
||||||
|
|
||||||
[1]: https://buildroot.org/
|
|
||||||
[2]: https://www.sysrepo.org/
|
|
||||||
[3]: doc/cli/introduction.md
|
|
||||||
[Latest Build]: https://github.com/kernelkit/infix/releases/tag/latest
|
|
||||||
[License]: https://en.wikipedia.org/wiki/GPL_license
|
[License]: https://en.wikipedia.org/wiki/GPL_license
|
||||||
[License Badge]: https://img.shields.io/badge/License-GPL%20v2-blue.svg
|
[License Badge]: https://img.shields.io/badge/License-GPL%20v2-blue.svg
|
||||||
|
[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]: https://github.com/kernelkit/infix/actions/workflows/build.yml/
|
||||||
[GitHub Status]: https://github.com/kernelkit/infix/actions/workflows/build.yml/badge.svg
|
[GitHub Status]: https://github.com/kernelkit/infix/actions/workflows/build.yml/badge.svg
|
||||||
[Coverity Scan]: https://scan.coverity.com/projects/29393
|
[Coverity Scan]: https://scan.coverity.com/projects/29393
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
menu "Board Support"
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
endmenu
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
if BR2_aarch64
|
||||||
|
|
||||||
|
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/alder-alder/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/bananapi-bpi-r3/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"
|
||||||
|
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/marvell-espressobin/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/microchip-sparx5-pcb135/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/raspberrypi-rpi64/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_INFIX_PATH/board/aarch64/styx-dcp-sc-28p/Config.in"
|
||||||
|
|
||||||
|
endif
|
||||||
@@ -4,6 +4,8 @@ aarch64
|
|||||||
Board Specific Documentation
|
Board Specific Documentation
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
- [Banana Pi R3](banana-pi-r3/)
|
||||||
- [Marvell CN9130-CRB](cn9130-crb/)
|
- [Marvell CN9130-CRB](cn9130-crb/)
|
||||||
- [Microchip SparX-5i PCB135 (eMMC)](sparx5-pcb135/)
|
- [Microchip SparX-5i PCB135 (eMMC)](sparx5-pcb135/)
|
||||||
- [NanoPi R2S](r2s/)
|
- [NanoPi R2S](r2s/)
|
||||||
|
- [Raspberry Pi 64-bit](raspberry-pi64/)
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
config BR2_PACKAGE_BANANAPI_BPI_R3
|
||||||
|
bool "Banana Pi R3"
|
||||||
|
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_MT7986
|
||||||
|
select SDCARD_AUX
|
||||||
|
help
|
||||||
|
Build Banana PI R3 support
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
Copyright (c) 2025 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.
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# Banana Pi R3
|
||||||
|
|
||||||
|
## Support level
|
||||||
|
Full support for all Infix enabled features including switched ethernet ports, WiFi,
|
||||||
|
and SFP interfaces. The board includes comprehensive hardware support for
|
||||||
|
MediaTek MT7986 SoC features.
|
||||||
|
|
||||||
|
### Hardware features
|
||||||
|
The Banana Pi R3 is a high-performance networking board featuring:
|
||||||
|
- MediaTek MT7986 ARM Cortex-A53 quad-core processor
|
||||||
|
- 4x Gigabit LAN ports (lan1-lan4)
|
||||||
|
- 1x Gigabit WAN port
|
||||||
|
- 2x SFP ports (sfp1, sfp2) for fiber connectivity
|
||||||
|
- Dual WiFi interfaces (wifi0 for 2.4GHz, wifi1 for 5GHz)
|
||||||
|
- USB support
|
||||||
|
- SD card boot support
|
||||||
|
|
||||||
|
### Network configuration
|
||||||
|
The board comes preconfigured with:
|
||||||
|
- 4 switched LAN ports for internal networking
|
||||||
|
- Dedicated WAN port with DHCP client enabled
|
||||||
|
- SFP ports for high-speed fiber connections
|
||||||
|
- Dual WiFi interfaces for wireless connectivity
|
||||||
|
|
||||||
|
### Pre-built images
|
||||||
|
SD card image: [infix-bpi-r3-sdcard.img](https://github.com/kernelkit/infix/releases/download/latest-boot/infix-bpi-r3-sdcard.img)
|
||||||
|
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
define BANANAPI_BPI_R3_LINUX_CONFIG_FIXUPS
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_ARCH_MEDIATEK)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_MACH_MT7986)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_PINCTRL_MT7986)
|
||||||
|
$(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_ENABLE_OPT,CONFIG_MTK_UART)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_MTK_WATCHDOG)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_MEDIATEK_GE_PHY)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_REALTEK_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_MT7915E,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_ENABLE_OPT,CONFIG_MTK_HSDMA)
|
||||||
|
$(call KCONFIG_SET_OPT,CONFIG_MT7915E,m)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_MT798X_WMAC)
|
||||||
|
$(call KCONFIG_SET_OPT,CONFIG_MTK_SOC_THERMAL,m)
|
||||||
|
$(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_REGULATOR_GPIO,y)
|
||||||
|
$(call KCONFIG_SET_OPT,CONFIG_REGULATOR_MT6380,m)
|
||||||
|
$(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_CRYPTO_DEV_SAFEXCEL,m)
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(ix-board))
|
||||||
|
$(eval $(generic-package))
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
dtb-y += mediatek/mt7986a-bananapi-bpi-r3-sd.dtb
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
#include "mt7986a-bananapi-bpi-r3.dtsi"
|
||||||
|
#include "mt7986a-bananapi-bpi-r3-sd.dtsi"
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2021 MediaTek Inc.
|
||||||
|
* Author: Sam.Shih <sam.shih@mediatek.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
This is copied from linux where it is an overlay, unfortunatly it is not
|
||||||
|
possible to use dtbo in sysboot unless present in syslinux.conf
|
||||||
|
*/
|
||||||
|
&{/soc/mmc@11230000} {
|
||||||
|
bus-width = <4>;
|
||||||
|
max-frequency = <52000000>;
|
||||||
|
cap-sd-highspeed;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
#include <arm64/mediatek/mt7986a-bananapi-bpi-r3.dts>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
infix {
|
||||||
|
/* Default admin user password: 'admin' */
|
||||||
|
factory-password-hash = "$5$mI/zpOAqZYKLC2WU$i7iPzZiIjOjrBF3NyftS9CCq8dfYwHwrmUK097Jca9A";
|
||||||
|
usb-ports = <&ssusb>;
|
||||||
|
usb-port-names = "USB";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&cpu_thermal {
|
||||||
|
/delete-node/ trips;
|
||||||
|
/delete-node/ cooling-maps;
|
||||||
|
trips {
|
||||||
|
cpu_trip_active_cool: cpu-trip-active-cool {
|
||||||
|
temperature = <40000>; // 40°C
|
||||||
|
hysteresis = <2000>; // 2°C hysteresis
|
||||||
|
type = "active";
|
||||||
|
};
|
||||||
|
cpu_trip_active_low: cpu-trip-active-low {
|
||||||
|
temperature = <45000>; // 40°C
|
||||||
|
hysteresis = <2000>; // 2°C hysteresis
|
||||||
|
type = "active";
|
||||||
|
};
|
||||||
|
cpu_trip_active_med: cpu-trip-active-med {
|
||||||
|
temperature = <60000>; // 60°C
|
||||||
|
hysteresis = <2000>; // 2°C hysteresis
|
||||||
|
type = "active";
|
||||||
|
};
|
||||||
|
cpu_trip_hot: cpu-trip-hot {
|
||||||
|
temperature = <80000>; // 80°C
|
||||||
|
hysteresis = <2000>; // 2°C hysteresis
|
||||||
|
type = "hot";
|
||||||
|
};
|
||||||
|
cpu_trip_critical: cpu-trip-critical {
|
||||||
|
temperature = <90000>; // 90°C
|
||||||
|
hysteresis = <2000>; // 2°C hysteresis
|
||||||
|
type = "critical";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
cooling-maps {
|
||||||
|
map-cpu-40deg {
|
||||||
|
cooling-device = <&fan 0 0>;
|
||||||
|
trip = <&cpu_trip_active_cool>;
|
||||||
|
};
|
||||||
|
map-cpu-45deg {
|
||||||
|
cooling-device = <&fan 1 1>;
|
||||||
|
trip = <&cpu_trip_active_low>;
|
||||||
|
};
|
||||||
|
map-cpu-60deg {
|
||||||
|
cooling-device = <&fan 2 2>;
|
||||||
|
trip = <&cpu_trip_active_med>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
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-r3-sdcard.img {
|
||||||
|
hdimage {
|
||||||
|
partition-table-type = "gpt"
|
||||||
|
|
||||||
|
}
|
||||||
|
# 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 {
|
||||||
|
# partition-type = 0x83 # Linux filesystem
|
||||||
|
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"
|
||||||
|
}
|
||||||
|
}
|
||||||
+333
@@ -0,0 +1,333 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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": "lan4",
|
||||||
|
"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": "sfp1",
|
||||||
|
"type": "infix-if-type:ethernet",
|
||||||
|
"ietf-ip:ipv6": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sfp2",
|
||||||
|
"type": "infix-if-type:ethernet",
|
||||||
|
"ietf-ip:ipv6": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wan",
|
||||||
|
"type": "infix-if-type:ethernet",
|
||||||
|
"ietf-ip:ipv6": {},
|
||||||
|
"ietf-ip:ipv4": {
|
||||||
|
"infix-dhcp-client:dhcp": {
|
||||||
|
"option": [
|
||||||
|
{"id": "ntp-server"},
|
||||||
|
{"id": "broadcast"},
|
||||||
|
{"id": "domain"},
|
||||||
|
{"id": "hostname"},
|
||||||
|
{"id": "dns-server"},
|
||||||
|
{"id": "router"},
|
||||||
|
{"id": "netmask"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wifi0",
|
||||||
|
"type": "infix-if-type:wifi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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": {}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ietf-netconf-acm:nacm": {
|
||||||
|
"enable-nacm": true,
|
||||||
|
"groups": {
|
||||||
|
"group": [
|
||||||
|
{
|
||||||
|
"name": "admin",
|
||||||
|
"user-name": [
|
||||||
|
"admin"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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": "default-deny-all",
|
||||||
|
"group": [
|
||||||
|
"*"
|
||||||
|
],
|
||||||
|
"rule": [
|
||||||
|
{
|
||||||
|
"name": "deny-password-read",
|
||||||
|
"module-name": "ietf-system",
|
||||||
|
"path": "/ietf-system:system/authentication/user/password",
|
||||||
|
"access-operations": "*",
|
||||||
|
"action": "deny"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ietf-netconf-server:netconf-server": {
|
||||||
|
"listen": {
|
||||||
|
"endpoints": {
|
||||||
|
"endpoint": [
|
||||||
|
{
|
||||||
|
"name": "default-ssh",
|
||||||
|
"ssh": {
|
||||||
|
"tcp-server-parameters": {
|
||||||
|
"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",
|
||||||
|
"ingress": [
|
||||||
|
"lan"
|
||||||
|
],
|
||||||
|
"egress": [
|
||||||
|
"wan"
|
||||||
|
],
|
||||||
|
"masquerade": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"infix-meta:meta": {
|
||||||
|
"version": "1.6"
|
||||||
|
},
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
udevadm control --reload-rules
|
||||||
|
udevadm trigger --subsystem-match=net --action=add
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
ACTION=="add", SUBSYSTEM=="net", DEVPATH=="/devices/platform/soc/15100000.ethernet/net/eth1", NAME="sfp1"
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
CONFIG_AUTOBOOT=y
|
||||||
|
CONFIG_BOOTDELAY=2
|
||||||
|
# CONFIG_MMC_PCI is not set
|
||||||
|
CONFIG_ENV_IS_NOWHERE=y
|
||||||
|
# CONFIG_ENV_IS_IN_MMC is not set
|
||||||
|
CONFIG_USB=y
|
||||||
|
CONFIG_USB_XHCI_HCD=y
|
||||||
|
CONFIG_USB_XHCI_MTK=y
|
||||||
|
CONFIG_USB_MTU3=y
|
||||||
|
CONFIG_CMD_USB=y
|
||||||
|
CONFIG_PHY=y
|
||||||
|
CONFIG_PHY_MTK_TPHY=y
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
/ {
|
||||||
|
config {
|
||||||
|
env: environment {
|
||||||
|
/* After the MMC driver has enabled bus power,
|
||||||
|
* the controller seems to sometimes detect a
|
||||||
|
* card removal state , which causes it to
|
||||||
|
* disable power again. This hack re-enables the
|
||||||
|
* bus power in those cases.
|
||||||
|
*/
|
||||||
|
bootcmd = "run ixboot";
|
||||||
|
boot_targets = "mmc0";
|
||||||
|
ethprime = "eth0";
|
||||||
|
fdt_addr_r = "0x43f00000";
|
||||||
|
kernel_addr_r = "0x44000000";
|
||||||
|
scriptaddr = "0x48000000";
|
||||||
|
ramdisk_addr_r = "0x4A000000";
|
||||||
|
|
||||||
|
/* This is a development platform, keep
|
||||||
|
* developer mode statically enabled.
|
||||||
|
*/
|
||||||
|
ixbtn-devmode = "setenv dev_mode yes; echo Enabled";
|
||||||
|
ixbtn-factory = "echo \"No button available, use bootmenu\"";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#include <mt7986-env.dtsi>
|
||||||
|
|
||||||
|
&env {
|
||||||
|
fdtfile = "mediatek/mt7986a-bananapi-bpi-r3-sd.dtb";
|
||||||
|
};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
CONFIG_DEVICE_TREE_INCLUDES="infix-env.dtsi infix-key.dtsi mt7986-sd-env.dtsi"
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
config BR2_PACKAGE_FRIENDLYARM_NANOPI_R2S
|
||||||
|
bool "FriendlyElec NanoPi R2S"
|
||||||
|
depends on BR2_aarch64
|
||||||
|
select SDCARD_AUX
|
||||||
|
select BR2_PACKAGE_INPUT_EVENT_DAEMON
|
||||||
|
select BR2_PACKAGE_LINUX_FIRMWARE_RTL_815X
|
||||||
|
help
|
||||||
|
FriendlyElec NanoPi R2S is a compact router board based on
|
||||||
|
the Rockchip RK3328 SoC with dual Gigabit Ethernet ports.
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
Copyright (c) 2025 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.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
dtb-y += rockchip/rk3328-nanopi-r2s.dtb
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
|
/*
|
||||||
|
* Common Infix OS defaults
|
||||||
|
*/
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
infix {
|
||||||
|
/* Default admin user password: 'admin' */
|
||||||
|
factory-password-hash = "$5$mI/zpOAqZYKLC2WU$i7iPzZiIjOjrBF3NyftS9CCq8dfYwHwrmUK097Jca9A";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#include <arm64/rockchip/rk3328-nanopi-r2s.dts>
|
||||||
|
#include "infix.dtsi"
|
||||||
|
|
||||||
|
&rtl8153 {
|
||||||
|
/*
|
||||||
|
* Fix port number: device is on port 1, not port 2
|
||||||
|
*
|
||||||
|
* The kernel's usb_of_get_connect_type() function checks for child
|
||||||
|
* nodes with a 'reg' property matching the physical port number to
|
||||||
|
* determine if a USB port is "hard-wired" (internal) vs external.
|
||||||
|
* With authorized_default=2, only hard-wired ports are automatically
|
||||||
|
* authorized. The RTL8153 shows up as device 3-1 (hub 3, port 1), so
|
||||||
|
* reg must be <1> for the kernel to mark it as USB_PORT_CONNECT_TYPE_HARD_WIRED
|
||||||
|
* and authorize it automatically at boot.
|
||||||
|
*/
|
||||||
|
reg = <1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&{/chosen/infix} {
|
||||||
|
/* Expose only the external USB 2.0 port for user management */
|
||||||
|
usb-ports = <&usb_host0_ehci>;
|
||||||
|
usb-port-names = "USB";
|
||||||
|
};
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
define FRIENDLYARM_NANOPI_R2S_LINUX_CONFIG_FIXUPS
|
||||||
|
# Rockchip RK3328 SoC
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_ARCH_ROCKCHIP)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_ROCKCHIP_IOMMU)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_ROCKCHIP_PM_DOMAINS)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_ROCKCHIP_IODOMAIN)
|
||||||
|
|
||||||
|
# PHY drivers
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_PHY_ROCKCHIP_EMMC)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_PHY_ROCKCHIP_INNO_USB2)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_PHY_ROCKCHIP_TYPEC)
|
||||||
|
$(call KCONFIG_SET_OPT,CONFIG_PHY_ROCKCHIP_USB,m)
|
||||||
|
$(call KCONFIG_SET_OPT,CONFIG_PHY_ROCKCHIP_PCIE,m)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_ROCKCHIP_PHY)
|
||||||
|
|
||||||
|
# Clocks and Power Management
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_COMMON_CLK_ROCKCHIP)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_CLK_RK3328)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_COMMON_CLK_PWM)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_PWM_ROCKCHIP)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_REGULATOR_GPIO)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_REGULATOR_RK808)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_CHARGER_RK817)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_PINCTRL_RK805)
|
||||||
|
|
||||||
|
# I2C Controller
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_I2C_RK3X)
|
||||||
|
|
||||||
|
# I2C/SPI/MFD
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_MFD_RK8XX_I2C)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_MFD_RK8XX_SPI)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_SPI_ROCKCHIP)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_INPUT_RK805_PWRKEY)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_RTC_DRV_RK808)
|
||||||
|
|
||||||
|
# MMC/Storage
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_MMC_DW_ROCKCHIP)
|
||||||
|
|
||||||
|
# PCIe
|
||||||
|
$(call KCONFIG_SET_OPT,CONFIG_PCIE_ROCKCHIP_HOST,m)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_PCIE_ROCKCHIP_DW_HOST)
|
||||||
|
|
||||||
|
# Thermal and ADC
|
||||||
|
$(call KCONFIG_SET_OPT,CONFIG_ROCKCHIP_THERMAL,m)
|
||||||
|
$(call KCONFIG_SET_OPT,CONFIG_ROCKCHIP_SARADC,m)
|
||||||
|
|
||||||
|
# Crypto
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_CRYPTO_DEV_ROCKCHIP)
|
||||||
|
|
||||||
|
# NVMEM
|
||||||
|
$(call KCONFIG_SET_OPT,CONFIG_NVMEM_ROCKCHIP_EFUSE,m)
|
||||||
|
$(call KCONFIG_SET_OPT,CONFIG_NVMEM_ROCKCHIP_OTP,m)
|
||||||
|
|
||||||
|
# Network: STMMAC Ethernet (WAN port - RK3328 GMAC with RTL8211E PHY)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_NET_VENDOR_STMICRO)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_STMMAC_ETH)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_STMMAC_PLATFORM)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_DWMAC_ROCKCHIP)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_REALTEK_PHY)
|
||||||
|
|
||||||
|
# Network: USB Ethernet (LAN port - RTL8153 via USB 3.0)
|
||||||
|
$(call KCONFIG_SET_OPT,CONFIG_USB_NET_DRIVERS,m)
|
||||||
|
$(call KCONFIG_SET_OPT,CONFIG_USB_RTL8152,m)
|
||||||
|
|
||||||
|
# USB 3.0 xHCI Controller (required for RTL8153 LAN port)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_USB_XHCI_HCD)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_USB_XHCI_PLATFORM)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_USB_DWC3)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_USB_DWC3_HOST)
|
||||||
|
|
||||||
|
# USB 2.0 Host
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_USB_EHCI_HCD)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_USB_EHCI_HCD_PLATFORM)
|
||||||
|
$(call KCONFIG_ENABLE_OPT,CONFIG_USB_EHCI_ROOT_HUB_TT)
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(ix-board))
|
||||||
|
$(eval $(generic-package))
|
||||||
+10
-3
@@ -5,21 +5,28 @@ image cfg.ext4 {
|
|||||||
|
|
||||||
ext4 {
|
ext4 {
|
||||||
label = "cfg"
|
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 {
|
image var.ext4 {
|
||||||
empty = true
|
empty = true
|
||||||
temporary = true
|
temporary = true
|
||||||
size = 512M
|
size = 128M
|
||||||
|
|
||||||
ext4 {
|
ext4 {
|
||||||
label = "var"
|
label = "var"
|
||||||
use-mke2fs = true
|
use-mke2fs = true
|
||||||
|
features = "uninit_bg"
|
||||||
|
extraargs = "-m 0 -i 4096"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
image sdcard.img {
|
image #INFIX_ID##VERSION#-nanopi-r2s-sdcard.img {
|
||||||
hdimage {
|
hdimage {
|
||||||
partition-table-type = "gpt"
|
partition-table-type = "gpt"
|
||||||
}
|
}
|
||||||
+283
@@ -0,0 +1,283 @@
|
|||||||
|
{
|
||||||
|
"ieee802-dot1ab-lldp:lldp": {
|
||||||
|
"infix-lldp:enabled": true
|
||||||
|
},
|
||||||
|
"ietf-hardware:hardware": {
|
||||||
|
"component": [
|
||||||
|
{
|
||||||
|
"class": "infix-hardware:usb",
|
||||||
|
"name": "USB",
|
||||||
|
"state": {
|
||||||
|
"admin-state": "unlocked"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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:ipv6": {},
|
||||||
|
"ietf-ip:ipv4": {
|
||||||
|
"infix-dhcp-client:dhcp": {
|
||||||
|
"option": [
|
||||||
|
{"id": "ntp-server"},
|
||||||
|
{"id": "broadcast"},
|
||||||
|
{"id": "domain"},
|
||||||
|
{"id": "hostname"},
|
||||||
|
{"id": "dns-server"},
|
||||||
|
{"id": "router"},
|
||||||
|
{"id": "netmask"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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": {}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ietf-netconf-acm:nacm": {
|
||||||
|
"enable-nacm": true,
|
||||||
|
"groups": {
|
||||||
|
"group": [
|
||||||
|
{
|
||||||
|
"name": "admin",
|
||||||
|
"user-name": [
|
||||||
|
"admin"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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": "default-deny-all",
|
||||||
|
"group": [
|
||||||
|
"*"
|
||||||
|
],
|
||||||
|
"rule": [
|
||||||
|
{
|
||||||
|
"name": "deny-password-read",
|
||||||
|
"module-name": "ietf-system",
|
||||||
|
"path": "/ietf-system:system/authentication/user/password",
|
||||||
|
"access-operations": "*",
|
||||||
|
"action": "deny"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ietf-netconf-server:netconf-server": {
|
||||||
|
"listen": {
|
||||||
|
"endpoints": {
|
||||||
|
"endpoint": [
|
||||||
|
{
|
||||||
|
"name": "default-ssh",
|
||||||
|
"ssh": {
|
||||||
|
"tcp-server-parameters": {
|
||||||
|
"local-address": "::"
|
||||||
|
},
|
||||||
|
"ssh-server-parameters": {
|
||||||
|
"server-identity": {
|
||||||
|
"host-key": [
|
||||||
|
{
|
||||||
|
"name": "default-key",
|
||||||
|
"public-key": {
|
||||||
|
"central-keystore-reference": "genkey"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ietf-system:system": {
|
||||||
|
"hostname": "r2s-%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",
|
||||||
|
"ingress": [
|
||||||
|
"lan"
|
||||||
|
],
|
||||||
|
"egress": [
|
||||||
|
"wan"
|
||||||
|
],
|
||||||
|
"masquerade": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"infix-meta:meta": {
|
||||||
|
"version": "1.6"
|
||||||
|
},
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
udevadm control --reload-rules
|
||||||
|
udevadm trigger --subsystem-match=net --action=add
|
||||||
+1
-1
@@ -1,2 +1,2 @@
|
|||||||
ACTION=="add", SUBSYSTEM=="net", DEVPATH=="/devices/platform/ff540000.ethernet/net/eth0", NAME="wan"
|
ACTION=="add", SUBSYSTEM=="net", DEVPATH=="/devices/platform/ff540000.ethernet/net/eth0", NAME="wan"
|
||||||
ACTION=="add", SUBSYSTEM=="net", DEVPATH=="/devices/platform/ff600000.usb/xhci-hcd.0.auto/usb3/3-1/3-1:1.0/net/*", NAME="lan"
|
ACTION=="add", SUBSYSTEM=="net", DEVPATH=="/devices/platform/ff600000.usb/xhci-hcd.0.auto/usb5/5-1/5-1:1.0/net/*", NAME="lan"
|
||||||
@@ -56,6 +56,7 @@ CONFIG_JUMP_LABEL=y
|
|||||||
# CONFIG_GCC_PLUGINS is not set
|
# CONFIG_GCC_PLUGINS is not set
|
||||||
CONFIG_MODULES=y
|
CONFIG_MODULES=y
|
||||||
CONFIG_MODULE_UNLOAD=y
|
CONFIG_MODULE_UNLOAD=y
|
||||||
|
CONFIG_PARTITION_ADVANCED=y
|
||||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||||
# CONFIG_COMPAT_BRK is not set
|
# CONFIG_COMPAT_BRK is not set
|
||||||
CONFIG_KSM=y
|
CONFIG_KSM=y
|
||||||
@@ -243,9 +244,6 @@ CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG=y
|
|||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
CONFIG_BONDING=m
|
CONFIG_BONDING=m
|
||||||
CONFIG_DUMMY=m
|
CONFIG_DUMMY=m
|
||||||
CONFIG_NET_TEAM=m
|
|
||||||
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
|
|
||||||
CONFIG_NET_TEAM_MODE_LOADBALANCE=m
|
|
||||||
CONFIG_MACVLAN=m
|
CONFIG_MACVLAN=m
|
||||||
CONFIG_MACVTAP=m
|
CONFIG_MACVTAP=m
|
||||||
CONFIG_IPVLAN=m
|
CONFIG_IPVLAN=m
|
||||||
@@ -334,12 +332,20 @@ CONFIG_MDIO_BITBANG=y
|
|||||||
CONFIG_MDIO_MVUSB=m
|
CONFIG_MDIO_MVUSB=m
|
||||||
CONFIG_MDIO_MSCC_MIIM=y
|
CONFIG_MDIO_MSCC_MIIM=y
|
||||||
CONFIG_MDIO_BUS_MUX_MMIOREG=y
|
CONFIG_MDIO_BUS_MUX_MMIOREG=y
|
||||||
|
CONFIG_USB_RTL8150=m
|
||||||
CONFIG_USB_RTL8152=m
|
CONFIG_USB_RTL8152=m
|
||||||
|
CONFIG_USB_LAN78XX=m
|
||||||
CONFIG_USB_USBNET=m
|
CONFIG_USB_USBNET=m
|
||||||
CONFIG_USB_NET_CDC_EEM=m
|
CONFIG_USB_NET_CDC_EEM=m
|
||||||
# CONFIG_USB_NET_CDC_NCM is not set
|
# CONFIG_USB_NET_CDC_NCM is not set
|
||||||
|
CONFIG_USB_NET_DM9601=m
|
||||||
|
CONFIG_USB_NET_SMSC75XX=m
|
||||||
|
CONFIG_USB_NET_SMSC95XX=m
|
||||||
# CONFIG_USB_NET_NET1080 is not set
|
# CONFIG_USB_NET_NET1080 is not set
|
||||||
# CONFIG_USB_NET_CDC_SUBSET is not set
|
CONFIG_USB_ALI_M5632=y
|
||||||
|
CONFIG_USB_AN2720=y
|
||||||
|
CONFIG_USB_EPSON2888=y
|
||||||
|
CONFIG_USB_KC2190=y
|
||||||
# CONFIG_USB_NET_ZAURUS is not set
|
# CONFIG_USB_NET_ZAURUS is not set
|
||||||
# CONFIG_WLAN is not set
|
# CONFIG_WLAN is not set
|
||||||
CONFIG_INPUT_EVDEV=y
|
CONFIG_INPUT_EVDEV=y
|
||||||
@@ -427,7 +433,7 @@ CONFIG_REGULATOR_S2MPS11=y
|
|||||||
# CONFIG_HID_MICROSOFT is not set
|
# CONFIG_HID_MICROSOFT is not set
|
||||||
# CONFIG_HID_MONTEREY is not set
|
# CONFIG_HID_MONTEREY is not set
|
||||||
CONFIG_USB_ULPI_BUS=y
|
CONFIG_USB_ULPI_BUS=y
|
||||||
CONFIG_USB=m
|
CONFIG_USB=y
|
||||||
CONFIG_USB_OTG=y
|
CONFIG_USB_OTG=y
|
||||||
CONFIG_USB_XHCI_HCD=m
|
CONFIG_USB_XHCI_HCD=m
|
||||||
CONFIG_USB_XHCI_MVEBU=m
|
CONFIG_USB_XHCI_MVEBU=m
|
||||||
@@ -438,6 +444,8 @@ CONFIG_USB_OHCI_HCD_PLATFORM=m
|
|||||||
CONFIG_USB_STORAGE=m
|
CONFIG_USB_STORAGE=m
|
||||||
CONFIG_USB_DWC3=y
|
CONFIG_USB_DWC3=y
|
||||||
CONFIG_USB_DWC2=y
|
CONFIG_USB_DWC2=y
|
||||||
|
CONFIG_USB_DWC2_HOST=y
|
||||||
|
CONFIG_USB_DWC2_PCI=y
|
||||||
CONFIG_USB_CHIPIDEA=m
|
CONFIG_USB_CHIPIDEA=m
|
||||||
CONFIG_USB_CHIPIDEA_UDC=y
|
CONFIG_USB_CHIPIDEA_UDC=y
|
||||||
CONFIG_USB_CHIPIDEA_HOST=y
|
CONFIG_USB_CHIPIDEA_HOST=y
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# QEMU-specific U-Boot config
|
||||||
|
# Enable PCI MMC for QEMU virtualized environment
|
||||||
|
CONFIG_MMC_PCI=y
|
||||||
@@ -1,743 +0,0 @@
|
|||||||
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_IRQ_TIME_ACCOUNTING=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_PSI=y
|
|
||||||
CONFIG_IKCONFIG=y
|
|
||||||
CONFIG_IKCONFIG_PROC=y
|
|
||||||
CONFIG_LOG_BUF_SHIFT=18
|
|
||||||
CONFIG_MEMCG=y
|
|
||||||
CONFIG_BLK_CGROUP=y
|
|
||||||
CONFIG_CFS_BANDWIDTH=y
|
|
||||||
CONFIG_RT_GROUP_SCHED=y
|
|
||||||
CONFIG_CGROUP_PIDS=y
|
|
||||||
CONFIG_CGROUP_FREEZER=y
|
|
||||||
CONFIG_CGROUP_HUGETLB=y
|
|
||||||
CONFIG_CPUSETS=y
|
|
||||||
CONFIG_CGROUP_DEVICE=y
|
|
||||||
CONFIG_CGROUP_CPUACCT=y
|
|
||||||
CONFIG_CGROUP_PERF=y
|
|
||||||
CONFIG_CGROUP_BPF=y
|
|
||||||
CONFIG_NAMESPACES=y
|
|
||||||
CONFIG_USER_NS=y
|
|
||||||
CONFIG_SCHED_AUTOGROUP=y
|
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
|
||||||
CONFIG_EXPERT=y
|
|
||||||
CONFIG_KALLSYMS_ALL=y
|
|
||||||
CONFIG_PROFILING=y
|
|
||||||
CONFIG_KEXEC_FILE=y
|
|
||||||
CONFIG_ARCH_ROCKCHIP=y
|
|
||||||
CONFIG_ARM64_VA_BITS_48=y
|
|
||||||
CONFIG_SCHED_MC=y
|
|
||||||
CONFIG_SCHED_SMT=y
|
|
||||||
CONFIG_NR_CPUS=8
|
|
||||||
CONFIG_COMPAT=y
|
|
||||||
CONFIG_RANDOMIZE_BASE=y
|
|
||||||
# CONFIG_SUSPEND is not set
|
|
||||||
CONFIG_ARM_PSCI_CPUIDLE=y
|
|
||||||
CONFIG_CPU_FREQ=y
|
|
||||||
CONFIG_CPU_FREQ_STAT=y
|
|
||||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=m
|
|
||||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
|
||||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
|
|
||||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
|
|
||||||
CONFIG_CPUFREQ_DT=y
|
|
||||||
CONFIG_ARM_SCMI_CPUFREQ=y
|
|
||||||
CONFIG_ACPI_CPPC_CPUFREQ=m
|
|
||||||
CONFIG_ACPI=y
|
|
||||||
CONFIG_ACPI_APEI=y
|
|
||||||
CONFIG_ACPI_APEI_GHES=y
|
|
||||||
CONFIG_ACPI_APEI_MEMORY_FAILURE=y
|
|
||||||
CONFIG_ACPI_APEI_EINJ=y
|
|
||||||
CONFIG_VIRTUALIZATION=y
|
|
||||||
CONFIG_KVM=y
|
|
||||||
CONFIG_KPROBES=y
|
|
||||||
CONFIG_JUMP_LABEL=y
|
|
||||||
# CONFIG_GCC_PLUGINS is not set
|
|
||||||
CONFIG_MODULES=y
|
|
||||||
CONFIG_MODULE_UNLOAD=y
|
|
||||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
|
||||||
# CONFIG_COMPAT_BRK is not set
|
|
||||||
CONFIG_KSM=y
|
|
||||||
CONFIG_MEMORY_FAILURE=y
|
|
||||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
|
||||||
CONFIG_CMA=y
|
|
||||||
CONFIG_CMA_AREAS=20
|
|
||||||
CONFIG_NET=y
|
|
||||||
CONFIG_PACKET=y
|
|
||||||
CONFIG_XDP_SOCKETS=y
|
|
||||||
CONFIG_XDP_SOCKETS_DIAG=y
|
|
||||||
CONFIG_IP_MULTICAST=y
|
|
||||||
CONFIG_IP_ADVANCED_ROUTER=y
|
|
||||||
CONFIG_IP_MULTIPLE_TABLES=y
|
|
||||||
CONFIG_IP_ROUTE_MULTIPATH=y
|
|
||||||
CONFIG_IP_PNP=y
|
|
||||||
CONFIG_IP_PNP_DHCP=y
|
|
||||||
CONFIG_IP_PNP_BOOTP=y
|
|
||||||
CONFIG_NET_IPIP=m
|
|
||||||
CONFIG_NET_IPGRE_DEMUX=m
|
|
||||||
CONFIG_NET_IPGRE=m
|
|
||||||
CONFIG_NET_IPGRE_BROADCAST=y
|
|
||||||
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_IPV6_SIT=m
|
|
||||||
CONFIG_IPV6_GRE=m
|
|
||||||
CONFIG_IPV6_MULTIPLE_TABLES=y
|
|
||||||
CONFIG_IPV6_SUBTREES=y
|
|
||||||
CONFIG_IPV6_MROUTE=y
|
|
||||||
CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
|
|
||||||
CONFIG_IPV6_PIMSM_V2=y
|
|
||||||
CONFIG_NETWORK_PHY_TIMESTAMPING=y
|
|
||||||
CONFIG_NETFILTER=y
|
|
||||||
CONFIG_BRIDGE_NETFILTER=y
|
|
||||||
CONFIG_NETFILTER_NETLINK_QUEUE=y
|
|
||||||
CONFIG_NETFILTER_NETLINK_LOG=y
|
|
||||||
CONFIG_NF_CONNTRACK=y
|
|
||||||
CONFIG_NF_CONNTRACK_EVENTS=y
|
|
||||||
CONFIG_NF_CONNTRACK_FTP=y
|
|
||||||
CONFIG_NF_TABLES=y
|
|
||||||
CONFIG_NF_TABLES_INET=y
|
|
||||||
CONFIG_NF_TABLES_NETDEV=y
|
|
||||||
CONFIG_NFT_CT=m
|
|
||||||
CONFIG_NFT_CONNLIMIT=m
|
|
||||||
CONFIG_NFT_LOG=m
|
|
||||||
CONFIG_NFT_LIMIT=m
|
|
||||||
CONFIG_NFT_MASQ=m
|
|
||||||
CONFIG_NFT_REDIR=m
|
|
||||||
CONFIG_NFT_NAT=m
|
|
||||||
CONFIG_NFT_TUNNEL=m
|
|
||||||
CONFIG_NFT_QUEUE=m
|
|
||||||
CONFIG_NFT_REJECT=m
|
|
||||||
CONFIG_NFT_COMPAT=m
|
|
||||||
CONFIG_NFT_HASH=m
|
|
||||||
CONFIG_NFT_SOCKET=m
|
|
||||||
CONFIG_NFT_OSF=m
|
|
||||||
CONFIG_NFT_DUP_NETDEV=m
|
|
||||||
CONFIG_NFT_FWD_NETDEV=m
|
|
||||||
CONFIG_NFT_REJECT_NETDEV=m
|
|
||||||
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
|
||||||
CONFIG_NETFILTER_XT_TARGET_LOG=m
|
|
||||||
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
|
|
||||||
CONFIG_NETFILTER_XT_MATCH_BPF=m
|
|
||||||
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
|
|
||||||
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
|
|
||||||
CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
|
|
||||||
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
|
|
||||||
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
|
|
||||||
CONFIG_NETFILTER_XT_MATCH_DSCP=m
|
|
||||||
CONFIG_NETFILTER_XT_MATCH_HELPER=m
|
|
||||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
|
|
||||||
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_NF_IPTABLES=m
|
|
||||||
CONFIG_IP_NF_FILTER=m
|
|
||||||
CONFIG_IP_NF_TARGET_REJECT=m
|
|
||||||
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_IPV6HEADER=m
|
|
||||||
CONFIG_IP6_NF_FILTER=m
|
|
||||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
|
||||||
CONFIG_IP6_NF_MANGLE=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=y
|
|
||||||
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_AMONG=m
|
|
||||||
CONFIG_BRIDGE_EBT_ARP=m
|
|
||||||
CONFIG_BRIDGE_EBT_IP=m
|
|
||||||
CONFIG_BRIDGE_EBT_IP6=m
|
|
||||||
CONFIG_BRIDGE_EBT_LIMIT=m
|
|
||||||
CONFIG_BRIDGE_EBT_MARK=m
|
|
||||||
CONFIG_BRIDGE_EBT_PKTTYPE=m
|
|
||||||
CONFIG_BRIDGE_EBT_STP=m
|
|
||||||
CONFIG_BRIDGE_EBT_VLAN=m
|
|
||||||
CONFIG_BRIDGE_EBT_ARPREPLY=m
|
|
||||||
CONFIG_BRIDGE_EBT_DNAT=m
|
|
||||||
CONFIG_BRIDGE_EBT_MARK_T=m
|
|
||||||
CONFIG_BRIDGE_EBT_REDIRECT=m
|
|
||||||
CONFIG_BRIDGE_EBT_SNAT=m
|
|
||||||
CONFIG_BRIDGE_EBT_LOG=m
|
|
||||||
CONFIG_BRIDGE_EBT_NFLOG=m
|
|
||||||
CONFIG_BRIDGE=y
|
|
||||||
CONFIG_BRIDGE_VLAN_FILTERING=y
|
|
||||||
CONFIG_BRIDGE_MRP=y
|
|
||||||
CONFIG_BRIDGE_CFM=y
|
|
||||||
CONFIG_VLAN_8021Q=y
|
|
||||||
CONFIG_VLAN_8021Q_GVRP=y
|
|
||||||
CONFIG_VLAN_8021Q_MVRP=y
|
|
||||||
CONFIG_NET_SCHED=y
|
|
||||||
CONFIG_NET_SCH_CBS=m
|
|
||||||
CONFIG_NET_SCH_ETF=m
|
|
||||||
CONFIG_NET_SCH_TAPRIO=m
|
|
||||||
CONFIG_NET_SCH_MQPRIO=m
|
|
||||||
CONFIG_NET_SCH_INGRESS=m
|
|
||||||
CONFIG_NET_CLS_BASIC=m
|
|
||||||
CONFIG_NET_CLS_BPF=m
|
|
||||||
CONFIG_NET_CLS_FLOWER=m
|
|
||||||
CONFIG_NET_CLS_ACT=y
|
|
||||||
CONFIG_NET_ACT_GACT=y
|
|
||||||
CONFIG_NET_ACT_MIRRED=y
|
|
||||||
CONFIG_NET_ACT_NAT=y
|
|
||||||
CONFIG_NET_ACT_SKBEDIT=y
|
|
||||||
CONFIG_NET_ACT_VLAN=y
|
|
||||||
CONFIG_NET_ACT_BPF=y
|
|
||||||
CONFIG_DCB=y
|
|
||||||
CONFIG_NETLINK_DIAG=y
|
|
||||||
CONFIG_MPLS=y
|
|
||||||
CONFIG_NET_MPLS_GSO=y
|
|
||||||
CONFIG_MPLS_ROUTING=m
|
|
||||||
CONFIG_NET_PKTGEN=y
|
|
||||||
CONFIG_BT=m
|
|
||||||
# CONFIG_BT_LE is not set
|
|
||||||
CONFIG_BT_LEDS=y
|
|
||||||
# CONFIG_BT_DEBUGFS is not set
|
|
||||||
CONFIG_BT_HCIBTUSB=m
|
|
||||||
CONFIG_BT_HCIUART=m
|
|
||||||
CONFIG_BT_HCIUART_LL=y
|
|
||||||
CONFIG_BT_HCIUART_BCM=y
|
|
||||||
CONFIG_BT_HCIUART_QCA=y
|
|
||||||
CONFIG_CFG80211=y
|
|
||||||
CONFIG_MAC80211=y
|
|
||||||
CONFIG_MAC80211_LEDS=y
|
|
||||||
CONFIG_RFKILL=y
|
|
||||||
CONFIG_NET_9P=y
|
|
||||||
CONFIG_NET_9P_VIRTIO=y
|
|
||||||
CONFIG_PCI=y
|
|
||||||
CONFIG_PCIEPORTBUS=y
|
|
||||||
CONFIG_PCI_IOV=y
|
|
||||||
CONFIG_PCI_PASID=y
|
|
||||||
CONFIG_HOTPLUG_PCI=y
|
|
||||||
CONFIG_HOTPLUG_PCI_ACPI=y
|
|
||||||
CONFIG_PCI_HOST_GENERIC=y
|
|
||||||
CONFIG_PCIE_ROCKCHIP_HOST=m
|
|
||||||
CONFIG_PCIE_ROCKCHIP_DW_HOST=y
|
|
||||||
CONFIG_PCI_ENDPOINT=y
|
|
||||||
CONFIG_PCI_ENDPOINT_CONFIGFS=y
|
|
||||||
CONFIG_PCI_EPF_TEST=m
|
|
||||||
CONFIG_DEVTMPFS=y
|
|
||||||
CONFIG_DEVTMPFS_MOUNT=y
|
|
||||||
CONFIG_FW_LOADER_USER_HELPER=y
|
|
||||||
CONFIG_VEXPRESS_CONFIG=y
|
|
||||||
CONFIG_ARM_SCMI_PROTOCOL=y
|
|
||||||
CONFIG_ARM_SCPI_PROTOCOL=y
|
|
||||||
CONFIG_EFI_CAPSULE_LOADER=y
|
|
||||||
CONFIG_MTD=y
|
|
||||||
CONFIG_MTD_BLOCK=y
|
|
||||||
CONFIG_MTD_CFI=y
|
|
||||||
CONFIG_MTD_CFI_ADV_OPTIONS=y
|
|
||||||
CONFIG_MTD_CFI_INTELEXT=y
|
|
||||||
CONFIG_MTD_CFI_AMDSTD=y
|
|
||||||
CONFIG_MTD_CFI_STAA=y
|
|
||||||
CONFIG_MTD_PHYSMAP=y
|
|
||||||
CONFIG_MTD_PHYSMAP_OF=y
|
|
||||||
CONFIG_MTD_DATAFLASH=y
|
|
||||||
CONFIG_MTD_SST25L=y
|
|
||||||
CONFIG_MTD_BLOCK2MTD=y
|
|
||||||
CONFIG_MTD_RAW_NAND=y
|
|
||||||
CONFIG_MTD_NAND_DENALI_DT=y
|
|
||||||
CONFIG_MTD_SPI_NOR=y
|
|
||||||
CONFIG_OF_OVERLAY=y
|
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
|
||||||
CONFIG_BLK_DEV_NBD=m
|
|
||||||
CONFIG_VIRTIO_BLK=y
|
|
||||||
CONFIG_BLK_DEV_NVME=m
|
|
||||||
CONFIG_SRAM=y
|
|
||||||
CONFIG_PCI_ENDPOINT_TEST=m
|
|
||||||
CONFIG_EEPROM_AT24=m
|
|
||||||
CONFIG_EEPROM_AT25=m
|
|
||||||
CONFIG_UACCE=m
|
|
||||||
# CONFIG_SCSI_PROC_FS is not set
|
|
||||||
CONFIG_BLK_DEV_SD=y
|
|
||||||
CONFIG_SCSI_SAS_ATA=y
|
|
||||||
CONFIG_SCSI_HISI_SAS=y
|
|
||||||
CONFIG_SCSI_HISI_SAS_PCI=y
|
|
||||||
CONFIG_MEGARAID_SAS=y
|
|
||||||
CONFIG_SCSI_MPT3SAS=m
|
|
||||||
CONFIG_SCSI_VIRTIO=y
|
|
||||||
CONFIG_ATA=y
|
|
||||||
CONFIG_SATA_AHCI=y
|
|
||||||
CONFIG_SATA_AHCI_PLATFORM=y
|
|
||||||
CONFIG_AHCI_CEVA=y
|
|
||||||
CONFIG_SATA_SIL24=y
|
|
||||||
CONFIG_PATA_OF_PLATFORM=y
|
|
||||||
CONFIG_MD=y
|
|
||||||
# CONFIG_MD_BITMAP_FILE is not set
|
|
||||||
CONFIG_BLK_DEV_DM=y
|
|
||||||
CONFIG_DM_INIT=y
|
|
||||||
CONFIG_DM_VERITY=y
|
|
||||||
CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG=y
|
|
||||||
CONFIG_NETDEVICES=y
|
|
||||||
CONFIG_BONDING=m
|
|
||||||
CONFIG_DUMMY=m
|
|
||||||
CONFIG_WIREGUARD=m
|
|
||||||
CONFIG_MACVLAN=m
|
|
||||||
CONFIG_MACVTAP=m
|
|
||||||
CONFIG_IPVLAN=m
|
|
||||||
CONFIG_IPVTAP=m
|
|
||||||
CONFIG_VXLAN=m
|
|
||||||
CONFIG_GENEVE=m
|
|
||||||
CONFIG_BAREUDP=m
|
|
||||||
CONFIG_MACSEC=m
|
|
||||||
CONFIG_TUN=m
|
|
||||||
CONFIG_VETH=m
|
|
||||||
CONFIG_VIRTIO_NET=y
|
|
||||||
CONFIG_NLMON=y
|
|
||||||
CONFIG_NET_VRF=y
|
|
||||||
# CONFIG_NET_VENDOR_3COM is not set
|
|
||||||
# CONFIG_NET_VENDOR_ADAPTEC is not set
|
|
||||||
# CONFIG_NET_VENDOR_AGERE is not set
|
|
||||||
# CONFIG_NET_VENDOR_ALACRITECH is not set
|
|
||||||
# CONFIG_NET_VENDOR_ALTEON is not set
|
|
||||||
# CONFIG_NET_VENDOR_AMAZON is not set
|
|
||||||
# CONFIG_NET_VENDOR_AMD is not set
|
|
||||||
# CONFIG_NET_VENDOR_AQUANTIA is not set
|
|
||||||
# CONFIG_NET_VENDOR_ARC is not set
|
|
||||||
# CONFIG_NET_VENDOR_ASIX is not set
|
|
||||||
CONFIG_ATL2=m
|
|
||||||
CONFIG_ALX=m
|
|
||||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
|
||||||
# CONFIG_NET_VENDOR_CADENCE is not set
|
|
||||||
# CONFIG_NET_VENDOR_CAVIUM is not set
|
|
||||||
# CONFIG_NET_VENDOR_CHELSIO is not set
|
|
||||||
# CONFIG_NET_VENDOR_CISCO is not set
|
|
||||||
# CONFIG_NET_VENDOR_CORTINA is not set
|
|
||||||
# CONFIG_NET_VENDOR_DEC is not set
|
|
||||||
# CONFIG_NET_VENDOR_DLINK is not set
|
|
||||||
# CONFIG_NET_VENDOR_EMULEX is not set
|
|
||||||
# CONFIG_NET_VENDOR_EZCHIP is not set
|
|
||||||
# CONFIG_NET_VENDOR_GOOGLE is not set
|
|
||||||
# CONFIG_NET_VENDOR_HISILICON is not set
|
|
||||||
# CONFIG_NET_VENDOR_HUAWEI is not set
|
|
||||||
# CONFIG_NET_VENDOR_INTEL is not set
|
|
||||||
# CONFIG_NET_VENDOR_LITEX is not set
|
|
||||||
# CONFIG_NET_VENDOR_MARVELL is not set
|
|
||||||
# CONFIG_NET_VENDOR_MELLANOX is not set
|
|
||||||
# CONFIG_NET_VENDOR_MICREL is not set
|
|
||||||
# CONFIG_NET_VENDOR_MICROCHIP is not set
|
|
||||||
# CONFIG_NET_VENDOR_MICROSEMI is not set
|
|
||||||
# CONFIG_NET_VENDOR_MICROSOFT is not set
|
|
||||||
# CONFIG_NET_VENDOR_MYRI is not set
|
|
||||||
# CONFIG_NET_VENDOR_NI is not set
|
|
||||||
# CONFIG_NET_VENDOR_NATSEMI is not set
|
|
||||||
# CONFIG_NET_VENDOR_NETERION is not set
|
|
||||||
# CONFIG_NET_VENDOR_NETRONOME is not set
|
|
||||||
# CONFIG_NET_VENDOR_NVIDIA is not set
|
|
||||||
# CONFIG_NET_VENDOR_OKI is not set
|
|
||||||
# CONFIG_NET_VENDOR_PACKET_ENGINES is not set
|
|
||||||
# CONFIG_NET_VENDOR_PENSANDO is not set
|
|
||||||
# CONFIG_NET_VENDOR_QLOGIC is not set
|
|
||||||
# CONFIG_NET_VENDOR_BROCADE is not set
|
|
||||||
# CONFIG_NET_VENDOR_QUALCOMM is not set
|
|
||||||
# CONFIG_NET_VENDOR_RDC is not set
|
|
||||||
CONFIG_8139CP=m
|
|
||||||
CONFIG_8139TOO=m
|
|
||||||
# CONFIG_8139TOO_PIO is not set
|
|
||||||
CONFIG_R8169=m
|
|
||||||
# CONFIG_NET_VENDOR_RENESAS is not set
|
|
||||||
# CONFIG_NET_VENDOR_ROCKER is not set
|
|
||||||
# CONFIG_NET_VENDOR_SAMSUNG is not set
|
|
||||||
# CONFIG_NET_VENDOR_SEEQ is not set
|
|
||||||
# CONFIG_NET_VENDOR_SILAN is not set
|
|
||||||
# CONFIG_NET_VENDOR_SIS is not set
|
|
||||||
# CONFIG_NET_VENDOR_SOLARFLARE is not set
|
|
||||||
# CONFIG_NET_VENDOR_SMSC is not set
|
|
||||||
# CONFIG_NET_VENDOR_SOCIONEXT is not set
|
|
||||||
CONFIG_STMMAC_ETH=y
|
|
||||||
# CONFIG_DWMAC_GENERIC is not set
|
|
||||||
# CONFIG_NET_VENDOR_SUN is not set
|
|
||||||
# CONFIG_NET_VENDOR_SYNOPSYS is not set
|
|
||||||
# CONFIG_NET_VENDOR_TEHUTI is not set
|
|
||||||
# CONFIG_NET_VENDOR_TI is not set
|
|
||||||
# CONFIG_NET_VENDOR_VIA is not set
|
|
||||||
# CONFIG_NET_VENDOR_WIZNET is not set
|
|
||||||
# CONFIG_NET_VENDOR_XILINX is not set
|
|
||||||
CONFIG_LED_TRIGGER_PHY=y
|
|
||||||
CONFIG_AX88796B_PHY=y
|
|
||||||
CONFIG_DAVICOM_PHY=m
|
|
||||||
CONFIG_REALTEK_PHY=y
|
|
||||||
CONFIG_ROCKCHIP_PHY=y
|
|
||||||
CONFIG_MDIO_BITBANG=y
|
|
||||||
CONFIG_MDIO_BUS_MUX_MULTIPLEXER=y
|
|
||||||
CONFIG_MDIO_BUS_MUX_MMIOREG=y
|
|
||||||
CONFIG_USB_RTL8150=m
|
|
||||||
CONFIG_USB_RTL8152=m
|
|
||||||
CONFIG_USB_USBNET=y
|
|
||||||
CONFIG_USB_NET_AX8817X=m
|
|
||||||
CONFIG_USB_NET_AX88179_178A=m
|
|
||||||
CONFIG_USB_NET_CDC_NCM=m
|
|
||||||
CONFIG_USB_NET_DM9601=m
|
|
||||||
CONFIG_USB_NET_SMSC75XX=m
|
|
||||||
CONFIG_USB_NET_SMSC95XX=m
|
|
||||||
CONFIG_USB_NET_NET1080=m
|
|
||||||
CONFIG_USB_NET_PLUSB=m
|
|
||||||
CONFIG_USB_NET_MCS7830=m
|
|
||||||
CONFIG_USB_NET_CDC_SUBSET=m
|
|
||||||
# CONFIG_USB_NET_ZAURUS is not set
|
|
||||||
CONFIG_ATH10K=m
|
|
||||||
CONFIG_ATH10K_PCI=m
|
|
||||||
CONFIG_WCN36XX=m
|
|
||||||
# CONFIG_WLAN_VENDOR_ATMEL is not set
|
|
||||||
# CONFIG_WLAN_VENDOR_BROADCOM is not set
|
|
||||||
# CONFIG_WLAN_VENDOR_INTEL is not set
|
|
||||||
# CONFIG_WLAN_VENDOR_INTERSIL is not set
|
|
||||||
# CONFIG_WLAN_VENDOR_MARVELL is not set
|
|
||||||
# CONFIG_WLAN_VENDOR_MEDIATEK is not set
|
|
||||||
CONFIG_RTL8180=m
|
|
||||||
CONFIG_RTL8187=m
|
|
||||||
CONFIG_RTL_CARDS=m
|
|
||||||
CONFIG_RTL8192CE=m
|
|
||||||
CONFIG_RTL8192SE=m
|
|
||||||
CONFIG_RTL8192DE=m
|
|
||||||
CONFIG_RTL8723AE=m
|
|
||||||
CONFIG_RTL8723BE=m
|
|
||||||
CONFIG_RTL8188EE=m
|
|
||||||
CONFIG_RTL8192EE=m
|
|
||||||
CONFIG_RTL8821AE=m
|
|
||||||
CONFIG_RTL8192CU=m
|
|
||||||
CONFIG_RTL8XXXU=m
|
|
||||||
CONFIG_RTL8XXXU_UNTESTED=y
|
|
||||||
CONFIG_RTW88=m
|
|
||||||
CONFIG_RTW88_8822BE=m
|
|
||||||
CONFIG_RTW88_8822BS=m
|
|
||||||
CONFIG_RTW88_8822BU=m
|
|
||||||
CONFIG_RTW88_8822CE=m
|
|
||||||
CONFIG_RTW88_8822CS=m
|
|
||||||
CONFIG_RTW88_8822CU=m
|
|
||||||
CONFIG_RTW88_8723DE=m
|
|
||||||
CONFIG_RTW88_8723DS=m
|
|
||||||
CONFIG_RTW88_8723DU=m
|
|
||||||
CONFIG_RTW88_8821CE=m
|
|
||||||
CONFIG_RTW88_8821CS=m
|
|
||||||
CONFIG_RTW88_8821CU=m
|
|
||||||
CONFIG_RTW88_DEBUG=y
|
|
||||||
CONFIG_RTW89=m
|
|
||||||
CONFIG_RTW89_8851BE=m
|
|
||||||
CONFIG_RTW89_8852AE=m
|
|
||||||
CONFIG_RTW89_8852BE=m
|
|
||||||
CONFIG_RTW89_8852CE=m
|
|
||||||
CONFIG_RTW89_DEBUGMSG=y
|
|
||||||
# CONFIG_WLAN_VENDOR_RSI is not set
|
|
||||||
# CONFIG_WLAN_VENDOR_TI is not set
|
|
||||||
# CONFIG_WLAN_VENDOR_ZYDAS is not set
|
|
||||||
# CONFIG_WLAN_VENDOR_QUANTENNA is not set
|
|
||||||
CONFIG_INPUT_FF_MEMLESS=y
|
|
||||||
CONFIG_INPUT_EVDEV=y
|
|
||||||
CONFIG_INPUT_EVBUG=y
|
|
||||||
CONFIG_KEYBOARD_GPIO=y
|
|
||||||
CONFIG_KEYBOARD_GPIO_POLLED=y
|
|
||||||
# CONFIG_INPUT_MOUSE is not set
|
|
||||||
CONFIG_INPUT_MISC=y
|
|
||||||
CONFIG_INPUT_RK805_PWRKEY=y
|
|
||||||
# CONFIG_SERIO_SERPORT is not set
|
|
||||||
CONFIG_SERIO_AMBAKMI=y
|
|
||||||
CONFIG_VT_HW_CONSOLE_BINDING=y
|
|
||||||
CONFIG_LEGACY_PTY_COUNT=16
|
|
||||||
CONFIG_SERIAL_8250=y
|
|
||||||
CONFIG_SERIAL_8250_CONSOLE=y
|
|
||||||
CONFIG_SERIAL_8250_EXTENDED=y
|
|
||||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
|
||||||
CONFIG_SERIAL_8250_DW=y
|
|
||||||
CONFIG_SERIAL_8250_RT288X=y
|
|
||||||
CONFIG_SERIAL_OF_PLATFORM=y
|
|
||||||
CONFIG_SERIAL_AMBA_PL010=y
|
|
||||||
CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
|
|
||||||
CONFIG_SERIAL_AMBA_PL011=y
|
|
||||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
|
||||||
CONFIG_SERIAL_DEV_BUS=y
|
|
||||||
CONFIG_VIRTIO_CONSOLE=y
|
|
||||||
CONFIG_HW_RANDOM_VIRTIO=m
|
|
||||||
CONFIG_TCG_TPM=y
|
|
||||||
CONFIG_TCG_TIS_I2C_INFINEON=y
|
|
||||||
CONFIG_I2C=y
|
|
||||||
CONFIG_I2C_CHARDEV=y
|
|
||||||
CONFIG_I2C_MUX=y
|
|
||||||
CONFIG_I2C_MUX_PCA954x=y
|
|
||||||
CONFIG_I2C_GPIO=m
|
|
||||||
CONFIG_I2C_RK3X=y
|
|
||||||
CONFIG_I2C_SLAVE=y
|
|
||||||
CONFIG_SPI=y
|
|
||||||
CONFIG_SPI_BITBANG=m
|
|
||||||
CONFIG_SPI_CADENCE_QUADSPI=y
|
|
||||||
CONFIG_SPI_DESIGNWARE=m
|
|
||||||
CONFIG_SPI_DW_DMA=y
|
|
||||||
CONFIG_SPI_DW_MMIO=m
|
|
||||||
CONFIG_SPI_PL022=y
|
|
||||||
CONFIG_SPI_ROCKCHIP=y
|
|
||||||
CONFIG_SPI_SPIDEV=m
|
|
||||||
CONFIG_SPMI=y
|
|
||||||
CONFIG_PPS=y
|
|
||||||
# CONFIG_PTP_1588_CLOCK is not set
|
|
||||||
CONFIG_DEBUG_PINCTRL=y
|
|
||||||
CONFIG_PINCTRL_RK805=y
|
|
||||||
CONFIG_PINCTRL_SINGLE=y
|
|
||||||
CONFIG_GPIO_SYSFS=y
|
|
||||||
CONFIG_GPIO_GENERIC_PLATFORM=y
|
|
||||||
CONFIG_GPIO_MAX732X=y
|
|
||||||
CONFIG_GPIO_PCA953X=y
|
|
||||||
CONFIG_GPIO_PCA953X_IRQ=y
|
|
||||||
CONFIG_POWER_RESET_GPIO_RESTART=y
|
|
||||||
CONFIG_POWER_RESET_SYSCON=y
|
|
||||||
CONFIG_SYSCON_REBOOT_MODE=y
|
|
||||||
CONFIG_CHARGER_RK817=y
|
|
||||||
CONFIG_SENSORS_ARM_SCMI=y
|
|
||||||
CONFIG_SENSORS_ARM_SCPI=y
|
|
||||||
CONFIG_SENSORS_PWM_FAN=m
|
|
||||||
CONFIG_CPU_THERMAL=y
|
|
||||||
CONFIG_THERMAL_EMULATION=y
|
|
||||||
CONFIG_ROCKCHIP_THERMAL=m
|
|
||||||
CONFIG_WATCHDOG=y
|
|
||||||
CONFIG_WATCHDOG_SYSFS=y
|
|
||||||
CONFIG_SOFT_WATCHDOG=y
|
|
||||||
CONFIG_MFD_RK8XX_I2C=y
|
|
||||||
CONFIG_MFD_RK8XX_SPI=y
|
|
||||||
# CONFIG_MFD_VEXPRESS_SYSREG is not set
|
|
||||||
CONFIG_REGULATOR=y
|
|
||||||
CONFIG_REGULATOR_DEBUG=y
|
|
||||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
|
||||||
CONFIG_REGULATOR_USERSPACE_CONSUMER=y
|
|
||||||
CONFIG_REGULATOR_NETLINK_EVENTS=y
|
|
||||||
CONFIG_REGULATOR_GPIO=y
|
|
||||||
CONFIG_REGULATOR_PWM=y
|
|
||||||
CONFIG_REGULATOR_RK808=y
|
|
||||||
CONFIG_REGULATOR_VCTRL=y
|
|
||||||
# CONFIG_HID_SUPPORT is not set
|
|
||||||
CONFIG_USB_ULPI_BUS=y
|
|
||||||
CONFIG_USB_CONN_GPIO=y
|
|
||||||
CONFIG_USB=y
|
|
||||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
|
||||||
CONFIG_USB_DYNAMIC_MINORS=y
|
|
||||||
CONFIG_USB_OTG=y
|
|
||||||
CONFIG_USB_XHCI_HCD=y
|
|
||||||
CONFIG_USB_EHCI_HCD=y
|
|
||||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
|
||||||
CONFIG_USB_EHCI_HCD_PLATFORM=y
|
|
||||||
CONFIG_USB_OHCI_HCD=y
|
|
||||||
CONFIG_USB_OHCI_HCD_PLATFORM=y
|
|
||||||
CONFIG_USB_ACM=m
|
|
||||||
CONFIG_USB_STORAGE=y
|
|
||||||
CONFIG_USB_MUSB_HDRC=y
|
|
||||||
CONFIG_USB_DWC3=y
|
|
||||||
CONFIG_USB_DWC2=y
|
|
||||||
CONFIG_USB_SERIAL=m
|
|
||||||
CONFIG_USB_SERIAL_GENERIC=y
|
|
||||||
CONFIG_USB_SERIAL_SIMPLE=m
|
|
||||||
CONFIG_USB_SERIAL_CP210X=m
|
|
||||||
CONFIG_USB_SERIAL_FTDI_SIO=m
|
|
||||||
CONFIG_USB_SERIAL_PL2303=m
|
|
||||||
CONFIG_USB_SERIAL_OPTION=m
|
|
||||||
CONFIG_NOP_USB_XCEIV=y
|
|
||||||
CONFIG_USB_ULPI=y
|
|
||||||
CONFIG_USB_GADGET=y
|
|
||||||
CONFIG_USB_SNP_UDC_PLAT=y
|
|
||||||
CONFIG_USB_BDC_UDC=y
|
|
||||||
CONFIG_USB_CONFIGFS=m
|
|
||||||
CONFIG_USB_CONFIGFS_SERIAL=y
|
|
||||||
CONFIG_USB_CONFIGFS_ACM=y
|
|
||||||
CONFIG_USB_CONFIGFS_OBEX=y
|
|
||||||
CONFIG_USB_CONFIGFS_NCM=y
|
|
||||||
CONFIG_USB_CONFIGFS_ECM=y
|
|
||||||
CONFIG_USB_CONFIGFS_ECM_SUBSET=y
|
|
||||||
CONFIG_USB_CONFIGFS_RNDIS=y
|
|
||||||
CONFIG_USB_CONFIGFS_EEM=y
|
|
||||||
CONFIG_USB_CONFIGFS_MASS_STORAGE=y
|
|
||||||
CONFIG_USB_CONFIGFS_F_FS=y
|
|
||||||
CONFIG_MMC=y
|
|
||||||
CONFIG_MMC_BLOCK_MINORS=32
|
|
||||||
CONFIG_MMC_ARMMMCI=y
|
|
||||||
CONFIG_MMC_SDHCI=y
|
|
||||||
CONFIG_MMC_SDHCI_ACPI=y
|
|
||||||
CONFIG_MMC_SDHCI_PLTFM=y
|
|
||||||
CONFIG_MMC_SDHCI_OF_ARASAN=y
|
|
||||||
CONFIG_MMC_SDHCI_CADENCE=y
|
|
||||||
CONFIG_MMC_SDHCI_F_SDH30=y
|
|
||||||
CONFIG_MMC_SPI=y
|
|
||||||
CONFIG_MMC_DW=y
|
|
||||||
CONFIG_MMC_DW_HI3798CV200=y
|
|
||||||
CONFIG_MMC_DW_K3=y
|
|
||||||
CONFIG_MMC_DW_ROCKCHIP=y
|
|
||||||
CONFIG_SCSI_UFSHCD=y
|
|
||||||
CONFIG_SCSI_UFSHCD_PLATFORM=y
|
|
||||||
CONFIG_NEW_LEDS=y
|
|
||||||
CONFIG_LEDS_CLASS=y
|
|
||||||
CONFIG_LEDS_CLASS_FLASH=y
|
|
||||||
CONFIG_LEDS_CLASS_MULTICOLOR=y
|
|
||||||
CONFIG_LEDS_GPIO=y
|
|
||||||
CONFIG_LEDS_PWM=y
|
|
||||||
CONFIG_LEDS_SYSCON=y
|
|
||||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
|
||||||
CONFIG_LEDS_TRIGGER_DISK=y
|
|
||||||
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
|
||||||
CONFIG_LEDS_TRIGGER_CPU=y
|
|
||||||
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
|
|
||||||
CONFIG_LEDS_TRIGGER_PANIC=y
|
|
||||||
CONFIG_LEDS_TRIGGER_NETDEV=y
|
|
||||||
CONFIG_RTC_CLASS=y
|
|
||||||
CONFIG_RTC_DRV_RK808=y
|
|
||||||
CONFIG_RTC_DRV_EFI=y
|
|
||||||
CONFIG_RTC_DRV_PL030=y
|
|
||||||
CONFIG_RTC_DRV_PL031=y
|
|
||||||
CONFIG_DMADEVICES=y
|
|
||||||
CONFIG_PL330_DMA=y
|
|
||||||
CONFIG_SYNC_FILE=y
|
|
||||||
CONFIG_VIRTIO_PCI=y
|
|
||||||
CONFIG_VIRTIO_BALLOON=y
|
|
||||||
CONFIG_VIRTIO_INPUT=y
|
|
||||||
CONFIG_VIRTIO_MMIO=y
|
|
||||||
# CONFIG_VHOST_MENU is not set
|
|
||||||
CONFIG_STAGING=y
|
|
||||||
CONFIG_RTLLIB=m
|
|
||||||
CONFIG_RTL8192E=m
|
|
||||||
CONFIG_RTL8723BS=m
|
|
||||||
CONFIG_R8712U=m
|
|
||||||
CONFIG_RTS5208=m
|
|
||||||
# CONFIG_SURFACE_PLATFORMS is not set
|
|
||||||
CONFIG_COMMON_CLK_SCMI=y
|
|
||||||
CONFIG_COMMON_CLK_SCPI=y
|
|
||||||
CONFIG_COMMON_CLK_PWM=y
|
|
||||||
CONFIG_HWSPINLOCK=y
|
|
||||||
# CONFIG_FSL_ERRATUM_A008585 is not set
|
|
||||||
# CONFIG_HISILICON_ERRATUM_161010101 is not set
|
|
||||||
# CONFIG_ARM64_ERRATUM_858921 is not set
|
|
||||||
CONFIG_ARM_MHU=y
|
|
||||||
CONFIG_PLATFORM_MHU=y
|
|
||||||
CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y
|
|
||||||
CONFIG_ROCKCHIP_IOMMU=y
|
|
||||||
CONFIG_ARM_SMMU=y
|
|
||||||
CONFIG_ARM_SMMU_V3=y
|
|
||||||
CONFIG_ROCKCHIP_IODOMAIN=y
|
|
||||||
CONFIG_ROCKCHIP_DTPM=m
|
|
||||||
CONFIG_ROCKCHIP_PM_DOMAINS=y
|
|
||||||
CONFIG_DEVFREQ_GOV_USERSPACE=m
|
|
||||||
CONFIG_EXTCON_USB_GPIO=y
|
|
||||||
CONFIG_MEMORY=y
|
|
||||||
CONFIG_IIO=y
|
|
||||||
CONFIG_MAX9611=m
|
|
||||||
CONFIG_ROCKCHIP_SARADC=m
|
|
||||||
CONFIG_IIO_ST_LSM6DSX=m
|
|
||||||
CONFIG_SENSORS_ISL29018=m
|
|
||||||
CONFIG_VCNL4000=m
|
|
||||||
CONFIG_IIO_ST_MAGN_3AXIS=m
|
|
||||||
CONFIG_MPL3115=m
|
|
||||||
CONFIG_PWM=y
|
|
||||||
CONFIG_PWM_ROCKCHIP=y
|
|
||||||
CONFIG_RESET_GPIO=y
|
|
||||||
CONFIG_PHY_ROCKCHIP_DPHY_RX0=m
|
|
||||||
CONFIG_PHY_ROCKCHIP_EMMC=y
|
|
||||||
CONFIG_PHY_ROCKCHIP_INNO_HDMI=m
|
|
||||||
CONFIG_PHY_ROCKCHIP_INNO_USB2=y
|
|
||||||
CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY=m
|
|
||||||
CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY=m
|
|
||||||
CONFIG_PHY_ROCKCHIP_PCIE=m
|
|
||||||
CONFIG_PHY_ROCKCHIP_TYPEC=y
|
|
||||||
CONFIG_PHY_ROCKCHIP_USB=m
|
|
||||||
CONFIG_POWERCAP=y
|
|
||||||
CONFIG_ARM_SCMI_POWERCAP=y
|
|
||||||
CONFIG_DTPM=y
|
|
||||||
CONFIG_ARM_SMMU_V3_PMU=m
|
|
||||||
CONFIG_NVMEM_RMEM=m
|
|
||||||
CONFIG_NVMEM_ROCKCHIP_EFUSE=m
|
|
||||||
CONFIG_NVMEM_ROCKCHIP_OTP=m
|
|
||||||
CONFIG_TEE=y
|
|
||||||
CONFIG_OPTEE=y
|
|
||||||
CONFIG_MUX_MMIO=y
|
|
||||||
CONFIG_INTERCONNECT=y
|
|
||||||
CONFIG_EXT2_FS=y
|
|
||||||
CONFIG_EXT3_FS=y
|
|
||||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
|
||||||
CONFIG_BTRFS_FS=y
|
|
||||||
CONFIG_BTRFS_FS_POSIX_ACL=y
|
|
||||||
CONFIG_FANOTIFY=y
|
|
||||||
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
|
|
||||||
CONFIG_QUOTA=y
|
|
||||||
CONFIG_AUTOFS_FS=y
|
|
||||||
CONFIG_FUSE_FS=y
|
|
||||||
CONFIG_VIRTIO_FS=y
|
|
||||||
CONFIG_OVERLAY_FS=y
|
|
||||||
CONFIG_MSDOS_FS=y
|
|
||||||
CONFIG_VFAT_FS=y
|
|
||||||
CONFIG_FAT_DEFAULT_UTF8=y
|
|
||||||
CONFIG_EXFAT_FS=y
|
|
||||||
CONFIG_PROC_KCORE=y
|
|
||||||
CONFIG_PROC_CHILDREN=y
|
|
||||||
CONFIG_TMPFS=y
|
|
||||||
CONFIG_TMPFS_POSIX_ACL=y
|
|
||||||
CONFIG_HUGETLBFS=y
|
|
||||||
CONFIG_EFIVAR_FS=y
|
|
||||||
CONFIG_JFFS2_FS=y
|
|
||||||
CONFIG_JFFS2_FS_XATTR=y
|
|
||||||
CONFIG_SQUASHFS=y
|
|
||||||
CONFIG_SQUASHFS_LZO=y
|
|
||||||
CONFIG_SQUASHFS_XZ=y
|
|
||||||
CONFIG_SQUASHFS_ZSTD=y
|
|
||||||
CONFIG_NFS_FS=y
|
|
||||||
CONFIG_NFS_V4=y
|
|
||||||
CONFIG_NFS_V4_1=y
|
|
||||||
CONFIG_NFS_V4_2=y
|
|
||||||
CONFIG_ROOT_NFS=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_SECURITY=y
|
|
||||||
CONFIG_CRYPTO_DH=m
|
|
||||||
CONFIG_CRYPTO_CURVE25519=m
|
|
||||||
CONFIG_CRYPTO_ECHAINIV=y
|
|
||||||
CONFIG_CRYPTO_LZO=y
|
|
||||||
CONFIG_CRYPTO_ZSTD=y
|
|
||||||
CONFIG_CRYPTO_ANSI_CPRNG=y
|
|
||||||
CONFIG_CRYPTO_USER_API_RNG=m
|
|
||||||
CONFIG_CRYPTO_GHASH_ARM64_CE=y
|
|
||||||
CONFIG_CRYPTO_SHA1_ARM64_CE=y
|
|
||||||
CONFIG_CRYPTO_SHA2_ARM64_CE=y
|
|
||||||
CONFIG_CRYPTO_SHA512_ARM64_CE=m
|
|
||||||
CONFIG_CRYPTO_SHA3_ARM64=m
|
|
||||||
CONFIG_CRYPTO_SM3_ARM64_CE=m
|
|
||||||
CONFIG_CRYPTO_AES_ARM64_BS=m
|
|
||||||
CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
|
|
||||||
CONFIG_CRYPTO_CRCT10DIF_ARM64_CE=m
|
|
||||||
CONFIG_CRYPTO_DEV_ROCKCHIP=y
|
|
||||||
CONFIG_CRYPTO_DEV_CCREE=m
|
|
||||||
CONFIG_PACKING=y
|
|
||||||
CONFIG_INDIRECT_PIO=y
|
|
||||||
CONFIG_CRC_CCITT=m
|
|
||||||
CONFIG_CRC8=y
|
|
||||||
CONFIG_DMA_CMA=y
|
|
||||||
CONFIG_CMA_SIZE_MBYTES=32
|
|
||||||
CONFIG_PRINTK_TIME=y
|
|
||||||
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
|
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
|
||||||
CONFIG_DEBUG_FS=y
|
|
||||||
CONFIG_DETECT_HUNG_TASK=y
|
|
||||||
# CONFIG_SCHED_DEBUG is not set
|
|
||||||
CONFIG_FUNCTION_TRACER=y
|
|
||||||
CONFIG_MEMTEST=y
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
BOARD_DIR="$(dirname $0)"
|
|
||||||
|
|
||||||
install -m 0644 -D $BOARD_DIR/extlinux.conf $TARGET_DIR/boot/extlinux/extlinux.conf
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
config BR2_PACKAGE_RASPBERRYPI_RPI64
|
||||||
|
bool "Raspberry Pi 64-bit (RPi3 and later)"
|
||||||
|
depends on BR2_aarch64
|
||||||
|
select SDCARD_AUX
|
||||||
|
select BR2_PACKAGE_FEATURE_WIFI
|
||||||
|
select BR2_PACKAGE_BRCMFMAC_SDIO_FIRMWARE_RPI
|
||||||
|
select BR2_PACKAGE_BRCMFMAC_SDIO_FIRMWARE_RPI_WIFI
|
||||||
|
|
||||||
|
help
|
||||||
|
Raspberry Pi 64-bit adds support for the Raspberry Pi family of
|
||||||
|
of single-board computers (SBC), RPi 3B and later, including the
|
||||||
|
Raspberry Pi 2W, which shares the same CPU core as RPi 3B.
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
Copyright (c) 2025 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.
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
# Raspberry Pi 3B/4B
|
||||||
|
|
||||||
|
## Support level
|
||||||
|
|
||||||
|
Full support for base board but not any extension board on the GPIOs.
|
||||||
|
Other RPi boards of the same generation may work as well, but may need
|
||||||
|
some additional testing/work. A few CM4 variants have been tested and
|
||||||
|
seem to work as expected, but YMMV as always.
|
||||||
|
|
||||||
|
### Touch screen
|
||||||
|
|
||||||
|
The [Raspberry Pi touch display v1][0] is supported on the 4B, including
|
||||||
|
touch functionality. There are multiple touchscreens on the market for
|
||||||
|
Raspberry Pi, but currently only the official first version with 800x480
|
||||||
|
resolution is supported. Infix supplies all drivers required to utilize
|
||||||
|
the hardware, but you need to add the actual graphical application in a
|
||||||
|
container.
|
||||||
|
|
||||||
|
There are some important considerations you need to know about when
|
||||||
|
using Infix for graphical applications. The container needs access to
|
||||||
|
`/dev/dri/` to be able to access the graphics card, it also need access
|
||||||
|
to `/run/udev` to be able to find the input devices.
|
||||||
|
|
||||||
|
Example of running Doom in Infix:
|
||||||
|
|
||||||
|
```
|
||||||
|
admin@example:/> configure
|
||||||
|
admin@example:/config/> edit container doom
|
||||||
|
admin@example:/config/container/doom/> set image docker://mattiaswal/alpine-doom:latest
|
||||||
|
admin@example:/config/container/doom/> set privileged
|
||||||
|
admin@example:/config/container/doom/> edit mount udev
|
||||||
|
admin@example:/config/container/doom/mount/udev/> set type bind
|
||||||
|
admin@example:/config/container/doom/mount/udev/> set target /run/udev/
|
||||||
|
admin@example:/config/container/doom/mount/udev/> set source /run/udev/
|
||||||
|
admin@example:/config/container/doom/mount/udev/> end
|
||||||
|
admin@example:/config/container/doom/mount/xorg.conf/> set content U2VjdGlvbiAiT3V0cHV0Q2xhc3MiCiAgSWRlbnRpZmllciAidmM0IgogIE1hdGNoRHJpdmVyICJ2YzQiCiAgRHJpdmVyICJtb2Rlc2V0dGluZyIKICBPcHRpb24gIlByaW1hcnlHUFUiICJ0cnVlIgpFbmRTZWN0aW9uCg==
|
||||||
|
admin@example:/config/container/doom/mount/xorg.conf/> set target /etc/X11/xorg.conf
|
||||||
|
admin@example:/config/container/doom/mount/xorg.conf/> end
|
||||||
|
admin@example:/config/container/doom/> edit volume var
|
||||||
|
admin@example:/config/container/doom/volume/var/> set target /var
|
||||||
|
admin@example:/config/container/doom/volume/var/> leave
|
||||||
|
admin@example:/>
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> The `xorg.conf` [content mount][2] is a nifty detail of Infix that
|
||||||
|
> allows you to keep all the relevant configuration in a single file.
|
||||||
|
> The deta is "simply" `base64` encoded, so you do not really need the
|
||||||
|
> features of the Infix CLI, everything can be set up remotely [using
|
||||||
|
> `curl`][3] if you like.
|
||||||
|
|
||||||
|
### Pre-built images
|
||||||
|
|
||||||
|
Pre-built SD card images are available here: [infix-rpi64-sdcard.img][sdcard]
|
||||||
|
|
||||||
|
[0]: https://www.raspberrypi.com/products/raspberry-pi-touch-display/
|
||||||
|
[1]: https://github.com/kernelkit/infix/releases/download/latest-boot/infix-rpi64-sdcard.img
|
||||||
|
[2]: https://kernelkit.org/infix/latest/container/#content-mounts
|
||||||
|
[3]: https://kernelkit.org/infix/latest/scripting-restconf/
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user