Skip to content

Commit 9d45038

Browse files
committed
ssh: Add patch for bdata params (set telnet_en=1)
1 parent 5a8ed1a commit 9d45038

1 file changed

Lines changed: 73 additions & 0 deletions

File tree

install_ssh.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@
77

88
import xmir_base
99
from gateway import *
10+
import read_info
1011

1112
gw = Gateway()
1213

14+
FN_kmod = 'kmod/xmir_patcher-{kver}-{arch}{preempt}.ko'
15+
fn_kmod = '/tmp/xmir_patcher.ko'
1316
FN_patch = f'tmp/ssh_patch.sh'
1417
fn_patch = '/tmp/ssh_patch.sh'
1518
FN_install = f'tmp/ssh_install.sh'
@@ -63,9 +66,38 @@
6366
6467
rm -f /tmp/ssh_patch.log
6568
$DIR_PATCH/ssh_patch.sh
69+
70+
### bdata_patch ###
6671
'''
6772
with open(FN_install, 'w', newline = '\n') as file:
6873
file.write(ssh_install)
74+
75+
bdata_patch = '''
76+
rm -f /tmp/bdata_patch.log
77+
TELNET_EN=`bdata get telnet_en`
78+
SSH_EN=`bdata get ssh_en`
79+
UART_EN=`bdata get uart_en`
80+
if [ "$TELNET_EN" != "1" -o "$SSH_EN" != "1" -o "$UART_EN" != "1" ]; then
81+
KMOD_FN=/tmp/xmir_patcher.ko
82+
if [ -f $KMOD_FN ]; then
83+
insmod $KMOD_FN
84+
if lsmod | grep -q xmir_patcher ; then
85+
echo 'set_mtd_rw|bdata' > /sys/module/xmir_patcher/parameters/cmd
86+
RESP=`cat /sys/module/xmir_patcher/parameters/cmd`
87+
if [ "${RESP::2}" = "0|" ]; then
88+
bdata set telnet_en=1
89+
bdata set ssh_en=1
90+
bdata set uart_en=1
91+
bdata commit
92+
echo OK > /tmp/bdata_patch.log
93+
fi
94+
[ ! -f /tmp/bdata_patch.log ] && echo error_3 > /tmp/bdata_patch.log
95+
fi
96+
[ ! -f /tmp/bdata_patch.log ] && echo error_2 > /tmp/bdata_patch.log
97+
fi
98+
[ ! -f /tmp/bdata_patch.log ] && echo error_1 > /tmp/bdata_patch.log
99+
fi
100+
'''
69101

70102
ssh_uninstall = '''#!/bin/sh
71103
DIR_PATCH=/etc/crontabs/patches
@@ -87,13 +119,45 @@
87119
with open(FN_uninstall, 'w', newline = '\n') as file:
88120
file.write(ssh_uninstall)
89121

122+
# ---------------------------------------------------------------------------
123+
124+
dev = read_info.DevInfo(gw, verbose = 0, infolevel = 1)
125+
dev.get_env_list()
126+
bdata = dev.env.bdata
127+
if bdata and bdata.var:
128+
telnet_en = bdata.var["telnet_en"] if 'telnet_en' in bdata.var else None
129+
ssh_en = bdata.var["ssh_en"] if 'ssh_en' in bdata.var else None
130+
uart_en = bdata.var["uart_en"] if 'uart_en' in bdata.var else None
131+
print(f'bdata: telnet_en = {telnet_en}, ssh_en = {ssh_en}, uart_en = {uart_en}')
132+
if telnet_en != '1' or ssh_en != '1' or uart_en != '1':
133+
print(f'CPU arch: {dev.info.cpu_arch}')
134+
print(f'Kernel: {dev.info.linux_stamp}')
135+
krn_ver = dev.info.linux_ver.split('.')
136+
kver = krn_ver[0] + '.' + krn_ver[1]
137+
arch = dev.info.cpu_arch
138+
if kver in [ '4.4', '5.4' ] and arch in [ 'armv7', 'arm64' ]:
139+
print(f'Insert patch for bdata partition!')
140+
preempt = '-preempt' if 'PREEMPT' in dev.info.linux_stamp else ''
141+
FN_kmod = FN_kmod.format(kver = kver, arch = arch, preempt = preempt)
142+
if not os.path.exists(FN_kmod):
143+
die(f'File "{FN_kmod}" not found!')
144+
ssh_install = ssh_install.replace('### bdata_patch ###', bdata_patch)
145+
with open(FN_install, 'w', newline = '\n') as file:
146+
file.write(ssh_install)
147+
FN_bdata_log = f'tmp/bdata_patch.log'
148+
fn_bdata_log = '/tmp/bdata_patch.log'
149+
150+
# ---------------------------------------------------------------------------
90151

91152
action = 'install'
92153
if len(sys.argv) > 1:
93154
if sys.argv[1].startswith('u') or sys.argv[1].startswith('r'):
94155
action = 'uninstall'
95156

96157
if action == 'install':
158+
if FN_bdata_log:
159+
gw.run_cmd(f"rm -f {fn_bdata_log}")
160+
gw.upload(FN_kmod, fn_kmod)
97161
gw.upload(FN_patch, fn_patch)
98162
gw.upload(FN_install, fn_install)
99163

@@ -110,3 +174,12 @@
110174
gw.run_cmd(f"rm -f {fn_patch} ; rm -f {fn_install} ; rm -f {fn_uninstall}")
111175

112176
print("Ready! The Permanent SSH patch installed.")
177+
178+
if FN_bdata_log:
179+
gw.download(fn_bdata_log, FN_bdata_log, verbose = 0)
180+
if not os.path.exists(FN_bdata_log):
181+
print(f'WARN: Patch for bdata partition not executed!')
182+
else:
183+
with open(FN_bdata_log, 'r') as file:
184+
res = file.read()
185+
print(f'Patch for bdata result: {res}')

0 commit comments

Comments
 (0)