同步操作将从 合宙Luat/LuatOS 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
--[[(for wsl:sudo apt updatesudo apt install qemu-user-staticsudo update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff'sudo service binfmt-support start)install:sudo dpkg --add-architecture i386sudo apt-get updatesudo apt-get install lua5.3:i386sudo apt-get install lua5.1sudo apt-get install luarockssudo luarocks install rs232sudo luarocks install bit32ps, proxy (for luarocks):export https_proxy=http://127.0.0.1:1080export http_proxy=http://127.0.0.1:1080]]local help = [[usage:download script files:lua5.1 tool.lua /dev/ttyS8 -d file1 file2 ...read serial port data:lua5.1 tool.lua /dev/ttyS8 -rserial port data after download:lua5.1 tool.lua /dev/ttyS8 -r -d file1 file2 ...]]if #arg < 2 thenprint(help)returnendlocal rs232 = require "rs232"local bit = require "bit32"local p, e = rs232.port(arg[1],{baud = '_115200';data_bits = '_8';parity = 'NONE';stop_bits = '_1';flow_control = 'OFF';rts = 'OFF';})p:open()local download,readUartlocal files = {}--要下载进去的文件路径for i=2,#arg doif arg[i] == "-d" thendownload = trueelseif arg[i] == "-r" thenreadUart = trueelsetable.insert(files,arg[i])endend--各种要用到的函数--按位取反,1字节local function bnot(n)local r = 0for i=1,8 dolocal b = bit.rshift(n, 8-i) % 2b = b == 1 and 0 or 1r = r + bit.lshift(b, 8-i)endreturn rend--计算crclocal function calcrc(s)local crc = 0for i=1,s:len() docrc = bit.bxor(crc, bit.lshift(s:byte(i), 8))for j=1,8 doif crc >= 0x8000 thencrc = bit.bxor((bit.lshift(crc, 1) % 0x10000), 0x1021)elsecrc = bit.lshift(crc, 1) % 0x10000endendcrc = crc % 0x10000endreturn math.floor(crc/0x100),crc%0x100endlocal SOH = 0x01local STX = 0x02local EOT = 0x04local ACK = 0x06local NAK = 0x15local CAN = 0x18--xmodem传头local function xmodem(data,n)local data = data..string.rep(string.char(0),128-data:len())return string.char(SOH,n,bnot(n))..data..string.char(calcrc(data))end--ymodem传文件local function ymodem(data,n)local data = data..string.rep(string.char(0x1a),1024-data:len())return string.char(STX,n,bnot(n))..data..string.char(calcrc(data))end--取文件名local function getName(s)s = s:gsub("\\","/")return s:match(".+/(.+)") or s:match(".+\\(.+)") or send--发某个数据包local function sendData(s)while true dop:write(s)while true dolocal d = p:read(10,5000)--print(d:byte(),d:len(),d)if d:byte() == ACK or d:find("C") then return true end--收到了if d:byte() == NAK then break end--没收到,再发一遍if d:len() == 0 then return endendendendif download thenprint("clear all files, if not response, please restart device")while true dop:write("reinit\r\n")local d = p:read(10,1000)if d:find("reinit") then break endendprint("send ry")p:write("ry\r\n")print("waitting for reply...")for i=1,100 dolocal d = p:read(10,1000)if d:find("C") thenprint("connect ok!")breakendendprint("start download")for i=1,#files do--编译if files[i]:sub(-4,-1):upper() == ".LUA" thenlocal r = files[i]:sub(1,-4).."luac"print(r)os.execute("luac5.3 -o \""..r.."\" -s \""..files[i].."\"")files[i] = rendlocal f,e = io.open(files[i],"r")if not f then--打开文件失败print("file open failed, stop download.",files[i],e)returnendlocal data = f:read("*a") --读取整个文件,以便获取大小local name = getName(files[i])print("downloading "..name)--发送文件名if not sendData(xmodem(name..string.char(0)..tostring(data:len()),0)) thenprint("send file name fail") returnendlocal p,pack = 1,1while true dolocal d = data:sub(p,p+1023)if d:len() == 0 then break end--读完了p = p + 1024print((p > data:len() and data:len() or p).."/"..data:len())local sd = ymodem(d,pack)--print(sd:toHex(),pack)if not sendData(sd) thenprint("send file fail") returnendpack = pack + 1endprint("trans end")if not sendData(string.char(0x04)) then--结束该文件print("end file fail") returnendendif not sendData(xmodem("",0)) then--结束print("last packet fail") returnendprint("all done, reboot")p:write("ls\r\n")p:write("reboot\r\n")endif readUart thenprint("press ctrl+c to kill this tool")while true doio.write(p:read(1000, 100))endendp:close()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。