Files
JiboAutoMod/__pycache__/jibo_automod.cpython-313.pyc

349 lines
62 KiB
Plaintext
Raw Normal View History

2026-03-15 20:24:40 +02:00
<EFBFBD>
?K<>i[<5B><00><00>n<00>SrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK r SSK
2026-03-15 20:24:40 +02:00
J r SSK J r JrJr SSKJr \ "\5R&R)5r\S- r\S- rSrS r"S
S 5r\R6"5S :XaAS \R8;a1\"\5H%r\R?S5(aM\ "\\S5 M' \"SS55r!Sr"S\#S\#S\$4Sjr%S\$4Sjr&S\$4Sjr'S\$4Sjr(S\$4Sjr)SXS\\$S\ \ S\*S\*S\*S \RV4 S!jjr,S \-4S"jr.S \*4S#jr/S \*4S$jr0S \\*\\$\\$44S%jr1S \\*\\$\\$44S&jr2SYS'\$S(\\$S)\\$4S*jjr3S \*4S+jr4S \\*\\$44S,jr5SZS-\*S \*4S.jjr6S \*4S/jr7S[S0\#S \*4S1jjr8S2\ S \\!4S3jr9S2\ S \\!4S4jr:S5\\!S \ \!4S6jr;S2\ S7\!S8\ S \*4S9jr<S:\ S \*4S;jr=S:\ S \*4S<jr>S \ \$4S=jr?S:\ S \*4S>jr@S:\ S \*4S?jrAS8\ S@\#SA\#S \*4SBjrBSC\ S@\#S \*4SDjrCS\SE\ SF\ SG\#SH\#S \\#\\\#\#444
SIjjrDS]SE\ SF\ SJ\#SK\#SL\#S \*4 SMjjrES \ 4SNjrFS\4S8\ S@\#SA\#S \*4SOjjrGS:\ S@\#S \*4SPjrHS:\ S@\#SA\#S \*4SQjrIS \*4SRjrJS \*4SSjrKS \*4STjrLS \*4SUjrMSVrN\OSW:Xa\N"5 gg)^a
2026-03-15 20:24:40 +02:00
Jibo Auto-Mod Tool
==================
Automatically mods a Jibo robot by:
1. Building the Shofel exploit (if needed)
2. Dumping the eMMC
3. Extracting and modifying the /var partition
4. Writing the modified partition back
Supports: Linux and Windows (with WSL or MinGW)
<EFBFBD>N)<01>Path)<03>Optional<61>Tuple<6C>List)<01> dataclass<73>Shofel<65> jibo_worki<00><01>c<00>4<00>\rSrSrSrSrSrSrSrSr Sr
S r S
r g ) <0C>Colors<72>(zzzzzzzz<31>N) <0A>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__firstlineno__<5F>RED<45>GREEN<45>YELLOW<4F>BLUE<55>MAGENTA<54>CYAN<41>RESET<45>BOLD<4C>__static_attributes__r<00><00>jibo_automod.pyr r (s*<00><00>
<14>C<EFBFBD> <16>E<EFBFBD> <17>F<EFBFBD> <15>D<EFBFBD><18>G<EFBFBD> <15>D<EFBFBD> <15>E<EFBFBD> <14>Drr <00>Windows<77>
WT_SESSION<EFBFBD>_<>c<00>L<00>\rSrSr%Sr\\S'\\S'\\S'\\S'\\S'Srg )
<EFBFBD> PartitionInfo<66>9zGPT partition information<6F>number<65> start_sector<6F>
end_sector<EFBFBD> size_sectors<72>namerN) rrrr<00>__doc__<5F>int<6E>__annotations__<5F>strrrrrr#r#9s <00><00>#<23> <0F>K<EFBFBD><15><15><13>O<EFBFBD><15><15>
<0A>Irr#c <00><><00>[S[RS[RS[R[RS[RS3
5 g)zPrint the tool banner<65>
u<EFBFBD>╔═══════════════════════════════════════════════════════════════════╗
║ zJIBO AUTO-MOD TOOLuA
║ Automatic Developer Mode Enabler for Jibo Robots ║
╚═══════════════════════════════════════════════════════════════════╝N)<05>printr rrrrrr<00> print_bannerr1Gsg<00><00> <09><01><07><1B><1B> <0A><0F><15>{<7B>{<7B>m<EFBFBD>-<2D>f<EFBFBD>l<EFBFBD>l<EFBFBD>^<5E>F<EFBFBD>K<EFBFBD>K<EFBFBD>=<3D>IP<03>QW<03>Q]<03>Q]<03>P^<03>^<01>  <04>r<00>step<65>total<61>messagec<00><><00>[S[RSUSUS[RS[RU[R3 5 g)zPrint a step indicatorr/<00>[<5B>/<2F>]<5D> N)r0r rrr)r2r3r4s r<00>
print_stepr:QsE<00><00> <09>B<EFBFBD>v<EFBFBD>{<7B>{<7B>m<EFBFBD>1<EFBFBD>T<EFBFBD>F<EFBFBD>!<21>E<EFBFBD>7<EFBFBD>!<21>F<EFBFBD>L<EFBFBD>L<EFBFBD>><3E><11>6<EFBFBD>;<3B>;<3B>-<2D><07>y<EFBFBD>QW<51>Q]<5D>Q]<5D>P^<5E>
_<EFBFBD>`rc<00>`<00>[[RSU[R35 g)zPrint a success messageu✓ N)r0r rr<00>r4s r<00> print_successr=Vs!<00><00> <09>V<EFBFBD>\<5C>\<5C>N<EFBFBD>$<24>w<EFBFBD>i<EFBFBD><06> <0C> <0C>~<7E>
6<EFBFBD>7rc<00>`<00>[[RSU[R35 g)zPrint a warning messageu⚠ N)r0r rrr<s r<00> print_warningr?[s!<00><00> <09>V<EFBFBD>]<5D>]<5D>O<EFBFBD>4<EFBFBD><07>y<EFBFBD><16><1C><1C><0E>
7<EFBFBD>8rc<00>`<00>[[RSU[R35 g)zPrint an error messageu✗ N)r0r rrr<s r<00> print_errorrA`s!<00><00> <09>V<EFBFBD>Z<EFBFBD>Z<EFBFBD>L<EFBFBD><04>W<EFBFBD>I<EFBFBD>f<EFBFBD>l<EFBFBD>l<EFBFBD>^<5E>
4<EFBFBD>5rc<00>`<00>[[RSU[R35 g)zPrint an info messageu N)r0r rrr<s r<00>
print_inforCes!<00><00> <09>V<EFBFBD>[<5B>[<5B>M<EFBFBD><14>g<EFBFBD>Y<EFBFBD>v<EFBFBD>|<7C>|<7C>n<EFBFBD>
5<EFBFBD>6r<00>cmd<6D>cwd<77>capture_output<75>check<63>sudo<64>returnc<00>D<00>U(a[R"5S:XaS/U-n[R"UUUSUS9nU$![RaIn[ SSR U535 UR(a[UR5 eSnAff=f)zRun a command and handle errors<72>LinuxrHT)rErF<00>textrGzCommand failed: r9N) <09>platform<72>system<65>
subprocess<EFBFBD>run<75>CalledProcessErrorrA<00>join<69>stderrr0)rDrErFrGrH<00>result<6C>es r<00> run_commandrVjs<><00><00> <0C><08><0F><0F>!<21>W<EFBFBD>,<2C><15>h<EFBFBD><13>n<EFBFBD><03> <0E><1B><1E><1E> <0F><13>)<29><15><17> 
<EFBFBD><06><16> <0A><> <15> (<28> (<28><0E><13>&<26>s<EFBFBD>x<EFBFBD>x<EFBFBD><03>}<7D>o<EFBFBD>6<>7<> <0C>8<EFBFBD>8<EFBFBD> <11>!<21>(<28>(<28>O<EFBFBD> <0A><> <0E>s<00>A<00>B<03>AB<03>Bc<00><00>[R"5[R"5[R"5[R"5S:Xa(S[R"5R 5;S.$SS.$)zGet system informationrK<00> microsoftF)<04>os<6F>arch<63>python_version<6F>is_wsl)rMrN<00>machiner[<00>release<73>lowerrrr<00>get_system_infor`<00>sj<00><00><17>o<EFBFBD>o<EFBFBD><1F><18> <20> <20>"<22>"<22>1<>1<>3<>?G<><EFBFBD><EFBFBD>?P<>T[<5B>?[<5B>+<2B><18>!1<>!1<>!3<>!9<>!9<>!;<3B>;<3B>  <06><06>bg<01>  <06>rc<00><><00>[R"5S:Xa+SSKnURRR 5S:g$[ R"5S:H=(d [R"S5SL$)z0Check if running as root or with sudo capabilityrrNrH)
rMrN<00>ctypes<65>windll<6C>shell32<33> IsUserAnAdminrY<00>geteuid<69>shutil<69>which)rbs r<00>check_root_or_sudori<00>sV<00><00><0F><EFBFBD><EFBFBD><18>I<EFBFBD>%<25><15><15>}<7D>}<7D>$<24>$<24>2<>2<>4<><01>9<>9<><11>z<EFBFBD>z<EFBFBD>|<7C>q<EFBFBD> <20>D<>F<EFBFBD>L<EFBFBD>L<EFBFBD><16>$8<><04>$D<>Drc<00>,<00>S/n[SU55$)zHQuick check if critical payload binaries exist (for dependency checking)<29>emmc_server.binc3<00>P# <00>UHn[U- R5v<00> M g7f<01>N)<02>
SHOFEL_DIR<EFBFBD>exists)<02>.0<EFBFBD>ps r<00> <genexpr><3E>(_check_payloads_exist.<locals>.<genexpr><3E>s"<00><00><00>D<>2C<32>Q<EFBFBD>
<EFBFBD>Q<EFBFBD><0E>&<26>&<26>(<28>(<28>2C<32>s<00>$&)<01>all)<01>critical_payloadss r<00>_check_payloads_existrv<00>s<00><00>*<2A>+<2B><15> <0E>D<>2C<32>D<> D<>Drc<00><00>/n/nSSS.nSSS.nUR5H9upE[R"U5(aM"URUSUS35 M; UR5H9upE[R"U5(aM"URUSUS35 M; [ 5(d,[R"S5(dURS 5 [
R "/S
QS S 9nURS :waURS5 [U5S :HX4$![aP [S5R5(d/[S5R5(dURS5 Nif=f)z%Check for required Linux dependencieszbuild-essential or base-devel)<02>gcc<63>makez.usbutils (optional, used for device detection)z*util-linux (optional, has Python fallback))<02>lsusb<73>fdisk<73> (<28>)<29>arm-none-eabi-gccz@arm-none-eabi-gcc (arm-none-eabi-gcc or arm-none-eabi-toolchain))z
pkg-configz--existsz
libusb-1.0T<EFBFBD>rFrzlibusb-1.0-dev or libusb1-develz/usr/include/libusb-1.0z/usr/local/include/libusb-1.0) <0C>itemsrgrh<00>appendrvrOrP<00>
returncode<EFBFBD>FileNotFoundErrorrro<00>len)<07>missing<6E>warnings<67>required_tools<6C>optional_tools<6C>tool<6F>packagerTs r<00>check_linux_dependenciesr<73><00>sf<00><00><10>G<EFBFBD><11>H<EFBFBD>/<2F>/<2F><06>N<EFBFBD>B<01>=<3D><06>N<EFBFBD>
(<28>-<2D>-<2D>/<2F> <0A><04><15>|<7C>|<7C>D<EFBFBD>!<21>!<21> <13>N<EFBFBD>N<EFBFBD>d<EFBFBD>V<EFBFBD>2<EFBFBD>g<EFBFBD>Y<EFBFBD>a<EFBFBD>0<> 1<>0<>(<28>-<2D>-<2D>/<2F> <0A><04><15>|<7C>|<7C>D<EFBFBD>!<21>!<21> <14>O<EFBFBD>O<EFBFBD>t<EFBFBD>f<EFBFBD>B<EFBFBD>w<EFBFBD>i<EFBFBD>q<EFBFBD>1<> 2<>0<>
!<21> "<22> "<22><15>|<7C>|<7C>/<2F>0<>0<> <13>N<EFBFBD>N<EFBFBD>]<5D> ^<5E> ><3E><1B><1E><1E> 4<><1F>
<EFBFBD><06> <12> <1C> <1C><01> !<21> <13>N<EFBFBD>N<EFBFBD><<3C> =<3D> <0F>w<EFBFBD><<3C>1<EFBFBD> <1C>g<EFBFBD> /<2F>/<2F><> <1D>><3E><13>-<2D>.<2E>5<>5<>7<>7<><13>3<>4<>;<3B>;<3B>=<3D>=<3D> <13>N<EFBFBD>N<EFBFBD><<3C> =<3D><> ><3E>s<00>%8D-<00>-AF<03>Fc<00>J<00>/n/n[R"S5(d,[R"S5(dURS5 [5(d,[R"S5(dURS5 [R"S5(d,[R"S5(dURS5 [R"S 5(d,[R"S
5(dURS 5 [ U5S :HX4$) z'Check for required Windows dependenciesrxzx86_64-w64-mingw32-gcczMinGW-w64 or MSYS2r~z%ARM GNU Toolchain (arm-none-eabi-gcc)ryz mingw32-makezGNU Make<6B>debugfs<66> debugfs.exezVdebugfs (e2fsprogs) - optional but recommended for reliable mode.json edits on Windowsr)rgrhr<>rvr<>)r<>r<>s r<00>check_windows_dependenciesr<73><00>s<><00><00><10>G<EFBFBD><11>H<EFBFBD> <12><<3C><<3C><05> <1E> <1E>v<EFBFBD>|<7C>|<7C>4L<34>'M<>'M<><0F><0E><0E>+<2B>,<2C> !<21> "<22> "<22><15>|<7C>|<7C>/<2F>0<>0<> <13>N<EFBFBD>N<EFBFBD>B<> C<> <12><<3C><<3C><06> <1F> <1F><06> <0C> <0C>^<5E>(D<>(D<><0F><0E><0E>z<EFBFBD>"<22> <12><<3C><<3C> <09> "<22> "<22>6<EFBFBD><<3C><<3C> <0A>+F<>+F<><10><0F><0F>p<>q<> <0E>w<EFBFBD><<3C>1<EFBFBD> <1C>g<EFBFBD> /<2F>/rrNr<>r<>c <00>0<00>U(a"[S5 UHn[SU35 M U(a"[S5 UHn[SU35 M U(Gae[S[RS[R
2026-03-15 20:24:40 +02:00
35 US:XaDSn[ S5R5(aS nOA[ S
5R5(aS nO [ S 5R5(aS nWS :Xa/[S[RS[R
S35 gUS :Xa/[S[RS[R
S35 gUS :Xa/[S[RS[R
S35 g[S[RS[R
S35 gUS:XaQ[S[RS[R
S[RS[R
S3 5 gg)z8Print installation instructions for missing dependencieszMissing dependencies:z - z'Optional dependencies (have fallbacks):r/zInstallation instructions:rK<00>unknown<77>/etc/arch-releaserZ<00>/etc/debian_version<6F>debian<61>/etc/fedora-release<73>fedoraz
z# Arch/CachyOS/Manjaro:zX
sudo pacman -S --needed base-devel libusb git arm-none-eabi-gcc arm-none-eabi-newlib
z# Ubuntu/Debian:zu
sudo apt update
sudo apt install build-essential libusb-1.0-0-dev git gcc-arm-none-eabi libnewlib-arm-none-eabi
z # Fedora:zx
sudo dnf groupinstall "Development Tools"
sudo dnf install libusb1-devel arm-none-eabi-gcc-cs arm-none-eabi-newlib
z
# Generic:zD
Install: build-essential, libusb-1.0-dev, git, arm-none-eabi-gcc
rzOption 1 - MSYS2 (Recommended):z<>
1. Download MSYS2 from https://www.msys2.org/
2. Open MSYS2 MINGW64 terminal and run:
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-libusb make
pacman -S mingw-w64-x86_64-arm-none-eabi-gcc
z-Option 2 - WSL (Windows Subsystem for Linux):zX
1. Install WSL2: wsl --install
2. Run this tool inside WSL with Linux dependencies
N) rAr0r?r rrrror)rNr<>r<><00>dep<65>warn<72>distros r<00>print_install_instructionsr<73><00>s<><00><00><0E><13>+<2B>,<2C><1A>C<EFBFBD> <11>D<EFBFBD><13><05>,<2C> <1F><1B><10><15>?<3F>@<40><1C>D<EFBFBD> <11>D<EFBFBD><14><06>-<2D> <20><1D><0F> <0A><02>6<EFBFBD>;<3B>;<3B>-<2D>9<>&<26>,<2C>,<2C><1E>H<>I<> <11>W<EFBFBD> <1C><1E>F<EFBFBD><13>'<27>(<28>/<2F>/<2F>1<>1<><1F><06><15>+<2B>,<2C>3<>3<>5<>5<>!<21><06><> <11>'<27> (<28> /<2F> /<2F> 1<> 1<><1D>F<EFBFBD> <11>V<EFBFBD> <1B> <11><03> <09>;<3B>;<3B>-<2D>&<26>v<EFBFBD>|<7C>|<7C>n<EFBFBD>5<01><04> <05><14>x<EFBFBD> <1F> <11><03> <09>;<3B>;<3B>-<2D><1F><06> <0C> <0C>~<7E>.<01><04> <05>
2026-03-15 20:24:40 +02:00
<14>x<EFBFBD> <1F> <11><03> <09>;<3B>;<3B>-<2D>y<EFBFBD><16><1C><1C><0E>'<01><04> <05> <12><03> <09>;<3B>;<3B>-<2D>z<EFBFBD>&<26>,<2C>,<2C><1E>(<01><04> <05>
<10>9<EFBFBD> <1C> <0A><03> <09>;<3B>;<3B>-<2D>.<2E>v<EFBFBD>|<7C>|<7C>n<EFBFBD>=<03> 
<EFBFBD>;<3B>;<3B>-<2D><<3C>V<EFBFBD>\<5C>\<5C>N<EFBFBD>K<01>
<04>
<05>
rc<00>x<00>[S- n[R"5S:Xa [S- nUR5$)z&Check if shofel2_t124 is already built<6C> shofel2_t124r<00>shofel2_t124.exe)rnrMrNro)<01>
shofel_exes r<00>check_shofel_builtr<74>(s5<00><00><1B>n<EFBFBD>,<2C>J<EFBFBD><0F><EFBFBD><EFBFBD><18>I<EFBFBD>%<25><1F>"4<>4<>
<EFBFBD> <15> <1C> <1C> <1E>rc<00><00>S/n/SQn/n/nUH2n[U- R5(aM!URU5 M4 UH2n[U- R5(aM!URU5 M4 [U5S:HX#-4$)z#Check if ARM payload binaries existrk)z boot_bct.binzmem_dumper_usb_server.binzintermezzo.binr)rnror<>r<>)<05>required_payloads<64>optional_payloads<64>missing_required<65>missing_optional<61>payloads r<00>check_payloads_builtr<74>0s<><00><00>*<2A>+<2B><15>W<><15><19><14><19><14>$<24><07><1A>W<EFBFBD>$<24>,<2C>,<2C>.<2E>.<2E> <1C> #<23> #<23>G<EFBFBD> ,<2C>%<25>%<25><07><1A>W<EFBFBD>$<24>,<2C>,<2C>.<2E>.<2E> <1C> #<23> #<23>G<EFBFBD> ,<2C>%<25> <0F><1F> <20>A<EFBFBD> %<25>'7<>'J<> J<>Jr<00> force_rebuildc<00><><00>[SSS5 [5up[5(aU(aU(d [S5 g[ S5 U(a[ SS/[ SS S
2026-03-15 20:24:40 +02:00
9 [ S/[ SS S
9n[5(Ga<>[S 5 [5upU(Gdp[S 5 [ S SRU5-5 [5 [[RS[R35 [5 [S5R5(a/[S[RS[RS35 O<>[S5R5(a/[S[RS[RS35 OX[S5R5(a/[S[RS[RS35 O [S5 [5 [S5 g [S5 g[S5 UR (a[UR 5 g !["an[SU35 SnAg SnAff=f) z#Build the shofel2_t124 exploit tool<6F><00>zBuilding Shofel exploit toolz!Shofel already built, skipping...TzCompiling shofel2_t124...ry<00>cleanF)rErFrGz,Host tool (shofel2_t124) built successfully!z!ARM payload binaries are missing!zMissing files: z, zDThe ARM toolchain (arm-none-eabi-gcc) is required to build payloads.r<><00> z Arch/CachyOS:z6 sudo pacman -S arm-none-eabi-gcc arm-none-eabi-newlibr<62>zUbuntu/Debian:z; sudo apt install gcc-arm-none-eabi libnewlib-arm-none-eabir<69>zFedora:z; sudo dnf install arm-none-eabi-gcc-cs arm-none-eabi-newlibz1 Install arm-none-eabi-gcc for your distributionz%After installing, run: make -C ShofelzAll payload binaries present!zShofel build failedzBuild failed: N)r:r<>r<>r=rCrVrnrArRr0r rrrrorrS<00> Exception)r<><00> payloads_ok<6F>missing_payloadsrTrUs r<00> build_shofelr<6C>Cs<><00><00><0E>q<EFBFBD>!<21>3<>4<>$8<>$:<3A>!<21>K<EFBFBD><19><1B><1B> <0B>M<EFBFBD><15>9<>:<3A><13><0E>*<2A>+<2B>.<15> <18> <17><16><17>)<29>z<EFBFBD>$<24>V[<5B> \<5C><1D>f<EFBFBD>X<EFBFBD>:<3A>d<EFBFBD>RW<52>X<><06> <1E> <1F> <1F> <19>H<> I<>-A<01>,B<> )<29>K<EFBFBD><1E><1B>?<3F>@<40><1A>,<2C>t<EFBFBD>y<EFBFBD>y<EFBFBD>9I<39>/J<>J<>K<><15><07><15><16><1D><1D><0F>'k<>lr<6C>lx<6C>lx<6C>ky<6B>z<>{<7B><15><07><18>+<2B>,<2C>3<>3<>5<>5<><19>B<EFBFBD>v<EFBFBD>{<7B>{<7B>m<EFBFBD>=<3D><16><1C><1C><0E>F|<7C>}<7D>~<7E><19>/<2F>0<>7<>7<>9<>9<><19>B<EFBFBD>v<EFBFBD>{<7B>{<7B>m<EFBFBD>><3E>&<26>,<2C>,<2C><1E>HC<02>D<02>E<02><19>/<2F>0<>7<>7<>9<>9<><19>B<EFBFBD>v<EFBFBD>{<7B>{<7B>m<EFBFBD>7<EFBFBD>6<EFBFBD><<3C><<3C>.<2E>@{<7B>|<7C>}<7D><19>M<>O<><15><07><15>=<3D>><3E><1C><1D>=<3D>><3E><17> <17>-<2D> .<2E><15>}<7D>}<7D><15>f<EFBFBD>m<EFBFBD>m<EFBFBD>$<24><18><> <14><15><13>n<EFBFBD>Q<EFBFBD>C<EFBFBD>(<28>)<29><14><><15>s%<00>GI<00> I<00>$1I<00>
2026-03-15 20:24:40 +02:00
I8<03> I3<03>3I8c<00><><00>[S5 [R"5S:XGaY[R"S5(a`[ S/SS9nSUR ;a [S5 g[S5 [S 5 [S
5 [S 5 [S 5 g [S5nUR5(a<>UR5H<>nUS- nUS- nUR5(dM$UR5(dM;UR5R!5nUR5R!5nUS:XdMUS:XdM<>[S5 g [S5 [S5 g[R"5S:Xa[S5 [S5 gg ![an[SU35 SnAGN-SnAff=f![a Nzf=f)z'Detect if Jibo is connected in RCM modez3Looking for Jibo in RCM mode (NVIDIA APX device)...rKrzTrz 0955:7740zFound Jibo in RCM mode!zJibo not found in RCM modez Make sure to:z6 1. Hold the RCM button (small button under the base)z! 2. Press the reset/power buttonz5 3. Release after seeing red LED (no boot animation)Fzlsusb failed: Nz/sys/bus/usb/devices<65>idVendor<6F> idProduct<63>0955<35>7740z#Found Jibo in RCM mode! (via sysfs)z=Cannot detect USB devices. Please ensure Jibo is in RCM mode.z(The tool will attempt to connect anyway.rzAWindows USB detection - please ensure Zadig drivers are installedz4Run Zadig and install WinUSB driver for 'APX' device)rCrMrNrgrhrV<00>stdoutr=r?r0r<>rArro<00>iterdir<69> read_text<78>strip)rTrU<00> usb_devices<65>device<63> vendor_file<6C> product_file<6C>vendor<6F>products r<00>detect_jibo_rcmr<6D><00>s<><00><00><0E>D<>E<><0F><EFBFBD><EFBFBD><18>G<EFBFBD>#<23> <11><<3C><<3C><07> <20> <20> 2<>$<24>g<EFBFBD>Y<EFBFBD>t<EFBFBD>D<><06><1E>&<26>-<2D>-<2D>/<2F>!<21>";<3B><<3C><1F>!<21>"><3E>?<3F><1E><EFBFBD>/<2F><19>R<>S<><19>=<3D>><3E><19>Q<>R<> <20>
2026-03-15 20:24:40 +02:00
<11><1E>5<>6<>K<EFBFBD><1A>!<21>!<21>#<23>#<23>)<29>1<>1<>3<>F<EFBFBD>"(<28>:<3A>"5<>K<EFBFBD>#)<29>K<EFBFBD>#7<>L<EFBFBD>"<22>)<29>)<29>+<2B>+<2B> <0C>0C<30>0C<30>0E<30>0E<30>!,<2C>!6<>!6<>!8<>!><3E>!><3E>!@<40><06>".<2E>"8<>"8<>":<3A>"@<40>"@<40>"B<><07>!<21>V<EFBFBD>+<2B><07>6<EFBFBD>0A<30>)<29>*O<>P<>#'<27>4<> <16>U<>V<><12>=<3D>><3E><13> <11><1F><1F> <1A>i<EFBFBD> '<27><15>Y<>Z<><12>I<>J<><13> <10><>?<1D> 2<><1B>n<EFBFBD>Q<EFBFBD>C<EFBFBD>0<>1<>1<><31> 2<><32> <19> <11> <10> <11>sP<00>&F0<00>)7F0<00>"AG<00>6G<00> AG<00>G<00> G<00>&G<00>0
G<03>:G<03>G<03>
G#<03>"G#<03>timeoutc<00><><00>SSKn[SUS35 [S5 UR5nUR5U-
U:aw[5(agURS5 [R
R S5 [R
R5 UR5U-
U:aMw[5 [S 5 g
) z)Wait for Jibo to be connected in RCM moderNz'Waiting for Jibo in RCM mode (timeout: zs)...z5Hold RCM button + press reset/power to enter RCM modeTr<54><00>.zTimeout waiting for JiboF)
<EFBFBD>timerCr<><00>sleep<65>sysr<73><00>write<74>flushr0rA)r<>r<><00>
start_times r<00>wait_for_jibo_rcmr<6D><00>s<><00><00><0F><0E>8<><17> <09><15>G<>H<><0E>F<>G<><15><19><19><1B>J<EFBFBD>
2026-03-15 20:24:40 +02:00
<0E>)<29>)<29>+<2B>
<EFBFBD>
"<22>W<EFBFBD>
,<2C> <1A> <1C> <1C><17> <0C>
<EFBFBD>
<EFBFBD>1<EFBFBD> <0A> <0B>
<EFBFBD>
<EFBFBD><18><18><13><1D> <0B>
<EFBFBD>
<EFBFBD><18><18><1A> <0F>)<29>)<29>+<2B>
<EFBFBD>
"<22>W<EFBFBD>
,<2C>
<EFBFBD>G<EFBFBD><0F>*<2A>+<2B> r<00> dump_pathc <00>n<00>/n[US5nURS5 URS5nUSSnUS:wa[S5 [ U5sSSS5 $[
R "SUSS 5S
n[
R "S US S 5S
n[
R "S US S 5S
nURUS-5 [U5H<>nURU5n [U 5S:a O<>U SSn
U
S:XaM2[
R "SU SS5S
n [
R "SU SS5S
n U SSn U RS5RS5nUR[US-U U X<>-
S-US95 M<> SSS5 U$! SUS-3nN>=f!,(df  U$=f)z(Parse GPT partition table from dump file<6C>rbr
N<>sEFI PARTz0GPT signature not found, trying fdisk parsing...z<Q<>H<00>Prz<I<>T<00>X<00><><00>s<00> r <00>0<00>8zutf-16le<6C><00> partitionr<6E><00>r%r&r'r(r)) <0A>open<65>seek<65>readr?<00>parse_partitions_fdisk<73>struct<63>unpack<63>ranger<65><00>decode<64>rstripr<70>r#)r<><00>
2026-03-15 20:24:40 +02:00
partitions<EFBFBD>f<>
gpt_header<EFBFBD> signature<72>partition_entries_lba<62> num_entries<65>
entry_size<EFBFBD>i<>entry<72> type_guid<69> first_lba<62>last_lba<62>
name_bytesr)s r<00>parse_gpt_partitionsr<73><00>s<><00><00><13>J<EFBFBD> <0A>i<EFBFBD><14> <1E>!<21> <09><06><06>s<EFBFBD> <0B><17>V<EFBFBD>V<EFBFBD>C<EFBFBD>[<5B>
2026-03-15 20:24:40 +02:00
<EFBFBD><1F>r<EFBFBD><01>N<EFBFBD> <09> <14> <0B> #<23> <19>L<> M<>)<29>)<29>4<>
<1F> <1E>"!'<27> <0A> <0A>d<EFBFBD>J<EFBFBD>r<EFBFBD>"<22>4E<34> F<>q<EFBFBD> I<><1D><1C>m<EFBFBD>m<EFBFBD>D<EFBFBD>*<2A>R<EFBFBD><02>*;<3B><<3C>Q<EFBFBD>?<3F> <0B><1B>]<5D>]<5D>4<EFBFBD><1A>B<EFBFBD>r<EFBFBD>):<3A>;<3B>A<EFBFBD>><3E>
<EFBFBD>
<EFBFBD><06><06>$<24>s<EFBFBD>*<2A>+<2B><16>{<7B>#<23>A<EFBFBD><15>F<EFBFBD>F<EFBFBD>:<3A>&<26>E<EFBFBD><12>5<EFBFBD>z<EFBFBD>C<EFBFBD><1F><15><1E>c<EFBFBD>r<EFBFBD>
<EFBFBD>I<EFBFBD><18>L<EFBFBD>(<28><18><1E> <0A> <0A>d<EFBFBD>E<EFBFBD>"<22>R<EFBFBD>L<EFBFBD>9<>!<21><<3C>I<EFBFBD><1D>}<7D>}<7D>T<EFBFBD>5<EFBFBD><12>B<EFBFBD><<3C>8<><11>;<3B>H<EFBFBD><1F>r<EFBFBD>#<23><1D>J<EFBFBD> )<29>!<21>(<28>(<28><1A>4<>;<3B>;<3B>F<EFBFBD>C<><04> <17> <1D> <1D>m<EFBFBD><18>1<EFBFBD>u<EFBFBD>&<26>#<23>%<25>1<>A<EFBFBD>5<><19> <0E> <0F>3$<24>1
<1F>r <16><15><> )<29>"<22>1<EFBFBD>Q<EFBFBD>3<EFBFBD>%<25>(<28><04><>_
<1F> <1E>r <16><15>s+<00>AF%<03>C'F%<03> F<04>$(F%<03>
F"<07> F%<03>%
F4c <00>n<00>/n[SS[U5/SSS9nURRS5H<>nURU;dMUR S5(aM-UR5n[ U5S:<3A>dMNUS n[S
RS U55=(d S 5n[US 5n[US5nUR[UUUX<>-
S -SU3S95 M<> U$![[4a M<>f=f![an [SU 35 Sn A U$Sn A ff=f)z-Parse partitions using fdisk (Linux fallback)r{z-lTF<54>rFrGr/<00>Disk<73>rr!c3<00>R# <00>UHoR5(dMUv<00> M g7frm)<01>isdigit)rp<00>cs rrr<00>)parse_partitions_fdisk.<locals>.<genexpr>&s<00><00><00>.S<>)<29>Q<EFBFBD>y<EFBFBD>y<EFBFBD>{<7B>q<EFBFBD>q<EFBFBD>)<29>s<00>'<01> '<01>0r<30><00>r<>r<>zfdisk parsing failed: N)rVr-r<><00>splitr)<00>
2026-03-15 20:24:40 +02:00
startswithr<EFBFBD>r+rRr<>r#<00>
ValueError<EFBFBD>
IndexErrorr<EFBFBD>rA)
r<EFBFBD>r<>rT<00>line<6E>parts<74> part_name<6D>part_num<75>start<72>endrUs
rr<>r<>s8<00><00><13>J<EFBFBD> 2<><1C> <14>d<EFBFBD>C<EFBFBD> <09>N<EFBFBD> +<2B><1F><17>
2026-03-15 20:24:40 +02:00
<EFBFBD><06><1B>M<EFBFBD>M<EFBFBD>'<27>'<27><04>-<2D>D<EFBFBD><18>~<7E>~<7E><14>%<25>d<EFBFBD>o<EFBFBD>o<EFBFBD>f<EFBFBD>.E<>.E<><1C>
<EFBFBD>
<EFBFBD> <0C><05><16>u<EFBFBD>:<3A><11>?<3F>!<21>$)<29>!<21>H<EFBFBD> <09>#&<26>r<EFBFBD>w<EFBFBD>w<EFBFBD>.S<>)<29>.S<>'S<>'Z<>WZ<57>#[<5B><08> #<23>E<EFBFBD>!<21>H<EFBFBD> <0A><05>!<21>%<25><01>(<28>m<EFBFBD><03>"<22>)<29>)<29>-<2D>#+<2B>).<2E>'*<2A>),<2C><1B>q<EFBFBD><1F>#,<2C>X<EFBFBD>J<EFBFBD>!7<> +<1A><1B>.<2E>4 <16><15><> '<27>
<EFBFBD>3<>!<21> <20>!<21><> <15>2<><13>,<2C>Q<EFBFBD>C<EFBFBD>0<>1<>1<> <15><15><>2<>sI<00>AD<00> D<00>#D<00>A/C:<02>4D<00>:D<05>
D<00> D<05>D<00>
D4<03>D/<03>/D4r<>c<00>*<00>UH@nURS:XdMUR[-S- nSUs=:a S:dM:Us $ MB UHGnUR[-S- nSUs=:aS:dM(O M,[SURS35 Us $ g )
z-Find the /var partition (partition 5, ~500MB)<29><00>i<>iXi<>i&zUsing partition z as var (size matches)N)r%r(<00>EMMC_SECTOR_SIZEr?)r<><00>part<72>size_mbs r<00>find_var_partitionr ;s<><00><00><1B><04> <0F>;<3B>;<3B>!<21> <1B><1B>(<28>(<28>+;<3B>;<3B> <0B>L<>G<EFBFBD><12>W<EFBFBD>"<22>s<EFBFBD>"<22><1B> <0B>#<23> <1B><1B><04><17>$<24>$<24>'7<>7<>K<EFBFBD>H<><07> <0E><17> <1E>3<EFBFBD> <1E> <1E> <19>,<2C>T<EFBFBD>[<5B>[<5B>M<EFBFBD>9O<39>P<> Q<><17>K<EFBFBD> <1B> rr<><00> output_pathc<00><><00>[SURSURS35 [US5nUR UR
2026-03-15 20:24:40 +02:00
[ -5 URUR[ -5nSSS5 [US5nURW5 SSS5 [SU35 g!,(df  NC=f!,(df  N.=f![an[S U35 SnAg
SnAff=f) z!Extract a partition from the dumpzExtracting partition r|<00> sectors)...r<>N<>wbzPartition extracted to TzExtraction failed: F) rCr%r(r<>r<>r&r r<>r<>r=r<>rA)r<>r<>r <00>src<72>data<74>dstrUs r<00>extract_partitionrSs<><00><00><0E>&<26>y<EFBFBD>'7<>'7<>&8<><02>9<EFBFBD>;Q<>;Q<>:R<>R^<5E>_<>`<60> <15> <11>)<29>T<EFBFBD> "<22>c<EFBFBD> <0F>H<EFBFBD>H<EFBFBD>Y<EFBFBD>+<2B>+<2B>.><3E>><3E> ?<3F><16>8<EFBFBD>8<EFBFBD>I<EFBFBD>2<>2<>5E<35>E<>F<>D<EFBFBD>#<23><12>+<2B>t<EFBFBD> $<24><03> <0F>I<EFBFBD>I<EFBFBD>d<EFBFBD>O<EFBFBD>%<25> <16>/<2F> <0B>}<7D>=<3D>><3E><13>#<23> "<22><>%<25> $<24><> <15><15><13>)<29>!<21><13>-<2D>.<2E><14><><15>sG<00> C<00>AB6<03>9C<00> C<03>C<00>6
2026-03-15 20:24:40 +02:00
C<07>C<00>
C<07>C<00>
C:<03>"C5<03>5C:<03>partition_pathc <00><>^ <0A>[S5 S[S[4Sjm [US5n[ UR 55n/SQnUGH'upE[ U5RU5nUS:XaM([SUS US
S 35 U[U5-n[U5[U5::a&[U5nUS U[U5-
--n X<>XfU-&Ol[U5[U5-
n
X'Xz-n [U 5U
:wd[U 4S jU 55(d[S5 SSS5 g[U5nXRXfU-&URS5 URU5 [S5 SSS5 g [S5 SSS5 g!,(df  g=f![an [SU 35 Sn A gSn A ff=f)z<>
2026-03-15 20:24:40 +02:00
Modify mode.json directly in the partition image by searching for the pattern.
This works on both Linux and Windows without mounting.
z7Searching for mode.json in partition (raw, no mount)...<2E>brIc<00> <00>US;$)N)r<00> <00>
<00> r<>r)rs r<00>_is_safe_pad_byte<74>2modify_mode_json_direct.<locals>._is_safe_pad_bytens<00><00><10>2<>2<>2rzr+b))s{"mode":"normal"}<7D>{"mode":"int-developer"})s{"mode": "normal"}s{"mode": "int-developer"})s{ "mode": "normal" }r<00><><EFBFBD><EFBFBD><EFBFBD>zFound mode.json JSON at offset z (0x<30>xr}<00> c3<00>4># <00>UH nT"U5v<00> M g7frmr)rprrs <20>rrr<00>*modify_mode_json_direct.<locals>.<genexpr><3E>s<00><><00><00>9b<39>Xa<58>ST<53>:K<>A<EFBFBD>:N<>:N<>Xa<58>s<00>zERaw edit would require growing the file and no safe padding was foundNFrz8mode.json modified successfully (raw in-place overwrite)TzLmode.json pattern not found (raw). Will try filesystem mount if available...zDirect modification failed: )rCr+<00>boolr<6C><00> bytearrayr<79><00>bytes<65>findr<64>rtr?r<>r<>r=r<>rA)rr<>r<00> json_patterns<6E>old_json<6F>new_json<6F>offset<65>
end_offset<EFBFBD>
region_len<EFBFBD> replacement<6E>extra<72> followingrUrs @r<00>modify_mode_json_directr1gs<><00><><00>
<0F>H<>I<>3<>S<EFBFBD>3<>T<EFBFBD>3<>-<15> <11>.<2E>%<25> (<28>A<EFBFBD><1C>Q<EFBFBD>V<EFBFBD>V<EFBFBD>X<EFBFBD>&<26>D<EFBFBD><0E>M<EFBFBD> '4<>"<22><08><1E>t<EFBFBD><1B>)<29>)<29>(<28>3<><06><19>R<EFBFBD><<3C><1C><1A><<3C>V<EFBFBD>H<EFBFBD>D<EFBFBD><16>PQ<50>
<EFBFBD>RS<EFBFBD>T<>U<>#<23>c<EFBFBD>(<28>m<EFBFBD>3<>
<EFBFBD><16>x<EFBFBD>=<3D>C<EFBFBD><08>M<EFBFBD>1<>!$<24>X<EFBFBD><1D>J<EFBFBD>"*<2A>T<EFBFBD>Z<EFBFBD>#<23>h<EFBFBD>-<2D>5O<35>-P<>"P<>K<EFBFBD>7B<37><16><1A> 3<>4<><1F><08>M<EFBFBD>C<EFBFBD><08>M<EFBFBD>9<>E<EFBFBD> $<24>
<EFBFBD>0B<EFBFBD> C<>I<EFBFBD><1A>9<EFBFBD>~<7E><15>.<2E>c<EFBFBD>9b<39>Xa<58>9b<39>6b<36>6b<36>%<25>&m<>n<>$<24>9)<29> (<28><"%<25>X<EFBFBD><1D>J<EFBFBD>7?<3F><16><1A> 3<>4<><11><06><06>q<EFBFBD> <09><11><07><07><04> <0A><1D>X<>Y<><1B>K)<29> (<28>'4<>8 <1A>h<> i<><18>Q)<29> (<28> (<28><>T <15><15><13>2<>1<EFBFBD>#<23>6<>7<><14><><15>sM<00> F<00>C9F <03>$F<00>-?F <03>,F<00>5F <03>F<00>
F<07>F<00>F<00>
F?<03>'F:<03>:F?c <00><00>[R"5S:wa [S5 g[S- nUR SSS9 [ SUS35 [ S S
S [U5[U5/SS 9 US - S- nUR5(d0US- US- S - S- 4HnUR5(dMUn O UR5(Ga<>[ SU35 SnSnSn[ SSS[U5/SSSS9nURR5R5n[U5S:XaUSUSUSpen[ S[U5/SSSS9Rn [S- RU 5 [ S[U5/SSSS9Rn
[R "U
5n [ SW R'SS535 S U S'[S!- n [#U S"5n [R("X<>5 SSS5 [ S#[U 5[U5/SS 9 Ub[ S$U[U5/SSS%9 UbUb[ S&US'U3[U5/SSS%9 [S(- R[R*"U 55 [-S)5 OE[S*5 [ S+5 [ S,S-[U5/SS 9 [ S.[U5/SSS%9 g[ S.[U5/SSS%9 g![a GN<>f=f![a GN<>f=f![aC [#US5n [R$"U 5n SSS5 GM<>!,(df  GN<>=ff=f!,(df  GNs=f![a N<>f=f! g=f! g=f![a6n[S/U35 SnA[ S.[U5/SSS%9 g! g=fSnAff=f![ S.[U5/SSS%9 f! f=f=f)0z7Modify mode.json by mounting the partition (Linux only)rKz+Filesystem mounting only supported on LinuxF<78>jibo_var_mountT<74><02>parents<74>exist_okzMounting partition at <20>...<2E>mount<6E>-o<>loop)rH<00>jiboz mode.json<6F>etczFound mode.json at N<>statz-cz%a %u %g)rHrFrG<00>rr<>r<><00>cat<61>mode.json.original<61>rzCurrent mode: <20>moder<65><00> int-developer<65>mode_temp.json<6F>w<>cp<63>chmod)rHrG<00>chown<77>:<3A>mode.json.modifiedz%mode.json modified to 'int-developer'z(mode.json not found in mounted partitionzListing mount contents:<3A>lsz-la<6C>umountzMount/modify failed: )rMrNrA<00>WORK_DIR<49>mkdirrCrVr-ror<>r<>r<>r<>r<><00>
write_text<EFBFBD>json<6F>loadsr<73><00>load<61>get<65>dump<6D>dumpsr=)r<00> mount_point<6E>mode_json_path<74>alt_path<74>perm<72>uid<69>gid<69>stat_resr<00> backup_text<78> mode_text<78>contentr<74><00> temp_jsonrUs r<00>modify_partition_mountedra<00>s@<00><00><0F><EFBFBD><EFBFBD><18>G<EFBFBD>#<23><13>A<>B<><14><1A>-<2D>-<2D>K<EFBFBD><0F><15><15>d<EFBFBD>T<EFBFBD><15>2<>m<11><12>+<2B>K<EFBFBD>=<3D><03><<3C>=<3D><13> <14>d<EFBFBD>F<EFBFBD>C<EFBFBD><0E>$7<><13>[<5B>9I<39> J<><15>
<EFBFBD> %<25>v<EFBFBD>-<2D> <0B>;<3B><0E><1D>$<24>$<24>&<26>&<26><1C>k<EFBFBD>)<29><1B>e<EFBFBD>#<23>f<EFBFBD>,<2C>{<7B>:<3A><0E><08><1C>?<3F>?<3F>$<24>$<24>%-<2D>N<EFBFBD><19> <0E> <1A> <20> <20> "<22> "<22> <16>,<2C>^<5E>,<<3C>=<3D> ><3E><18>D<EFBFBD><16>C<EFBFBD><16>C<EFBFBD> <15>&<26><1B>T<EFBFBD>:<3A>s<EFBFBD>><3E>/B<>C<><1D>#'<27><1E> <12><08> !<21><0F><0F>-<2D>-<2D>/<2F>5<>5<>7<><05><16>u<EFBFBD>:<3A><11>?<3F>%*<2A>1<EFBFBD>X<EFBFBD>u<EFBFBD>Q<EFBFBD>x<EFBFBD><15>q<EFBFBD><18>s<EFBFBD>D<EFBFBD>
<15>)<29><1A>C<EFBFBD><0E>/<2F>0<><1D>#'<27><1E> <12>
<19>&<26> <1C> <1A>0<>0<><<3C><<3C>[<5B>I<>
+<2B>'<27><1A>C<EFBFBD><0E>/<2F>0<><1D>#'<27><1E> <12>
<19>&<26> <1A> <1F>*<2A>*<2A>Y<EFBFBD>/<2F><07> <17><1E><07> <0B> <0B>F<EFBFBD>I<EFBFBD>(F<>'G<>H<> I<>.<2E>G<EFBFBD>F<EFBFBD>O<EFBFBD>!<21>#3<>3<>I<EFBFBD><15>i<EFBFBD><13>%<25><11><14> <09> <09>'<27>%<25>&<26> <18><14>s<EFBFBD>9<EFBFBD>~<7E>s<EFBFBD>><3E>/B<>C<>$<24> O<><14><1F><1B>W<EFBFBD>d<EFBFBD>C<EFBFBD><0E>,?<3F>@<40>t<EFBFBD>SX<53>Y<><12><EFBFBD>3<EFBFBD>?<3F><1B>W<EFBFBD><13><05>Q<EFBFBD>s<EFBFBD>e<EFBFBD>n<EFBFBD>c<EFBFBD>.<2E>6I<36>J<>QU<51>]b<>c<> <15><19>0<>0<><<3C><<3C>T<EFBFBD>Z<EFBFBD>Z<EFBFBD><07>=P<>Q<> <1A>A<> B<> <18>B<> D<> <16>0<> 1<> <17><14>u<EFBFBD>c<EFBFBD>+<2B>&6<>7<>d<EFBFBD> C<><18> <11> <17><18>3<EFBFBD>{<7B>#3<>4<>4<EFBFBD>u<EFBFBD> M<><14> <11> <17><18>3<EFBFBD>{<7B>#3<>4<>4<EFBFBD>u<EFBFBD> M<><4D>K<1D> <15><14> <15><><1D> <15><14> <15><><1D> +<2B><19>.<2E>#<23>.<2E>!<21>"<22>i<EFBFBD>i<EFBFBD><01>l<EFBFBD>G<EFBFBD>/<2F>.<2E>.<2E>.<2E><> +<2B><>&<26>%<25><><1D> <15><14> <15><>* <11> <10><> <11> <10><> <15><15><13>+<2B>A<EFBFBD>3<EFBFBD>/<2F>0<><14> <11> <17><18>3<EFBFBD>{<7B>#3<>4<>4<EFBFBD>u<EFBFBD> M<><4D> <11> <10><><15><>  <11> <17><18>3<EFBFBD>{<7B>#3<>4<>4<EFBFBD>u<EFBFBD> M<><4D> <11> <10>s)<00>A3N#<00>70N#<00>(AL<00>9L<00>7L#<00>88N#<00>0M3<03>A#N#<00>+,N<00>8N#<00>N<00>*N<00>
L<03> N#<00>L<03>N#<00>
L <03>N#<00>L <03> N#<00>#M0<03>9M<05>M0<03>N#<00>
M, <09>&M0<03>)N#<00>,M0<03>0N#<00>3
N<07>=N#<00>
N<03>N#<00>N<03>N#<00>N<03>N <03>#
O#<03>-O<03>;O&<00>O<00>O<03>O#<03>#O&<00>&P<03>(O?<04>>P<03>?P<07>Pc<00>X<00>SH$n[R"U5nU(dM"Us $ g)z-Find a usable debugfs executable (e2fsprogs).)r<>r<>N)rgrh)<02> candidate<74>paths r<00>_find_debugfs_executableres)<00><00>/<2F> <09><15>|<7C>|<7C>I<EFBFBD>&<26><04> <0F>4<EFBFBD><17>K<EFBFBD>0<> rc <00><><00>[5nU(dg[S5 /SQnSnSnUHRn[USSU3[U5/SSS9nUR(a"S UR;aUnURn OMRMT U(aUc [ S
5 g[S - RU5 [R"U5nS US'[R"U5n[S- n U RU5 [USSSU3[U5/SSS9 [USSS[U 5SU3[U5/SS9 [S- RU5 [S5 g![
a GMHf=f![
a N<>f=f![
a [ S 5 gf=f![
an
[ SU
35 Sn
A
gSn
A
ff=f![
a Nzf=f)z<>Modify mode.json using debugfs (e2fsprogs) without mounting.
This can work on Windows if the user has MSYS2 e2fsprogs installed (debugfs.exe on PATH).
Fz3Attempting mode.json edit via debugfs (no mount)...)z/jibo/mode.jsonz
/mode.jsonz/etc/jibo/mode.jsonNz-Rzcat Tr<54>zFile not foundz3debugfs could not locate mode.json inside the imager@z5mode.json content is not valid JSON; refusing to editrCrBrDz-wzrm )rGrFzwrite r9rzdebugfs write failed: rJz/mode.json modified to 'int-developer' (debugfs)) rerCrVr-r<>r<>r?rMrOrPrQrUr=) rr<><00>candidate_paths<68> existing_path<74> original_textrq<00>resr_<00>new_textr`rUs r<00>modify_partition_debugfsrl#s<00><00>
'<27>(<28>G<EFBFBD> <12><14><0E>D<>E<><06>O<EFBFBD>$(<28>M<EFBFBD>#'<27>M<EFBFBD> <1C><01> <15><1D><18>$<24>$<24>q<EFBFBD>c<EFBFBD>
<EFBFBD>C<EFBFBD><0E>,?<3F>@<40>#<23><1A><0E>C<EFBFBD> <13>z<EFBFBD>z<EFBFBD>.<2E>c<EFBFBD>j<EFBFBD>j<EFBFBD>@<40> !<21> <0A> #<23>
<EFBFBD>
<EFBFBD> <0A><15>A<01>z<EFBFBD><1D> <19>M<EFBFBD>1<><15>K<>L<><14> <0A> <11>(<28> (<28>4<>4<>]<5D>C<><15><16>*<2A>*<2A>]<5D>+<2B><07>
&<26>G<EFBFBD>F<EFBFBD>O<EFBFBD><13>z<EFBFBD>z<EFBFBD>'<27>"<22>H<EFBFBD><18>+<2B>+<2B>I<EFBFBD> <0A><18><18><18>"<22>
<15><13>W<EFBFBD>d<EFBFBD>D<EFBFBD>C<EFBFBD> <0A><EFBFBD>*?<3F><13>^<5E>AT<41>U<>]b<>sw<73>x<><13>W<EFBFBD>d<EFBFBD>D<EFBFBD>F<EFBFBD>3<EFBFBD>y<EFBFBD>><3E>2B<32>!<21>M<EFBFBD>?<3F>*S<>UX<55>Yg<59>Uh<55>i<>z~<7E><>
 <0A> <11>(<28> (<28>4<>4<>X<EFBFBD>><3E><12>C<>D<> <0F><>S<19> <15> <14> <15><> <15> <0A> <0C> <0A><>
<15><15><15>M<>N<><14><15><> <15><15><15>.<2E>q<EFBFBD>c<EFBFBD>2<>3<><14><><15><> <15> <0A> <0C> <0A>sa<00>A
E"<02>E4<00>.F<00>:AF<00>>G<00>"
E1<05>0E1<05>4
F<03>F<03>F<03>F<03>
G<03>)F<<03><G<03>
G<03>Gc<00><><00>[SSS5 [R"5S:Xa[U5(ag[ S5 [ U5(ag[ U5(ag[S5 g) z1Modify the var partition to enable developer moder<65>r<>zModifying var partitionrKTz;Mount-based edit failed; falling back to raw in-place patchzCould not modify partitionF)r:rMrNrar?rlr1rA)rs r<00>modify_var_partitionrnpsc<00><00><0E>q<EFBFBD>!<21>.<2E>/<2F><10><EFBFBD><EFBFBD><18>G<EFBFBD>#<23> #<23>N<EFBFBD> 3<> 3<><17><15>S<>T<> <20><0E>/<2F>/<2F><13><1F>~<7E>.<2E>.<2E><13><0F>,<2C>-<2D> rr&<00> num_sectorsc<00><><00>[5nUR5(d [S5 g[U5SSUS3SUS3[U5/n[R
"5S:XaS/U-n[ R"U[SS 9 UR5$![ Ran[S
U35 S nAgS nAff=f) z.Read a range of sectors from eMMC into a file.<2E>.shofel2_t124 not found. Please build it first.F<> EMMC_READ<41>0xr rKrHT<>rErGzEMMC_READ failed: N<>
<EFBFBD>get_shofel_pathrorAr-rMrNrOrPrnrQ)r r&ro<00>shofelrDrUs r<00>emmc_read_to_filerx<00>s<><00><00> <1C> <1E>F<EFBFBD> <11>=<3D>=<3D>?<3F>?<3F><13>D<>E<><14><15> <0F><06>K<EFBFBD> <17><10><1C>a<EFBFBD> <20> !<21><10><1B>Q<EFBFBD><0F> <20> <0F> <0B> <1C> 
<EFBFBD><03> <14>?<3F>?<3F> <1C><07> '<27><19>(<28>S<EFBFBD>.<2E>C<EFBFBD><12><0E><0E>s<EFBFBD>
<EFBFBD>$<24>7<><1A>!<21>!<21>#<23>#<23><> <15> (<28> (<28><15><13>(<28><11><03>,<2C>-<2D><14><><15>s<00>A)B<00>C<03>+B><03>>C<03>
input_pathc<00>d<00>[5nUR5(d [S5 g[U5SSUS3[U5/n[R
"5S:XaS/U-n[ R"U[SS 9 g![ Ran[S
U35 S nAgS nAff=f) z0Write a file to eMMC starting at a given sector.rqF<>
EMMC_WRITErsr rKrHTrtzEMMC_WRITE failed: Nru)ryr&rwrDrUs r<00>emmc_write_filer|<00>s<><00><00> <1C> <1E>F<EFBFBD> <11>=<3D>=<3D>?<3F>?<3F><13>D<>E<><14> <15> <0F><06>K<EFBFBD> <18><10><1C>a<EFBFBD> <20> !<21> <0F>
<EFBFBD>O<EFBFBD> 
<EFBFBD><03> <14>?<3F>?<3F> <1C><07> '<27><19>(<28>S<EFBFBD>.<2E>C<EFBFBD><12><0E><0E>s<EFBFBD>
<EFBFBD>$<24>7<><13><> <15> (<28> (<28><15><13>)<29>!<21><13>-<2D>.<2E><14><><15>s<00>AB<00>B/<03>B*<03>*B/<03> original_path<74> modified_path<74> sector_size<7A>scan_chunk_bytesc<00><00>UR5RUR5R:wa [S5eUR5RnXB-S:wa [S5e/n[X#U-U-5n[ US5n[ US5nSnUR U5n UR U5n
U (dU
(dO<>X<EFBFBD>:XaU[ U 5U-- nMJ[[ U 5[ U
55U-n [U 5H7n X<>U-U S-U-n X<>U-U S-U-nX<>:wdM$URX<>-5 M9 X<>- nM<>SSS5 SSS5 U(dS/4$UR5 /nUS=nnUSSH-nUUS-:XaUnMURUUU-
S-45 U=nnM/ URUUU-
S-45 [ U5U4$!,(df  N<>=f!,(df  N<>=f)zZReturn (changed_sector_count, ranges) where ranges are (start_sector_offset, num_sectors).z1Files differ in size; cannot compute sector diffsrz5Partition image size is not a multiple of sector sizer<65>r<>N) r=<00>st_sizer<65><00>maxr<78>r<>r<><00>minr<6E>r<><00>sort)r}r~rr<><00> total_bytes<65>changed_sectors<72>f1<66>f2<66> base_sector<6F>b1<62>b2<62>sectors_in_chunkr<6B><00>s1<73>s2<73>rangesr<00>prev<65>ss r<00>compute_changed_sector_rangesr<73><00>s<00><00><15><19><19><1B>#<23>#<23>}<7D>'9<>'9<>';<3B>'C<>'C<>C<><18>L<>M<>M<><1F>$<24>$<24>&<26>.<2E>.<2E>K<EFBFBD><12> <20>A<EFBFBD>%<25><18>P<>Q<>Q<>!#<23>O<EFBFBD><1A>;<3B>[<5B>)H<>K<EFBFBD>(W<>X<><14> <0A>m<EFBFBD>T<EFBFBD> "<22>b<EFBFBD>$<24>}<7D>d<EFBFBD>*C<>r<EFBFBD><17> <0B><12><13><17><17>)<29>*<2A>B<EFBFBD><13><17><17>)<29>*<2A>B<EFBFBD><15>b<EFBFBD><15><11>x<EFBFBD><1B>s<EFBFBD>2<EFBFBD>w<EFBFBD>+<2B>5<>5<> <0B><18> #<23>3<EFBFBD>r<EFBFBD>7<EFBFBD>C<EFBFBD><02>G<EFBFBD>4<> <0B>C<> <1C><1A>+<2B>,<2C><01><17>K<EFBFBD><0F><11>Q<EFBFBD><15>+<2B>(=<3D>><3E><02><17>K<EFBFBD><0F><11>Q<EFBFBD><15>+<2B>(=<3D>><3E><02><15>8<EFBFBD>#<23>*<2A>*<2A>;<3B>?<3F>;<3B> -<2D>
<18> +<2B>K<EFBFBD>!<13>+D<01> "<22>( <1B><10>"<22>u<EFBFBD> <0C><13><18><18><1A>$&<26>F<EFBFBD>"<22>1<EFBFBD>%<25>%<25>E<EFBFBD>D<EFBFBD> <1C>Q<EFBFBD>R<EFBFBD> <20><01> <0C><04>q<EFBFBD><08>=<3D><14>D<EFBFBD> <14><0E> <0A> <0A>u<EFBFBD>d<EFBFBD>U<EFBFBD>l<EFBFBD>Q<EFBFBD>.<2E>/<2F>0<><18><18><05><04> !<21>  <0B>M<EFBFBD>M<EFBFBD>5<EFBFBD>$<24><15>,<2C><11>*<2A>+<2B>,<2C> <0E><EFBFBD> <1F><16> '<27>'<27>C+D<01>*C<><43> "<22> "<22>s+<00> G6<03>BG%<05>8G%<05>G6<03>%
G3 <09>/G6<03>6
H<07>base_start_sector<6F>
max_ranges<EFBFBD>max_changed_sectorsc<00><><00>[X5upVUS:Xa [ S5 g[ U5U:<3A>dXT:<3A>a&[S[ U5SUS 35 [X5$[ S
US [ U5S 35 [n[US 5n [USS9Hjun
up<>[SU
SS3- n U RX<>-5 U RX<>-5nU RU5 [X<>U -5(aMb SSS5 g SSS5 g![a$n[SUS35 [X5sSnA$SnAff=f!,(df  g=f)z<Write only the changed sectors between two partition images.zPatch write unavailable (z'); falling back to full partition writeNrz7No changes detected in /var partition; nothing to writeTz)Too many changes for patch write (ranges=<3D>
, sectors=z); using full /var writezWriting patch: z sectors across z rangesr<73>r<>)r<00>
var_patch_<EFBFBD>03dz.binF)r<>r<>r?<00>write_partition_to_emmcr=r<>rCr r<><00> enumeraterMr<>r<><00> write_bytesr|)r}r~r<>r<>r<><00> changed_countr<74>rUrr<00>idx<64> start_off<66>count<6E>
patch_pathr<EFBFBD>s r<00>write_partition_patch_to_emmcr<63><00>sX<00><00>I<01> =<3D>m<EFBFBD> [<5B><1D> <0A>
<15><01><19><15>O<>P<><13>
<EFBFBD>6<EFBFBD>{<7B>Z<EFBFBD><1F>=<3D>#F<><15>A<>#<23>f<EFBFBD>+<2B><1D>j<EFBFBD>Yf<59>Xg<58>g<67>A<02> B<02>&<26>}<7D>H<>H<><0E><1F><1D><0F>/?<3F><03>F<EFBFBD> <0B>}<7D>G<EFBFBD>T<>U<>"<22>K<EFBFBD> <0A>m<EFBFBD>T<EFBFBD> "<22>c<EFBFBD>'0<><16>q<EFBFBD>'A<> #<23>C<EFBFBD>#<23>)<29>!<21>j<EFBFBD><13>S<EFBFBD> <09><14>$><3E>><3E>J<EFBFBD> <0F>H<EFBFBD>H<EFBFBD>Y<EFBFBD>,<2C> -<2D><19>h<EFBFBD>h<EFBFBD>u<EFBFBD>2<>3<>G<EFBFBD> <16> "<22> "<22>7<EFBFBD> +<2B>"<22>:<3A>9<EFBFBD>/L<>M<>M<><1C>
#<23> "<22>'A<>
#<23> <10><>/ <15>I<01><15>1<>!<21><13>4[<5B>\<5C>]<5D>&<26>}<7D>H<>H<><48>I<01><>
#<23> "<22> <10>s6<00> D
<00>A)D;<03>5D;<03>?D;<03>
D8<03>D3<03>-D8<03>3D8<03>;
E c<00>X<00>[R"5S:Xa [S- $[S- $)z'Get the path to shofel2_t124 executablerr<>r<>)rMrNrnrrrrvrvs(<00><00><0F><EFBFBD><EFBFBD><18>I<EFBFBD>%<25><19>.<2E>.<2E>.<2E> <15><0E> &<26>&rc<00><><00>[SSS5 [5nUR5(d [S5 g[ SUSUS-S - S - S - S
S 35 [ S 5 [ S 5 [ U5SSUS3SUS3[ U5/n[R"5S:XaS/U-n[R"U[SS9 UR5(a1UR5RS- n[SUSUSS35 g[S5 g![Ran[SU35 SnAgSnAf[ a [ S5 gf=f)zDump the Jibo eMMC to a filer<65>r<>zDumping Jibo eMMCrqFzDumping z
2026-03-15 20:24:40 +02:00
sectors (r
i<00>.1fz GB)...z:This will take approximately 2-4 hours. Please be patient.<2E>+DO NOT disconnect Jibo during this process!rrrsr rKrHTrti@zeMMC dump complete: r|z.2fz GB)zDump file not createdzeMMC dump failed: NzDump interrupted by user)r:rvrorArCr?r-rMrNrOrPrnr=r<>r=rQ<00>KeyboardInterrupt)r r&rorwrD<00>size_gbrUs r<00> dump_emmcr<63>sc<00><00><0E>q<EFBFBD>!<21>(<28>)<29> <1C> <1E>F<EFBFBD> <11>=<3D>=<3D>?<3F>?<3F><13>D<>E<><14><0E><18>+<2B><1D>j<EFBFBD><1B>s<EFBFBD>1B<31>T<EFBFBD>1I<31>D<EFBFBD>1P<31>SW<53>1W<31>X[<5B>0\<5C>\c<>d<>e<><0E>K<>L<><11>?<3F>@<40><15> <0F><06>K<EFBFBD> <17><10><1C>a<EFBFBD> <20> !<21><10><1B>Q<EFBFBD><0F> <20> <0F> <0B> <1C> 
2026-03-15 20:24:40 +02:00
<EFBFBD><03> <14>?<3F>?<3F> <1C><07> '<27><19>(<28>S<EFBFBD>.<2E>C<EFBFBD><12><0E><0E>s<EFBFBD>
<EFBFBD>$<24>7<> <16> <1D> <1D> <1F> <1F>!<21>&<26>&<26>(<28>0<>0<>4F<34>G<>G<EFBFBD> <19>0<><1B> <0A>R<EFBFBD><07><03>}<7D>D<EFBFBD>Q<> R<><17> <17>/<2F> 0<><18><> <15> (<28> (<28><15><13>(<28><11><03>,<2C>-<2D><14><> <1C><15><15>0<>1<><14><15>s%<00>/BD<00> D<00>E<03>/E<03>E<03>Ec<00><><00>[SSS5 [5nUR5(d [S5 g[ SUSS35 [ S 5 [ U5S
S US3[ U5/n[R"5S :XaS /U-n[R"U[SS9 [S5 g![Ran[SU35 SnAgSnAff=f)z'Write a partition back to the Jibo eMMCrr<>z"Writing modified partition to Jibozshofel2_t124 not foundFzWriting to sector 0xr r7r<>r{rsrKrHTrtzPartition written successfully!zWrite failed: N)r:rvrorArCr?r-rMrNrOrPrnr=rQ)rr&rwrDrUs rr<>r<>;s<><00><00><0E>q<EFBFBD>!<21>9<>:<3A> <1C> <1E>F<EFBFBD> <11>=<3D>=<3D>?<3F>?<3F><13>,<2C>-<2D><14><0E>%<25>l<EFBFBD>1<EFBFBD>%5<>S<EFBFBD>9<>:<3A><11>?<3F>@<40><15> <0F><06>K<EFBFBD> <18><10><1C>a<EFBFBD> <20> !<21> <0F><0E> <1F> 
2026-03-15 20:24:40 +02:00
<EFBFBD><03> <14>?<3F>?<3F> <1C><07> '<27><19>(<28>S<EFBFBD>.<2E>C<EFBFBD><12><0E><0E>s<EFBFBD>
<EFBFBD>$<24>7<><15>7<>8<><13><> <15> (<28> (<28><15><13>n<EFBFBD>Q<EFBFBD>C<EFBFBD>(<28>)<29><14><><15>s<00>A B6<00>6C"<03>
C<03>C"c<00>2<00>[SSS5 [5n[S- n[S5 [ U5SSUS3SUS3[ U5/n[
R "5S:XaS /U-n[R"U[S
S 9 [US 5n[R"UR55R5nS S S 5 [US 5n[R"UR55R5nS S S 5 WW:Xa[SU35 g
[!S5 [#SU35 [#SU35 g!,(df  N<>=f!,(df  N\=f![$an [!SU 35 S n A gS n A ff=f)z5Verify the write by reading back and comparing hashesr<73>zVerifying writezverify_partition.binz*Reading back partition for verification...rrrsr rKrHTrtr<>NzVerification passed! Hash: z)Verification FAILED - hashes don't match!z Original: z Readback: FzVerification failed: )r:rvrMrCr-rMrNrOrPrnr<><00>hashlib<69>md5r<35><00> hexdigestr=rAr0r<>)
rr&rorw<00> verify_pathrDr<><00> original_hash<73> verify_hashrUs
r<00> verify_writer<65>\sk<00><00><0E>q<EFBFBD>!<21>&<26>'<27> <1C> <1E>F<EFBFBD><1A>3<>3<>K<EFBFBD><0E>;<3B><<3C> <15> <0F><06>K<EFBFBD> <17><10><1C>a<EFBFBD> <20> !<21><10><1B>Q<EFBFBD><0F> <20> <0F> <0B> <1C> 
2026-03-15 20:24:40 +02:00
<EFBFBD><03> <14>?<3F>?<3F> <1C><07> '<27><19>(<28>S<EFBFBD>.<2E>C<EFBFBD><12><0E><0E>s<EFBFBD>
<EFBFBD>$<24>7<><12>.<2E>$<24> '<27>1<EFBFBD>#<23>K<EFBFBD>K<EFBFBD><01><06><06><08>1<>;<3B>;<3B>=<3D>M<EFBFBD>(<28><12>+<2B>t<EFBFBD> $<24><01>!<21>+<2B>+<2B>a<EFBFBD>f<EFBFBD>f<EFBFBD>h<EFBFBD>/<2F>9<>9<>;<3B>K<EFBFBD>%<25> <19>K<EFBFBD> '<27> <19>7<> <0A><EFBFBD>G<> H<><17> <17>C<> D<> <11>L<EFBFBD><1D><0F>0<> 1<> <11>L<EFBFBD><1B> <0A>.<2E> /<2F><18>(<28> '<27><>%<25> $<24><> <15><15><13>+<2B>A<EFBFBD>3<EFBFBD>/<2F>0<><14><><15>sN<00>A&E4<00>3E<03>E4<00>3E#<03> E4<00>*'E4<00>
E <07>E4<00>#
E1<07>-E4<00>4
F<03>>F<03>Fc <00><> <00>[5 [5n[SUSSUSS35 US(a [S5 [SS S
5 USS :Xa[ 5up#nO [ 5up#nU(d[ USX45 g U(aUHn[S U35 M [S5 [RSSS9 [URS9(dg UR(d[5(d[SS9(dg [S- n[S- n[S- nUR (aH[#UR 5nUR%5(d['SU35 g [SU35 OQUR%5(a+UR((d[SU35 [S5 O[+U5(dg [SS S5 [-U5n U (d ['S5 g [S5 U H\n
U
R.[0-S- n [3SU
R4S U
R6S!U
R8SU S"S#U
R:3
5 M^ [=U 5n U (d ['S$5 g [S%U R435 [?XlU5(dg [@RB"Xx5 [S&U35 [EU5(dg UR(d/[S'5 [S(5 [S)S9(d [S*5 [GX|R65(dg URH(a0[KX|R6U R.5(d [S+5 [3S,RM/S-P[NRPPS.P[NRRPS/P[NRTP[NRPPS0P[NRTPS1P[NRRPS2P[NRTPS3P[NRVPS4P[NRTPS5P[NRXPS6P[NRTPS1P[NRRPS7P[NRTPS-PUPS1P[NRXPS8P[NRTPS-P55 g)9z!Run the complete modding workflowzSystem: rYr|rZr}r\z=Running in WSL - USB passthrough may require additional setuprr<>zChecking dependenciesrKFz
Optional: z All required dependencies found!Tr4<00>r<><00>x<00>r<><00>jibo_full_dump.bin<69>var_partition.bin<69>var_partition_backup.binzSpecified dump file not found: zUsing existing dump: zUse --force-dump to re-dumpr>zAnalyzing partition tablezNo partitions found in dumpzPartitions found:rr<>z
: sectors <20>-r<>z MB) - z!Could not identify /var partitionz%Identified /var partition: partition <20>Backup created: <20>'Please ensure Jibo is still in RCM modez'If Jibo rebooted, re-enter RCM mode now<6F><<00>Continuing anyway...<2E>6Verification failed, but write may still be successfulr!r/u<>╔═══════════════════════════════════════════════════════════════════╗
2026-03-15 20:24:40 +02:00
║ zMODDING COMPLETE!u<>
╚═══════════════════════════════════════════════════════════════════╝z
z Next steps:z<>
1. Unplug Jibo from USB
2. Hold power button until red LED goes off
3. Power on Jibo normally
4. Wait for boot - you should see a checkmark instead of the eye
5. SSH into Jibo:
zssh root@<jibo-ip>z
Password: r;zYour backup is saved at:zAKeep this backup safe - it contains your Jibo's calibration data!)-r1r`rCr:r<>r<>r<>r?r=rMrNr<><00>rebuild_shofel<65>skip_detectionr<6E>r<>r<>rrorA<00>
force_dumpr<EFBFBD>r<>r(r r0r%r&r'r)r rrg<00>copyrnr<><00>verifyr<79>rRr rrrrr) <0A>args<67>sys_info<66>deps_okr<6B>r<>r<>r<><00>var_partition_path<74>backup_var_pathr<68>r
r <00> var_partitions r<00> run_full_modr<64><00>s<><00><00><10>N<EFBFBD><1F> <20>H<EFBFBD><0E><18>(<28>4<EFBFBD>.<2E>)<29><12>H<EFBFBD>V<EFBFBD>,<<3C>+=<3D>Q<EFBFBD>?<3F>@<40><0F><08><19><12>R<>S<><0F>q<EFBFBD>!<21>,<2C>-<2D><0F><04>~<7E><17> <20>%=<3D>%?<3F>"<22><07>(<28>%?<3F>%A<>"<22><07>(<28> <12>"<22>8<EFBFBD>D<EFBFBD>><3E>7<EFBFBD>E<><14><0F><1C>D<EFBFBD> <19>J<EFBFBD>t<EFBFBD>f<EFBFBD>-<2D> .<2E><1D><12>4<>5<> <0A>N<EFBFBD>N<EFBFBD>4<EFBFBD>$<24>N<EFBFBD>/<2F> <18>d<EFBFBD>&9<>&9<> :<3A><14> <10> <1E> <1E><1E> <20> <20>$<24>S<EFBFBD>1<><1C><19>/<2F>/<2F>I<EFBFBD>!<21>$7<>7<><16><1E>!;<3B>;<3B>O<EFBFBD> <0C>~<7E>~<7E><18><14><1E><1E>(<28> <09><18><1F><1F>!<21>!<21> <17>9<>)<29><1B>E<> F<><18><12>*<2A>9<EFBFBD>+<2B>6<>7<> <12> <19> <19> <1B> <1B>D<EFBFBD>O<EFBFBD>O<EFBFBD><12>*<2A>9<EFBFBD>+<2B>6<>7<><12>0<>1<><18><19>#<23>#<23><18><0F>q<EFBFBD>!<21>0<>1<>%<25>i<EFBFBD>0<>J<EFBFBD> <15><13>1<>2<><14><0E>"<22>#<23><1A><04><17>$<24>$<24>'7<>7<>K<EFBFBD>H<><07> <0A><02>4<EFBFBD>;<3B>;<3B>-<2D>z<EFBFBD>$<24>*;<3B>*;<3B>)<<3C>A<EFBFBD>d<EFBFBD>o<EFBFBD>o<EFBFBD>=N<>b<EFBFBD>QX<51>Y\<5C>P]<5D>]d<>ei<65>en<65>en<65>do<64>p<>q<><1B>
2026-03-15 20:24:40 +02:00
'<27>z<EFBFBD>2<>M<EFBFBD> <18><13>7<>8<><14><11>9<>-<2D>:N<>:N<>9O<39>P<>Q<> <1D>Y<EFBFBD>7I<37> J<> J<><14> <0B>K<EFBFBD>K<EFBFBD>"<22>4<><0E>!<21>/<2F>!2<>3<>4<> <20> 2<> 3<> 3<><14> <10> <1E> <1E><12><<3C>=<3D><12><<3C>=<3D> <20><12>,<2C> <19>0<> 1<> #<23>#5<>7Q<37>7Q<37> R<> R<><14> <0C>{<7B>{<7B><1B>.<2E>0J<30>0J<30>M<EFBFBD>Lf<4C>Lf<4C>g<>g<> <19>R<> S<>
<EFBFBD> <04> <04><01> <04><07><1C><1C><0E> <04><19> <04><1F><1B><1B> <0A> <04>%6<> <04>7=<3D>|<7C>|<7C>n<EFBFBD> <04>EK<45>\<5C>\<5C>N<EFBFBD> <04>SP<03> <04>QW<03>Q]<03>Q]<03>P^<03> <04>^<01> <04>
<08><1B><1B> <0A>  <04>
<19>  <04>
 <20><1C><1C><0E>  <04>
'<04>  <04> <0B>K<EFBFBD>K<EFBFBD>=<3D> <04>#<23> <04>$*<2A><<3C><<3C>.<2E> <04>1<0E> <04><15>m<EFBFBD>m<EFBFBD>_<EFBFBD> <04>!<21> <04>"(<28><1C><1C><0E> <04>/<01> <04><08><1B><1B> <0A> <04>&<26> <04>'-<2D>l<EFBFBD>l<EFBFBD>^<5E> <04>4<01> <04><11><11> <04><01> <04>"<08><1D><1D><0F># <04>"Q<01># <04>"RX<01>Q]<5D>Q]<5D>P^<5E># <04>"_<01># <04><05>( rc<00>:<00>[5 [S5 [RSSS9 [ UR
S9(dgUR (d[SS9(dgUR(a[UR5O[S- n[U5$) z"Only dump the eMMC without moddingzRunning in dump-only modeTr4r<>Fr<46>r<>r<>) r1rCrMrNr<>r<>r<>r<><00>outputrr<>)r<>r s r<00> run_dump_onlyr<79>sp<00><00><10>N<EFBFBD><0E>*<2A>+<2B> <0C>N<EFBFBD>N<EFBFBD>4<EFBFBD>$<24>N<EFBFBD>/<2F> <18>d<EFBFBD>&9<>&9<> :<3A><14> <10> <1E> <1E> <20><13>-<2D><18>'+<2B>{<7B>{<7B>$<24>t<EFBFBD>{<7B>{<7B>#<23><08>CW<43>8W<38>K<EFBFBD> <14>[<5B> !<21>!rc<00>(<00>[5 [S5 [UR5nUR 5(d[ SU35 g[ 5(dgUR(d[SS9(dg[XR5$)z&Write a pre-modified partition to JibozRunning in write-only modezPartition file not found: Fr<46>r<>) r1rCrr<>rorAr<>r<>r<>r<>r&)r<>rs r<00>run_write_onlyr<79>&st<00><00><10>N<EFBFBD><0E>+<2B>,<2C><19>$<24>.<2E>.<2E>)<29>N<EFBFBD> <19> <20> <20> "<22> "<22><13>0<><1E>0@<40>A<>B<><14> <18>><3E>><3E><14> <10> <1E> <1E> <20><13>-<2D><18> "<22>><3E>3D<33>3D<33> E<>Erc <00><><00>[5 [S5 [RSSS9 [ UR
S9(dgUR (d[SS9(dg[S- nS n[S
US 35 [US U5(dg[U5nU(d [S 5 g[U5nU(d [S5 g[SURSURSSURS35 [S- n[S- n[S- n[S5 [XTRUR5(dg[ R""XV5 [ R""XW5 [SU35 [%U5(dgUR (d$[S5 [SS9(d ['S5 UR((a'[S5 [+XdR5(dgO'[S5 [-XVUR5(dgUR.(a0[1XdRUR5(d ['S5 [3S[4R6[4R8S [4R:35 [S![35 [S"5 g)#z\Fast path: dump only GPT + /var, modify /var/jibo/mode.json, and write back minimal changes.z0Running in mode-json-only mode (GPT + /var only)Tr4r<>Fr<46>r<>z gpt_dump.binizDumping GPT header/table (rrzNo partitions found in GPT dumpz*Could not identify /var partition from GPTzIdentified /var partition: z
(start=0xr r<>r}zvar_partition_original.binr<6E>r<>zKDumping /var partition only (this is much smaller than a full eMMC dump)...r<>r<>r<>r<>z-Writing full /var partition back to device...z<Writing only changed sectors back to device (patch write)...r<>r/zMode.json update complete!zSaved originals in: z.If Jibo boots to a checkmark, SSH should work.)r1rCrMrNr<>r<>r<>r<>rxr<>rAr r=r%r&r(rgr<>rnr?<00>full_var_writer<65>r<>r<>r<>r0r rrr)r<><00>gpt_path<74> gpt_sectorsr<73>r<><00>original_var_pathr<68>r<>s r<00>run_mode_json_onlyr<79><s[<00><00><10>N<EFBFBD><0E>A<>B<> <0C>N<EFBFBD>N<EFBFBD>4<EFBFBD>$<24>N<EFBFBD>/<2F> <18>d<EFBFBD>&9<>&9<> :<3A><14> <10> <1E> <1E> <20><13>-<2D><18><18>.<2E>(<28>H<EFBFBD><16>K<EFBFBD><0E>+<2B>K<EFBFBD>=<3D> <0C>E<>F<> <1C>X<EFBFBD>q<EFBFBD>+<2B> 6<> 6<><14>%<25>h<EFBFBD>/<2F>J<EFBFBD> <15><13>5<>6<><14>&<26>z<EFBFBD>2<>M<EFBFBD> <18><13>@<40>A<><14><11>
%<25>m<EFBFBD>&:<3A>&:<3A>%;<3B><<14>!<21>.<2E>.<2E>q<EFBFBD>1<><1A>M<EFBFBD><V<><V<>;W<>WX<57> Z<01><06> !<21>#?<3F>?<3F><15>!<21>$7<>7<><16><1E>!;<3B>;<3B>O<EFBFBD><0E>\<5C>]<5D> <1C>.<2E>0J<30>0J<30>M<EFBFBD>Lf<4C>Lf<4C> g<> g<><14>
<EFBFBD>K<EFBFBD>K<EFBFBD>!<21>6<>
<EFBFBD>K<EFBFBD>K<EFBFBD>!<21>3<><0E>!<21>/<2F>!2<>3<>4<> <20> 2<> 3<> 3<><14> <10> <1E> <1E><12><<3C>=<3D> <20><12>,<2C> <19>0<> 1<> <0C><1A><1A><12>B<>C<>&<26>'9<>;U<>;U<>V<>V<><18>W<01> <13>Q<>R<>,<2C>-><3E>Ta<54>Tn<54>Tn<54>o<>o<><18> <0C>{<7B>{<7B><1B>.<2E>0J<30>0J<30>M<EFBFBD>Lf<4C>Lf<4C>g<>g<> <19>R<> S<> <09>B<EFBFBD>v<EFBFBD>|<7C>|<7C>n<EFBFBD>V<EFBFBD>[<5B>[<5B>M<EFBFBD>)C<>F<EFBFBD>L<EFBFBD>L<EFBFBD>><3E>
R<EFBFBD>S<><0E>%<25>h<EFBFBD>Z<EFBFBD>0<>1<><0E>?<3F>@<40> rc<00><><00>[R"S[RSS9nUR5nUR SSSS9 UR SS S
S 9 UR S SS S9 UR SS SS 9 UR SSS SS 9 UR SSSSS9 UR SSSS9 UR SSSS9 UR SSSS9 UR SSSS S!9 UR S"S#S$S%S&9 UR S'SS(S)S!9 UR 5nUR (a"UR(dURS*5 UR(a [U5nOVUR (aUR Ul [U5nO(UR(a [U5nO [U5n[ R""U(aS+OS,5 g![$a/ ['S-5 [)S.5 [ R""S/5 g[*aBn[-S0U35 S+SKnUR15 [ R""S,5 SnAgSnAff=f)1NzGJibo Auto-Mod Tool - Automatically enable developer mode on Jibo robotsz<73>
2026-03-15 20:24:40 +02:00
Examples:
%(prog)s # Run full modding workflow
%(prog)s --dump-only # Only dump eMMC
%(prog)s --write-partition var.bin --start-sector 0x7E9022
%(prog)s --dump-path existing_dump.bin # Use existing dump
)<03> description<6F>formatter_class<73>epilogz --dump-only<6C>
store_truez$Only dump the eMMC without modifying)<02>action<6F>helpz--write-partition<6F>FILEz8Write a partition file to Jibo (requires --start-sector))<02>metavarr<72>z--mode-json-onlyzVFast mode: dump GPT + /var only, patch /var/jibo/mode.json, write back minimal changesz --dump-pathz)Use existing dump file instead of dumpingz--outputr9z<Output file for dump (default: jibo_work/jibo_full_dump.bin)z--start-sectorc<00><00>[US5$)Nr)r+)r s r<00><lambda><3E>main.<locals>.<lambda><3E>s
<00><00><13>Q<EFBFBD><01>ri"<22>~z9Start sector for write operation (hex, default: 0x7E9022))<03>type<70>defaultr<74>z --force-dumpz&Force re-dump even if dump file existsz--rebuild-shofelzForce rebuild of Shofel exploitz--skip-detectionz0Skip USB device detection (useful for debugging)z--verifyTz,Verify write by reading back (default: True))r<>r<>r<>z --no-verify<66> store_falser<65>zSkip write verification)r<><00>destr<74>z--full-var-writeFz[With --mode-json-only: write entire /var partition instead of patch-writing changed sectorsz)--write-partition requires --start-sectorrr<>r/zOperation cancelled by user<65><72>zUnexpected error: )<19>argparse<73>ArgumentParser<65>RawDescriptionHelpFormatter<65>add_mutually_exclusive_group<75> add_argument<6E>
parse_args<EFBFBD>write_partitionr&<00>error<6F> dump_onlyr<79>r<>r<><00>mode_json_onlyr<79>r<>r<><00>exitr<74>r0r?r<>rA<00> traceback<63> print_exc)<06>parser<65>
mode_groupr<EFBFBD><00>successrUr<>s r<00>mainr<6E><00>sz<00><00> <15> $<24> $<24>]<5D> <20><<3C><<3C> <0C>
<06>F<EFBFBD><18>4<>4<>6<>J<EFBFBD><0E><1B><1B>M<EFBFBD>,<2C> F<><1C>H<01><0E><1B><1B>/<2F><16> Z<><1C>\<01><0E><1B><1B>.<2E>|<7C> x<><1C>z<01> <0B><17><17> <0A>v<EFBFBD>G<><18>I<01>
2026-03-15 20:24:40 +02:00
<EFBFBD><17><17>
<EFBFBD>D<EFBFBD>&<26>Z<><18>\<01>
<EFBFBD><17><17>(<28>/B<>H<EFBFBD>W<><18>Y<01>
<EFBFBD><17><17><0E>|<7C>D<><18>F<01>
<EFBFBD><17><17>*<2A><<3C>=<3D><18>?<3F>
<EFBFBD><17><17>*<2A><<3C>N<><18>P<01>
<EFBFBD><17><17>
<EFBFBD><<3C><14>J<><18>L<01>
<EFBFBD><17><17> <0A>m<EFBFBD>(<28>5<><18>7<>
<EFBFBD><17><17>*<2A><<3C><15>y<><18>{<01> <12> <1C> <1C> <1E>D<EFBFBD> <0C><1B><1B>D<EFBFBD>$5<>$5<><0E> <0C> <0C>@<40>A<><14> <0F>><3E>><3E>#<23>D<EFBFBD>)<29>G<EFBFBD> <11> !<21> !<21>!<21>1<>1<>D<EFBFBD>N<EFBFBD>$<24>T<EFBFBD>*<2A>G<EFBFBD> <11> <20> <20>(<28><14>.<2E>G<EFBFBD>"<22>4<EFBFBD>(<28>G<EFBFBD> <0B><08><08>g<EFBFBD><11>1<EFBFBD>%<25><> <1C><16> <0A>d<EFBFBD> <0B><15>3<>4<> <0B><08><08><13> <0A> <14><14><13>(<28><11><03>,<2C>-<2D><18><11><1B><1B><1D> <0B><08><08><11> <0B> <0B><> <14>s<00> BG<00>6I!<03> I!<03>8I<03>I!<03>__main__)NFTFrm)F)r<>)r
i@)r<>i)Pr*rYr<>rPr<>rgr<>rMrOr<><00>pathlibr<00>typingrrr<00> dataclassesr<00>__file__<5F>parent<6E>resolve<76>
SCRIPT_DIRrnrM<00>EMMC_TOTAL_SECTORSr r rN<00>environ<6F>dir<69>attrr<72><00>setattrr#r1r+r-r:r=r?rArCr$<00>CompletedProcessrV<00>dictr`rirvr<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r rr1rarerlrnrxr|r<>r<>rvr<>r<>r<>r<>r<>r<>r<>r<>rrrr<00><module>r s<><00><01>
2026-03-15 20:24:40 +02:00
<04>
<EFBFBD>
<EFBFBD> <0B> <0A> <0A><0E><0F><11><0F><18>(<28>(<28>!<21> <12>(<28>^<5E> "<22> "<22> *<2A> *<2A> ,<2C>
<EFBFBD> <17>(<28> "<22>
<EFBFBD> <15> <0B> #<23><08><1F><12><16><10><15><15> <0C>?<3F>?<3F><14> <09>!<21>l<EFBFBD>"<22>*<2A>*<2A>&D<><13>F<EFBFBD> <0B><04><13><EFBFBD><EFBFBD>s<EFBFBD>#<23>#<23> <13>F<EFBFBD>D<EFBFBD>"<22> %<25><1C>
 <0B><0E><0E> <0B><0E><05>a<01>S<EFBFBD>a<01><13>a<01>s<EFBFBD>a<01>
8<>3<EFBFBD>8<>
9<>3<EFBFBD>9<>
6<><13>6<>
7<><03>7<>
7;<3B><@<40>"<22><0E>T<EFBFBD>#<23>Y<EFBFBD><0E>X<EFBFBD>d<EFBFBD>^<5E><0E> $<24><0E>59<35><0E><1A><0E>'1<>'B<>'B<><0E>.<06><14><06>E<01>D<EFBFBD>E<01>E<01>t<EFBFBD>E<01>,0<>%<25><04>d<EFBFBD>3<EFBFBD>i<EFBFBD><14>c<EFBFBD><19>(B<>"C<>,0<>^0<>E<EFBFBD>$<24><04>S<EFBFBD> <09>4<EFBFBD><03>9<EFBFBD>*D<>$E<>0<>2;<05>s<EFBFBD>;<05>T<EFBFBD>#<23>Y<EFBFBD>;<05>$<24>s<EFBFBD>)<29>;<05>D<1F>D<EFBFBD><1F>K<01>e<EFBFBD>D<EFBFBD>$<24>s<EFBFBD>)<29>O<EFBFBD>4<>K<01>&:<15><04>:<15><14>:<15>B3<11><14>3<11>l<11>s<EFBFBD><11>D<EFBFBD><11>0=<16>D<EFBFBD>=<16>T<EFBFBD>-<2D>-@<40>=<16>@&<16>d<EFBFBD>&<16>t<EFBFBD>M<EFBFBD>/B<>&<16>R<10>4<EFBFBD> <0A>#6<><10>8<EFBFBD>M<EFBFBD>;R<><10>0<15><14><15>-<2D><15>d<EFBFBD><15>W[<5B><15>(7<15>D<EFBFBD>7<15>T<EFBFBD>7<15>tv<11>T<EFBFBD>v<11>d<EFBFBD>v<11>r<10>(<28>3<EFBFBD>-<2D><10>J<10>T<EFBFBD>J<10>d<EFBFBD>J<10>Z<11><14><11>$<24><11>,<15>4<EFBFBD><15>s<EFBFBD><15><13><15>QU<51><15>0<15><04><15>C<EFBFBD><15>D<EFBFBD><15>.`c<01>9H<39>-(<28><14>-(<28>d<EFBFBD>-(<28>Y\<5C>-(<28>36<33>-(<28>MR<4D>SV<53>X\<5C>]b<>cf<63>hk<68>ck<63>]l<>Xm<58>Sm<53>Mn<4D>-(<28>bTZ<01><10><14><10>d<EFBFBD><10>_b<5F><10>-0<><10>MP<4D><10>^b<><10>F'<27><14>'<27>67<36>K]<5D>)<15>4<EFBFBD>)<15>s<EFBFBD>)<15>S<EFBFBD>)<15>bf<62>)<15>X<15>D<EFBFBD><15><03><15><04><15>B)<15><14>)<15>S<EFBFBD>)<15>s<EFBFBD>)<15>t<EFBFBD>)<15>`C<10>$<24>C<10>L"<22>4<EFBFBD>"<22>(F<01>D<EFBFBD>F<01>,O<10><04>O<10>lF<14>R <0C>z<EFBFBD><19><08>F<EFBFBD>r