SWUpdateਕਿਉਂ?
ਫੀਲਡ ਅਪਡੇਟ ਅਟੱਲ ਹਨ. SWUpdate ਫਰਮਵੇਅਰ, ਰੂਟ ਫਾਈਲ ਸਿਸਟਮ ਅਤੇ ਐਪਲੀਕੇਸ਼ਨ ਲੇਅਰਾਂ ਨੂੰ ਅਪਡੇਟ ਕਰਨ ਲਈ ਇੱਕ ਮਜ਼ਬੂਤ, ਮਾਡਯੂਲਰ ਹੱਲ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ - ਸਾਰੇ ਬਿਲਟ-ਇਨ ਰੋਲਬੈਕ ਸਮਰੱਥਾ ਦੇ ਨਾਲ.
ਇਹ ਓਪਨ ਸੋਰਸ ਹੈ, ਚੰਗੀ ਤਰ੍ਹਾਂ ਦਸਤਾਵੇਜ਼ੀ ਹੈ, ਅਤੇ ਏ / ਬੀ ਪਾਰਟੀਸ਼ਨ ਲੇਆਉਟ ਦੇ ਨਾਲ ਸਹਿਜ ਰੂਪ ਵਿੱਚ ਏਕੀਕ੍ਰਿਤ ਹੈ.
ਆਰਕੀਟੈਕਚਰ ਸੰਖੇਪ ਜਾਣਕਾਰੀ
SWUpdate ਵਿੱਚ ਕਈ ਮੁੱਖ ਭਾਗ ਹੁੰਦੇ ਹਨ:
- ਅੱਪਡੇਟ ਡੈਮਨ (swupdate) — ਡਿਵਾਈਸ 'ਤੇ ਚੱਲਦਾ ਹੈ ਅਤੇ ਅੱਪਡੇਟ ਲਾਗੂ ਕਰਦਾ ਹੈ
- ਹੈਂਡਲਰਾਂ ਨੂੰ ਅਪਡੇਟ ਕਰੋ - ਪਰਿਭਾਸ਼ਿਤ ਕਰੋ ਕਿ ਕੀ ਅਪਡੇਟ ਕਰਨਾ ਹੈ (ਰੂਟਫਸ, ਫਾਈਲਾਂ, ਸਕ੍ਰਿਪਟਾਂ, ਆਦਿ)
- ਕਲਾਇੰਟ ਇੰਟਰਫੇਸ - ਵੈੱਬ ਇੰਟਰਫੇਸ, REST API, ਜਾਂ ਸਥਾਨਕ CLI
- sw-description ਫਾਈਲ - ਅਪਡੇਟ ਪੈਕੇਜ ਦੇ structureਾਂਚੇ ਅਤੇ ਤਰਕ ਨੂੰ ਪਰਿਭਾਸ਼ਤ ਕਰਦੀ ਹੈ
ਉਦਾਹਰਨ ਅੱਪਡੇਟ ਪ੍ਰਵਾਹ
- ਇੱਕ ਅਪਡੇਟ ਪੈਕੇਜ (.swu) ਬਣਾਓ ਜਿਸ ਵਿੱਚ ਸ਼ਾਮਲ ਹੈ:
• ਇੱਕ ਨਵਾਂ ਰੂਟ ਫਾਈਲ ਸਿਸਟਮ ਚਿੱਤਰ
• sw-description ਫਾਈਲ
• ਵਿਕਲਪਿਕ ਸਕ੍ਰਿਪਟ (ਅਨੁਕੂਲਤਾ ਜਾਂ ਤਸਦੀਕ ਲਈ)
2.swupdate ਪਰਿਭਾਸ਼ਿਤ ਡਿਵਾਈਸਾਂ ਨੂੰ ਅਪਡੇਟ ਲਿਖਦਾ ਹੈ. - ਇੱਕ ਪੋਸਟ-ਅਪਡੇਟ ਸਕ੍ਰਿਪਟ ਸਫਲਤਾ ਦੀ ਪੁਸ਼ਟੀ ਕਰਦੀ ਹੈ ਜਾਂ ਜੇ ਜਰੂਰੀ ਹੋਵੇ ਤਾਂ ਰੋਲਬੈਕ ਨੂੰ ਚਾਲੂ ਕਰਦੀ ਹੈ.
ਉਦਾਹਰਨ
ਇਸ ਉਦਾਹਰਣ ਵਿੱਚ, ਅਸੀਂ ਇੱਕ ਅਧਿਕਾਰਤ Raspberry Pi OS ਟ੍ਰਿਕਸੀ ਚਿੱਤਰ ਨੂੰ ਦੋ ਫਾਈਲਾਂ ਵਿੱਚ ਵੰਡਿਆ ਹੈ:
- 2025-10-01-raspios-trixie-arm64.boot.vfat
- 2025-10-01-raspios-trixie-arm64.root.ext4
ਇਹਨਾਂ ਫਾਇਲਾਂ ਨੂੰ .swu ਪੈਕੇਜ ਬਣਾਉਣ ਲਈ sw-description ਫਾਇਲ ਵਿੱਚ ਹਵਾਲਾ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ:
software =
{
version = "0.1.0";
description = "Firmware update for XXXXX Project";
hardware-compatibility: [ "1.0", "1.2", "1.3"];
images: (
{
filename = "2025-10-01-raspios-trixie-arm64.boot.vfat";
device = "/dev/mmcblk0p1";
compressed = "zlib";
installed-directly = true;
},
{
filename = "2025-10-01-raspios-trixie-arm64.root.ext4";
device = "/dev/mmcblk0p2";
compressed = "zlib";
installed-directly = true;
}
);
scripts: (
{
type: "lua",
filename: "repair-disk-uuid.lua"
}
),
}ਹੇਠਾਂ ਦਿੱਤੀ ਲੂਆ ਸਕ੍ਰਿਪਟ ਫਲੈਸ਼ ਕਰਨ ਤੋਂ ਬਾਅਦ cmdline.txt ਅਤੇ fstab ਵਿੱਚ ਪਾਰਟੀਸ਼ਨ UUIDs ਨੂੰ ਵਿਵਸਥਿਤ ਕਰਦੀ ਹੈ:
#!/usr/bin/lua
-- helper: run shell command and capture output
function run(cmd)
local f = io.popen(cmd)
local out = f:read("*a")
f:close()
return (out:gsub("%s+$", ""))
end
-- detect PARTUUIDs
local root_part = "/dev/mmcblk0p2"
local boot_part = "/dev/mmcblk0p1"
local root_uuid = run("blkid -s PARTUUID -o value " .. root_part)
local boot_uuid = run("blkid -s PARTUUID -o value " .. boot_part)
print("Rootfs PARTUUID: " .. root_uuid)
print("Boot PARTUUID: " .. boot_uuid)
-- mount points
os.execute("mkdir -p /mnt/root /mnt/boot")
os.execute("mount " .. root_part .. " /mnt/root")
os.execute("mount " .. boot_part .. " /mnt/boot")
-- update cmdline.txt
local cmdline_path = "/mnt/boot/cmdline.txt"
local file = io.open(cmdline_path, "r")
local text = file:read("*a")
file:close()
text = text:gsub("root=PARTUUID=[^ ]+", "root=PARTUUID=" .. root_uuid)
file = io.open(cmdline_path, "w")
file:write(text)
file:close()
-- update /etc/fstab
local fstab_path = "/mnt/root/etc/fstab"
local fstab = io.open(fstab_path, "r")
local content = fstab:read("*a")
fstab:close()
-- replace root line
content = content:gsub("PARTUUID=[^%s]+%s+/%s", "PARTUUID=" .. root_uuid .. " /")
-- replace boot line (/boot or /boot/firmware)
content = content:gsub("PARTUUID=[^%s]+%s+/boot", "PARTUUID=" .. boot_uuid .. " /boot")
fstab = io.open(fstab_path, "w")
fstab:write(content)
fstab:close()
os.execute("sync")
os.execute("umount /mnt/boot")
os.execute("umount /mnt/root")
print("All PARTUUIDs updated successfully.")ਅੱਪਡੇਟ ਨੂੰ ਬੰਡਲ ਕਰਨ ਲਈ swugenerator ਦੀ ਵਰਤੋਂ ਕਰੋ:(https://github.com/sbabic/swugenerator).
ਅੱਪਡੇਟ ਲਾਗੂ ਕਰੋ
ਤਿਆਰ ਕੀਤੀ .swu ਫਾਇਲ ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ:
- CM5 ਨੂੰ ਬਚਾਅ ਪ੍ਰਣਾਲੀ ਵਿੱਚ ਬੂਟ ਕਰੋ.
- ਇੱਕ ਮਾਊਂਟ ਪੁਆਇੰਟ ਬਣਾਓ, ਉਦਾਹਰਣ ਵਜੋਂ:
sudo mkdir -p /mnt/update- ਅਪਡੇਟ ਫਾਈਲ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਵਾਲੇ ਇੱਕ NFS ਸ਼ੇਅਰ ਨੂੰ ਮਾਉਂਟ ਕਰੋ:
sudo mount -t nfs :/path/to/share /mnt/update- ਅਪਡੇਟ ਲਾਗੂ ਕਰੋ:
sudo swupdate -i /mnt/update/update.swuਏਕੀਕਰਣ ਦੀਆਂ ਸੰਭਾਵਨਾਵਾਂ
ਸਥਾਨਕ UI ਜਾਂ ਬੈਕਐਂਡ API ਤੋਂ ਅੱਪਡੇਟ ਟਰਿੱਗਰ ਕਰੋ
- ਵਧੀ ਹੋਈ ਸੁਰੱਖਿਆ ਲਈ ਅੱਪਡੇਟਾਂ 'ਤੇ ਦਸਤਖਤ ਕਰੋ ਅਤੇ ਤਸਦੀਕ ਕਰੋ
- ਟੈਸਟਿੰਗ ਜਾਂ ਡੀਬੱਗਿੰਗ ਲਈ SWUpdate’s ਵੈੱਬ ਇੰਟਰਫੇਸ ਦਾ ਉਪਯੋਗ ਕਰੋ।
- ਰਿਕਵਰੀ ਅਤੇ ਰੋਲਬੈਕ ਨੂੰ ਸਵੈਚਾਲਿਤ ਕਰਨ ਲਈ systemd ਸੇਵਾਵਾਂ ਨਾਲ ਜੋੜੋ
ਇਹ ਇਸ ਸਟੈਕ ਵਿੱਚ ਕਿਉਂ ਫਿੱਟ ਬੈਠਦਾ ਹੈ
rpi-image-gen ਅਤੇ rpi-sb-provisionerਦੇ ਨਾਲ, SWUpdate ਤਸਵੀਰ ਨੂੰ ਪੂਰਾ ਕਰਦਾ ਹੈ:
- ਬਿਲਡ → rpi-image-gen (ਚਿੱਤਰ ਨਿਰਮਾਣ)
- → rpi-sb-provisioner ਤਾਇਨਾਤ ਕਰੋ (ਡਿਵਾਈਸ ਪ੍ਰੋਵੀਜ਼ਨਿੰਗ)
- → SWUpdate ਬਣਾਈ ਰੱਖੋ (ਓਟੀਏ ਅਪਡੇਟ ਅਤੇ ਲਾਈਫਸਾਈਕਲ ਪ੍ਰਬੰਧਨ)
ਨਤੀਜਾ ਇੱਕ ਲਚਕਦਾਰ, ਖੁੱਲਾ, ਅਤੇ ਰੱਖ-ਰਖਾਵ ਯੋਗ ਏਮਬੇਡਡ Linux ਪਲੇਟਫਾਰਮ ਹੈ - ਇੱਕ ਜੋ ਤੁਹਾਡੇ ਉਤਪਾਦ ਦੇ ਨਾਲ ਵਿਕਸਤ ਹੁੰਦਾ ਹੈ, Yoctoਦੇ ਓਵਰਹੈੱਡ ਤੋਂ ਬਿਨਾਂ.
ਇਸ ਲੜੀ ਦੇ ਲੇਖ
- Raspberry Pi Compute Module 5ਲਈ ਉਤਪਾਦਨ-ਤਿਆਰ Linux ਬਣਾਉਣਾ
- ਸਟਾਕ ਓਐੱਸ ਤੋਂ ਪ੍ਰੋਡਕਸ਼ਨ ਪਲੈਟਫਾਰਮ ਤੱਕ
- rpi-image-genਨਾਲ Raspberry Pi OS ਨੂੰ ਅਨੁਕੂਲਿਤ ਕਰਨਾ
- ਸਿਸਟਮ ਦੀ ਮਜ਼ਬੂਤੀ - ਏ / ਬੀ ਰੂਟ ਫਾਈਲ ਸਿਸਟਮ ਲੇਆਉਟ ਨੂੰ ਡਿਜ਼ਾਈਨ ਕਰਨਾ
- ਪ੍ਰੋਵੀਜ਼ਨਿੰਗ - rpi-sb-provisionerਨਾਲ ਪਹਿਲੇ ਬੂਟ ਨੂੰ ਸਵੈਚਾਲਿਤ ਕਰਨਾ
- ਓਟੀਏ ਅਤੇ ਲਾਈਫਸਾਈਕਲ - SWUpdate ਨਾਲ ਸਾੱਫਟਵੇਅਰ ਅਪਡੇਟ
ਸਰੋਤ
- rpi-image-gen: https://github.com/raspberrypi/rpi-image-gen
- rpi-sb-provisioner: https://github.com/raspberrypi/rpi-sb-provisioner
- SWUpdate: https://github.com/sbabic/swupdate
- swugenerator: https://github.com/sbabic/swugenerator