/**
* 固件发布工具fwmerge.js,主要实现引导固件和APP固件合并发布
* 启动命令:node fwmerge.js
* 版本号:v1.0.1
*/
//配置BOOT与APP合并信息
//APP起始地址
const APP_ADDR = 0x5000;
//APP文件路径
const APP_PATH = './file/app.bin';
//引导文件路径
const BOOT_PATH = './file/boot.bin';
//输出文件路径
const OUT_PATH = './file/out.bin';
/* -------------------------------------------------------------------------------------------------------------- */
const fs = require("fs")
//读取文件数据
function file_get_data(filename) {
try{
return fs.readFileSync(filename);
}catch(err){
return null;
}
}
//删除文件
function file_delete(filename) {
try{
fs.unlinkSync(filename);
return true;
}catch(err){
return false;
}
}
//文件合并
function file_merge(){
//配置信息
const app_start = APP_ADDR;
const app_filenames = APP_PATH;
const boot_filenames = BOOT_PATH;
const out_filenames = OUT_PATH;
//读取文件数据
const boot_data = file_get_data(boot_filenames);
const app_data = file_get_data(app_filenames);
if(boot_data == null || app_data == null){
console.log(`Error boot or app file does not exist`);
return;
}
//检验起始地址是否合法
if(boot_data.length >= app_start){
console.log(`Error boot file size ${boot_data.length} >= start address ${app_start}`);
return;
}
//删除上一次输出文件
file_delete(out_filenames);
//数据合并写入输出文件中
let out_data = Buffer.concat([boot_data, Buffer.alloc(app_start-boot_data.length, 0xff), app_data]);
let fd = fs.openSync(out_filenames, "w+");
fs.writeSync(fd, out_data, 0);
fs.closeSync(fd)
console.log(`Merge OK!`);
console.log(`App atart ${app_start} out size=${out_data.length} -> ${out_filenames}`);
}
file_merge();