Socket
Socket
Sign inDemoInstall

rap-esp32

Package Overview
Dependencies
Maintainers
1
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rap-esp32 - npm Package Compare versions

Comparing version 0.1.0 to 0.2.0

src/deploymentAbsolute.js

2

package.json
{
"name": "rap-esp32",
"version": "0.1.0",
"version": "0.2.0",
"description": "Rap extension for esp32",

@@ -5,0 +5,0 @@ "main": "src/index.js",

@@ -11,3 +11,2 @@ 'use strict';

const deployment = require('./deployment');
const { flash } = require('./flash');

@@ -55,2 +54,6 @@

if (origin < 0) {
origin = 4*1024*1024 - appBuffer.length;
}
let cp = flash({

@@ -65,2 +68,4 @@ binary: appPath,

function generateApp(pathInfos, toCompile, origin) {
const deployment = (origin < 0) ? require('./deployment') : require('./deploymentAbsolute');
let compilerCmd = findCommand(ruffCompiler);

@@ -67,0 +72,0 @@ if (!compilerCmd) {

@@ -9,9 +9,5 @@ /* eslint-disable camelcase */

//const LD_FMT = 'arm-none-eabi-ld -Ttext=0x%s --entry=0x%s --just-symbols=Symbol.map %s -o %s';
//const NM_FMT = 'arm-none-eabi-nm %s | grep \' T \' | awk \'{ print $1" "$3}\'';
//const CP_FMT = 'arm-none-eabi-objcopy -j .text -j .rodata -O binary %s %s';
exports.mkapp = mkapp;
function mkapp(origin, modsManifest, rofsManifest) {
function mkapp(origin/*unused*/, modsManifest, rofsManifest) {
// fix name for windows platform

@@ -22,10 +18,7 @@ rofsManifest.forEach(item => {

if (origin !== align4(origin)) {
throw new Error('app origin must be 4k aligned!');
}
let buffer = makeHeader();
// buffer = appendMods(origin, buffer, null);
origin = 0;
buffer = appendRofs(origin, buffer, rofsManifest);
buffer = appendIndex(origin, buffer);

@@ -59,175 +52,2 @@ return buffer;

/*
function linkObjects(textAddr, modsManifest) {
let modBins = [];
for (let i = 0; i < modsManifest.length; ++i) {
const modItem = modsManifest[i];
// console.log('module:', modItem);
const modName = modItem.name;
const libName = getLibFileName(modName);
const binName = getBinFileName(modName);
// link objects
{
const addr = textAddr.toString(16);
const objs = modItem.objects.join(' ');
const cmd = util.format(LD_FMT, addr, addr, objs, libName);
// console.log(cmd);
execSync(cmd);
}
// objcopy
{
const cmd = util.format(CP_FMT, libName, binName);
// console.log(cmd);
execSync(cmd);
}
// record lib/bin info
{
const cmd = util.format(NM_FMT, libName);
const cmdOutput = execSync(cmd);
const cmdOutputLines = cmdOutput.toString().split(/\r?\n/);
const symbols = cmdOutputLines.map(line => {
let [address, name] = line.split(' ');
if (!address || !name) {
return undefined;
}
address = parseInt(address, 16);
return {
name,
address
};
})
.filter(symbol => !!symbol)
.sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0);
modBins.push({
name: modName,
file: binName,
symbols
});
}
// update text address
{
const stat = fs.statSync(binName);
textAddr += align4(stat.size);
}
printLine();
}
return modBins;
}
*/
/*
function appendMods(origin, buffer, modsManifest) {
if (!(modsManifest instanceof Array) || modsManifest.length === 0) {
updateUserAppIndex(buffer, { mods: 0 });
return buffer;
}
const relOrigin = buffer.length;
// compiled object files => linked binary files
const mods = linkObjects(origin + relOrigin, modsManifest);
// console.log(util.inspect(mods, false));
printLine();
// calcuate offset and total size
const sizeof = {
// basic
char: 1,
// mods
mods_t: 4,
mods_module_t: 4 + 4 + 4,
mods_symbol_t: 4 + 4
};
const relOffsets = {};
let relOffset = relOrigin;
mods.forEach(mod => {
relOffsets[mod.name] = relOffset;
relOffset += align4(getFileSize(mod.file));
});
// mods_t
relOffsets.mods_t = relOffset;
relOffset += sizeof.mods_t;
// mods_module_t
relOffsets.mods_module_t = relOffset;
relOffset += sizeof.mods_module_t * mods.length;
// mods_symbol_t
relOffsets.mods_symbol_t = relOffset;
relOffset += sizeof.mods_symbol_t * mods.reduce((acc, elem) => {
return acc + elem.symbols.length;
}, 0);
// chars
relOffsets.char = relOffset;
relOffset += sizeof.char * mods.reduce((size, mod) => {
return size + (mod.name.length + 1) + mod.symbols.reduce((size, symbol) => {
return size + (symbol.name.length + 1);
}, 0);
}, 0);
// eof
relOffsets.__eof__ = relOffset;
// console.log(relOffsets);
printLine();
// write to buffer
buffer = Buffer.concat([buffer, Buffer.alloc(relOffsets.__eof__ - relOrigin, 0)]);
// mod_t, mods_t.count
buffer.writeUInt32LE(mods.length, relOffsets.mods_t);
for (let mod of mods) {
// binary
const data = getFileData(mod.file);
const begin = relOffsets[mod.name];
const end = begin + data.length;
buffer.fill(data, begin, end);
// mods_module_t
// mods_module_t.name
buffer.write(mod.name, relOffsets.char, mod.name.length);
buffer.writeUInt32LE(origin + relOffsets.char, relOffsets.mods_module_t);
relOffsets.char += mod.name.length + 1;
relOffsets.mods_module_t += 4;
// mods_module_t.symbols
buffer.writeUInt32LE(origin + relOffsets.mods_symbol_t, relOffsets.mods_module_t);
relOffsets.mods_module_t += 4;
// mods_module_t.symbol_count
buffer.writeUInt32LE(mod.symbols.length, relOffsets.mods_module_t);
relOffsets.mods_module_t += 4;
// mods_symbol_t
for (let symbol of mod.symbols) {
// mods_symbol_t.name
buffer.write(symbol.name, relOffsets.char, symbol.name.length);
buffer.writeUInt32LE(origin + relOffsets.char, relOffsets.mods_symbol_t);
relOffsets.char += symbol.name.length + 1;
relOffsets.mods_symbol_t += 4;
// mods_symbol_t.address
buffer.writeUInt32LE(symbol.address | 1, relOffsets.mods_symbol_t);
relOffsets.mods_symbol_t += 4;
}
}
// console.log(relOffsets);
printLine();
// update userapp_t
updateUserAppIndex(buffer, { mods: origin + relOffsets.mods_t });
return buffer;
}
*/
function appendRofs(origin, buffer, rofsManifest) {

@@ -304,3 +124,3 @@ if (!(rofsManifest instanceof Array) || rofsManifest.length === 0) {

// rofs_bucket_t.entries
buffer.writeUInt32LE(origin + relOffsetMap.rofs_entry_t, bucketAddr);
buffer.writeUInt32LE(relOffsetMap.rofs_entry_t, bucketAddr);
bucketAddr += 4;

@@ -311,3 +131,3 @@ // rofs_entry_t

buffer.write(item.name, relOffsetMap.char, item.name.length);
buffer.writeUInt32LE(origin + relOffsetMap.char, relOffsetMap.rofs_entry_t);
buffer.writeUInt32LE(relOffsetMap.char, relOffsetMap.rofs_entry_t);
relOffsetMap.char += item.name.length + 1;

@@ -320,3 +140,3 @@ relOffsetMap.rofs_entry_t += 4;

buffer.fill(dat, beginDat, endDat);
buffer.writeUInt32LE(origin + beginDat, relOffsetMap.rofs_entry_t);
buffer.writeUInt32LE(beginDat, relOffsetMap.rofs_entry_t);
relOffsetMap.char = endDat + 1;

@@ -331,3 +151,3 @@ relOffsetMap.rofs_entry_t += 4;

// update userapp_t
updateUserAppIndex(buffer, { rofs: origin + relOffsetMap.rofs_t });
updateUserAppIndex(buffer, { rofs: relOffsetMap.rofs_t });

@@ -337,2 +157,23 @@ return buffer;

function appendIndex(origin, buffer) {
const pageSize = 4 * 1024;
// add padding to app
let paddingSize = Math.floor((buffer.length + pageSize - 1) / pageSize) * pageSize - buffer.length;
let paddingBuf = Buffer.alloc(paddingSize);
buffer = Buffer.concat([buffer, paddingBuf]);
// create index
let indexBuf = Buffer.alloc(pageSize);
let offset = 0;
// write magic
offset += indexBuf.write('INDX', offset);
// write app size
offset += indexBuf.writeUInt32LE(buffer.length, offset);
buffer = Buffer.concat([buffer, indexBuf]);
return buffer;
}
///////////////

@@ -339,0 +180,0 @@ // UTILITIES //

@@ -40,16 +40,16 @@ 'use strict';

case 'win32': {
// let arglst = [];
// if (options.erase) {
// arglst.push('-e', 'all');
// }
// arglst = arglst.concat([
// '-r',
// '-i', 'ICDI',
// '-o', `0x${options.address.toString(16)}`,
// options.binary
// ]);
// return buildCommand({
// cmd: 'LMFlash.exe',
// args: arglst
// });
let arglst = [];
if (options.erase) {
arglst.push('-e', 'all');
}
arglst = arglst.concat([
'-r',
'-i', 'ICDI',
'-o', `0x${options.address.toString(16)}`,
options.binary
]);
return buildCommand({
cmd: 'LMFlash.exe',
args: arglst
});
}

@@ -56,0 +56,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc