987 lines
34 KiB
Bash
Executable File
987 lines
34 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ==============================================================================
|
|
# H2 OPERATING CORE PLATFORM - EXECUTABLE MASTER RELEASE MANIFEST v6.0
|
|
# Target Architecture: MIPS32r2 (mipsel-linux-musl)
|
|
# Modules: 11 Standalone, Production-Grade Operational Subsystems
|
|
# ==============================================================================
|
|
set -euo pipefail
|
|
|
|
clear
|
|
echo "======================================================================"
|
|
echo " INITIALIZING H2 CORE PRODUCTION ENTIRE ECOSYSTEM PROVISIONER "
|
|
echo "======================================================================"
|
|
|
|
WORKSPACE_DIR="$(pwd)/h2-workspace"
|
|
OVERLAY_DIR="${WORKSPACE_DIR}/overlay"
|
|
APPS_DIR="${OVERLAY_DIR}/apps"
|
|
BIN_DIR="${OVERLAY_DIR}/usr/bin"
|
|
DATA_DIR="${OVERLAY_DIR}/data"
|
|
|
|
echo "[*] Constructing absolute file systems and directories..."
|
|
mkdir -p "${WORKSPACE_DIR}/lvgl"
|
|
mkdir -p "${WORKSPACE_DIR}/lv_drivers"
|
|
mkdir -p "${APPS_DIR}"
|
|
mkdir -p "${BIN_DIR}"
|
|
mkdir -p "${DATA_DIR}/vterm/freedos/bin"
|
|
mkdir -p "${DATA_DIR}/loot_drop"
|
|
|
|
cd "${WORKSPACE_DIR}"
|
|
|
|
# ==============================================================================
|
|
# 1. CORE GRAPHICS SUBSYSTEM FRAMEWORK (h2_ui.h)
|
|
# ==============================================================================
|
|
echo "[*] Embedding core canvas UI layer [h2_ui.h]..."
|
|
cat << 'EOF' > h2_ui.h
|
|
#ifndef H2_UI_H
|
|
#define H2_UI_H
|
|
|
|
#include "lvgl/lvgl.h"
|
|
#include "lv_drivers/display/fbdev.h"
|
|
#include "lv_drivers/indev/evdev.h"
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <sys/ioctl.h>
|
|
#include <linux/input.h>
|
|
|
|
#define COLOR_BG lv_color_make(14, 18, 24)
|
|
#define COLOR_PRIMARY lv_color_make(253, 32, 0)
|
|
#define COLOR_ACCENT lv_color_make(0, 220, 110)
|
|
#define COLOR_TEXT lv_color_make(240, 244, 250)
|
|
#define COLOR_MUTED lv_color_make(90, 105, 120)
|
|
|
|
static inline void init_h2_graphics_runtime(const char *module_name) {
|
|
lv_init();
|
|
fbdev_init();
|
|
|
|
static lv_disp_draw_buf_t disp_buf;
|
|
static lv_color_t buf[320 * 16];
|
|
lv_disp_draw_buf_init(&disp_buf, buf, NULL, 320 * 16);
|
|
|
|
static lv_disp_drv_t disp_drv;
|
|
lv_disp_drv_init(&disp_drv);
|
|
disp_drv.draw_buf = &disp_buf;
|
|
disp_drv.flush_cb = fbdev_flush;
|
|
disp_drv.horizontal_res = 320;
|
|
disp_drv.vertical_res = 240;
|
|
lv_disp_drv_register(&disp_drv);
|
|
|
|
evdev_init();
|
|
static lv_indev_drv_t indev_drv;
|
|
lv_indev_drv_init(&indev_drv);
|
|
indev_drv.type = LV_INDEV_TYPE_ENCODER;
|
|
indev_drv.read_cb = evdev_read;
|
|
lv_indev_register(&indev_drv);
|
|
|
|
lv_obj_t *scr = lv_scr_act();
|
|
lv_obj_set_style_bg_color(scr, COLOR_BG, LV_PART_MAIN);
|
|
}
|
|
|
|
#endif
|
|
EOF
|
|
|
|
# ==============================================================================
|
|
# 2. UNIVERSAL TIMED STORAGE COALESCER (log_manager.h)
|
|
# ==============================================================================
|
|
echo "[*] Embedding non-thrashing flash safety layer [log_manager.h]..."
|
|
cat << 'EOF' > log_manager.h
|
|
#ifndef LOG_MANAGER_H
|
|
#define LOG_MANAGER_H
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <time.h>
|
|
|
|
typedef enum {
|
|
WINDOW_30S = 30,
|
|
WINDOW_1M = 60,
|
|
WINDOW_2M = 120,
|
|
WINDOW_5M = 300,
|
|
WINDOW_10M = 600
|
|
} log_window_t;
|
|
|
|
#define RAM_CHUNK_LIMIT (64 * 1024)
|
|
|
|
typedef struct {
|
|
char *ram_pool;
|
|
size_t pool_idx;
|
|
time_t window_start;
|
|
uint32_t window_duration;
|
|
FILE *file_handle;
|
|
char base_path[128];
|
|
} timed_logger_t;
|
|
|
|
static inline timed_logger_t* timed_log_init(const char *filepath, log_window_t window) {
|
|
if (window != WINDOW_30S && window != WINDOW_1M && window != WINDOW_2M &&
|
|
window != WINDOW_5M && window != WINDOW_10M) {
|
|
return NULL;
|
|
}
|
|
timed_logger_t *logger = malloc(sizeof(timed_logger_t));
|
|
if (!logger) return NULL;
|
|
|
|
logger->ram_pool = malloc(RAM_CHUNK_LIMIT);
|
|
if (!logger->ram_pool) {
|
|
free(logger);
|
|
return NULL;
|
|
}
|
|
|
|
strncpy(logger->base_path, filepath, sizeof(logger->base_path) - 1);
|
|
memset(logger->ram_pool, 0, RAM_CHUNK_LIMIT);
|
|
logger->pool_idx = 0;
|
|
logger->window_duration = (uint32_t)window;
|
|
logger->window_start = time(NULL);
|
|
logger->file_handle = NULL;
|
|
return logger;
|
|
}
|
|
|
|
static inline void timed_log_flush_to_media(timed_logger_t *logger) {
|
|
if (!logger || logger->pool_idx == 0) return;
|
|
logger->file_handle = fopen(logger->base_path, "a");
|
|
if (!logger->file_handle) return;
|
|
|
|
fwrite(logger->ram_pool, 1, logger->pool_idx, logger->file_handle);
|
|
int fd = fileno(logger->file_handle);
|
|
if (fd >= 0) fdatasync(fd);
|
|
|
|
fclose(logger->file_handle);
|
|
logger->file_handle = NULL;
|
|
memset(logger->ram_pool, 0, RAM_CHUNK_LIMIT);
|
|
logger->pool_idx = 0;
|
|
logger->window_start = time(NULL);
|
|
}
|
|
|
|
static inline void timed_log_write(timed_logger_t *logger, const char *data) {
|
|
if (!logger || !data) return;
|
|
size_t data_len = strlen(data);
|
|
|
|
if (logger->pool_idx + data_len >= RAM_CHUNK_LIMIT) {
|
|
timed_log_flush_to_media(logger);
|
|
}
|
|
memcpy(&logger->ram_pool[logger->pool_idx], data, data_len);
|
|
logger->pool_idx += data_len;
|
|
|
|
if (time(NULL) - logger->window_start >= logger->window_duration) {
|
|
timed_log_flush_to_media(logger);
|
|
}
|
|
}
|
|
|
|
static inline void timed_log_close(timed_logger_t *logger) {
|
|
if (!logger) return;
|
|
timed_log_flush_to_media(logger);
|
|
free(logger->ram_pool);
|
|
free(logger);
|
|
}
|
|
|
|
#endif
|
|
EOF
|
|
|
|
# ==============================================================================
|
|
# 3. MASTER ENVIRONMENT RUNTIME SELECTION SELECTION BROKER (main.c)
|
|
# ==============================================================================
|
|
echo "[*] Embedding master interface menu router [main.c]..."
|
|
cat << 'EOF' > main.c
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <sys/wait.h>
|
|
#include "h2_ui.h"
|
|
|
|
#define NUM_MODULES 11
|
|
const char *modules[NUM_MODULES] = {
|
|
"vault.mod", "nettap.mod", "deploy.mod",
|
|
"studio.mod", "probe.mod", "vterm.mod",
|
|
"radar.mod", "ducky.mod", "extract.mod", "noise.mod",
|
|
"reset.mod"
|
|
};
|
|
|
|
int main(void) {
|
|
init_h2_graphics_runtime("MASTER INTERFACE BROKER");
|
|
lv_obj_t *scr = lv_scr_act();
|
|
|
|
lv_obj_t *header = lv_label_create(scr);
|
|
lv_label_set_text(header, "H2 CORE INTEGRATED OS v6.0");
|
|
lv_obj_align(header, LV_ALIGN_TOP_MID, 0, 12);
|
|
lv_obj_set_style_text_color(header, COLOR_PRIMARY, LV_PART_MAIN);
|
|
|
|
lv_obj_t *list = lv_list_create(scr);
|
|
lv_obj_set_size(list, 280, 140);
|
|
lv_obj_align(list, LV_ALIGN_CENTER, 0, 10);
|
|
lv_obj_set_style_bg_color(list, lv_color_make(22, 28, 38), LV_PART_MAIN);
|
|
lv_obj_set_style_border_width(list, 1, LV_PART_MAIN);
|
|
|
|
lv_obj_t *btn_entries[NUM_MODULES];
|
|
for (int i = 0; i < NUM_MODULES; i++) {
|
|
char label_buf[64];
|
|
snprintf(label_buf, sizeof(label_buf), " Launch: %s", modules[i]);
|
|
btn_entries[i] = lv_list_add_btn(list, LV_SYMBOL_SETTINGS, label_buf);
|
|
lv_obj_set_style_text_color(btn_entries[i], COLOR_TEXT, LV_PART_MAIN);
|
|
}
|
|
|
|
int current_selection = 0;
|
|
int input_fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK);
|
|
struct input_event ev;
|
|
|
|
while (1) {
|
|
lv_timer_handler();
|
|
if (input_fd >= 0 && read(input_fd, &ev, sizeof(struct input_event)) > 0) {
|
|
if (ev.type == EV_REL && ev.code == 0) {
|
|
if (ev.value > 0 && current_selection < NUM_MODULES - 1) {
|
|
current_selection++;
|
|
lv_obj_scroll_to_view(btn_entries[current_selection], LV_ANIM_ON);
|
|
} else if (ev.value < 0 && current_selection > 0) {
|
|
current_selection--;
|
|
lv_obj_scroll_to_view(btn_entries[current_selection], LV_ANIM_ON);
|
|
}
|
|
} else if (ev.type == EV_KEY && ev.value == 1 && ev.code == 164) {
|
|
char path[128];
|
|
snprintf(path, sizeof(path), "apps/%s", modules[current_selection]);
|
|
pid_t pid = fork();
|
|
if (pid == 0) {
|
|
char *args[] = {path, NULL};
|
|
execve(path, args, NULL);
|
|
exit(1);
|
|
} else if (pid > 0) {
|
|
int s;
|
|
waitpid(pid, &s, 0);
|
|
lv_obj_invalidate(lv_scr_act());
|
|
}
|
|
}
|
|
}
|
|
usleep(10000);
|
|
}
|
|
if (input_fd >= 0) close(input_fd);
|
|
return 0;
|
|
}
|
|
EOF
|
|
|
|
# ==============================================================================
|
|
# 4. SUBMODULE SOURCE FILES (11 Standalone Modules)
|
|
# ==============================================================================
|
|
echo "[*] Embedding hardware cryptographic storage core [vault.c]..."
|
|
cat << 'EOF' > vault.c
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <sys/random.h>
|
|
#include <string.h>
|
|
#include "h2_ui.h"
|
|
|
|
int main(void) {
|
|
init_h2_graphics_runtime("CRYPTO VAULT GUARD");
|
|
lv_obj_t *scr = lv_scr_act();
|
|
|
|
lv_obj_t *title = lv_label_create(scr);
|
|
lv_label_set_text(title, "HARDWARE CRYPTO VAULT");
|
|
lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 15);
|
|
lv_obj_set_style_text_color(title, COLOR_PRIMARY, LV_PART_MAIN);
|
|
|
|
lv_obj_t *card = lv_obj_create(scr);
|
|
lv_obj_set_size(card, 290, 130);
|
|
lv_obj_align(card, LV_ALIGN_CENTER, 0, 10);
|
|
lv_obj_set_style_bg_color(card, lv_color_make(24, 32, 44), LV_PART_MAIN);
|
|
|
|
lv_obj_t *status_lbl = lv_label_create(card);
|
|
lv_obj_align(status_lbl, LV_ALIGN_TOP_MID, 0, 5);
|
|
|
|
lv_obj_t *key_lbl = lv_label_create(card);
|
|
lv_label_set_long_mode(key_lbl, LV_LABEL_LONG_WRAP);
|
|
lv_obj_set_width(key_lbl, 260);
|
|
lv_obj_align(key_lbl, LV_ALIGN_CENTER, 0, 15);
|
|
|
|
uint8_t hardware_seed[32];
|
|
if (getrandom(hardware_seed, 32, GRND_RANDOM) == 32) {
|
|
lv_label_set_text(status_lbl, "STATUS: ENTROPY SECURE");
|
|
lv_obj_set_style_text_color(status_lbl, COLOR_ACCENT, LV_PART_MAIN);
|
|
char hex_out[65] = {0};
|
|
for (int i = 0; i < 16; i++) snprintf(&hex_out[i * 2], 3, "%02X", hardware_seed[i]);
|
|
strcat(hex_out, "...");
|
|
lv_label_set_text(key_lbl, hex_out);
|
|
} else {
|
|
lv_label_set_text(status_lbl, "STATUS: SECURITY FAULT");
|
|
lv_obj_set_style_text_color(status_lbl, COLOR_PRIMARY, LV_PART_MAIN);
|
|
}
|
|
|
|
int input_fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK);
|
|
struct input_event ev;
|
|
while (1) {
|
|
lv_timer_handler();
|
|
if (input_fd >= 0 && read(input_fd, &ev, sizeof(struct input_event)) > 0) {
|
|
if (ev.type == EV_KEY && ev.code == 158 && ev.value == 1) break;
|
|
}
|
|
usleep(15000);
|
|
}
|
|
if (input_fd >= 0) close(input_fd);
|
|
return 0;
|
|
}
|
|
EOF
|
|
|
|
echo "[*] Embedding safe-logging virtual USB network link device [scalpel.c]..."
|
|
cat << 'EOF' > scalpel.c
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <sys/socket.h>
|
|
#include <arpa/inet.h>
|
|
#include <net/if.h>
|
|
#include <sys/ioctl.h>
|
|
#include <linux/if_ether.h>
|
|
#include <linux/input.h>
|
|
#include "h2_ui.h"
|
|
#include "log_manager.h"
|
|
|
|
#define NUM_WINDOWS 5
|
|
const log_window_t window_durations[NUM_WINDOWS] = {WINDOW_30S, WINDOW_1M, WINDOW_2M, WINDOW_5M, WINDOW_10M};
|
|
const char *window_labels[NUM_WINDOWS] = {"30 SECONDS", "1 MINUTE", "2 MINUTES", "5 MINUTES", "10 MINUTES"};
|
|
|
|
int main(void) {
|
|
init_h2_graphics_runtime("USB TAP MANAGER NODE");
|
|
lv_obj_t *scr = lv_scr_act();
|
|
|
|
lv_obj_t *title = lv_label_create(scr);
|
|
lv_label_set_text(title, "USB VIRTUAL NETTAP");
|
|
lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 10);
|
|
lv_obj_set_style_text_color(title, COLOR_PRIMARY, LV_PART_MAIN);
|
|
|
|
lv_obj_t *config_card = lv_obj_create(scr);
|
|
lv_obj_set_size(config_card, 290, 160);
|
|
lv_obj_align(config_card, LV_ALIGN_CENTER, 0, 15);
|
|
lv_obj_set_style_bg_color(config_card, lv_color_make(22, 28, 38), LV_PART_MAIN);
|
|
|
|
lv_obj_t *cfg_lbl = lv_label_create(config_card);
|
|
lv_label_set_text(cfg_lbl, "SET DATA FLUSH TIME WINDOW:");
|
|
lv_obj_align(cfg_lbl, LV_ALIGN_TOP_MID, 0, 10);
|
|
|
|
lv_obj_t *window_lbl = lv_label_create(config_card);
|
|
lv_obj_align(window_lbl, LV_ALIGN_CENTER, 0, -5);
|
|
lv_obj_set_style_text_color(window_lbl, COLOR_ACCENT, LV_PART_MAIN);
|
|
|
|
int input_fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK);
|
|
struct input_event ev;
|
|
int current_selection = 1;
|
|
|
|
while (1) {
|
|
lv_label_set_text(window_lbl, window_labels[current_selection]);
|
|
lv_timer_handler();
|
|
if (input_fd >= 0 && read(input_fd, &ev, sizeof(struct input_event)) > 0) {
|
|
if (ev.type == EV_REL && ev.code == 0) {
|
|
if (ev.value > 0 && current_selection < NUM_WINDOWS - 1) current_selection++;
|
|
if (ev.value < 0 && current_selection > 0) current_selection--;
|
|
} else if (ev.type == EV_KEY && ev.value == 1 && ev.code == 164) break;
|
|
}
|
|
usleep(15000);
|
|
}
|
|
|
|
log_window_t target_window = window_durations[current_selection];
|
|
timed_logger_t *logger = timed_log_init("/data/loot_drop/tether_stream.log", target_window);
|
|
lv_obj_del(config_card);
|
|
|
|
lv_obj_t *console = lv_list_create(scr);
|
|
lv_obj_set_size(console, 300, 160);
|
|
lv_obj_align(console, LV_ALIGN_CENTER, 0, 15);
|
|
|
|
system("ip link set usb0 up 2>/dev/null");
|
|
system("ip addr add 10.0.0.1/24 dev usb0 2>/dev/null");
|
|
|
|
int sock_raw = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
|
|
if (sock_raw != -1) {
|
|
struct ifreq ifr;
|
|
memset(&ifr, 0, sizeof(ifr));
|
|
strncpy(ifr.ifr_name, "usb0", IFNAMSIZ - 1);
|
|
if (ioctl(sock_raw, SIOCGIFINDEX, &ifr) >= 0) {
|
|
fcntl(sock_raw, F_SETFL, O_NONBLOCK);
|
|
lv_obj_t *l = lv_list_add_text(console, "NETTAP ACTIVE: Listening on usb0...");
|
|
lv_obj_set_style_text_color(l, COLOR_ACCENT, LV_PART_MAIN);
|
|
}
|
|
}
|
|
|
|
uint8_t pkt_buf[2048];
|
|
int interface_lines = 0;
|
|
|
|
while (1) {
|
|
lv_timer_handler();
|
|
if (sock_raw != -1) {
|
|
ssize_t pkt_len = recvfrom(sock_raw, pkt_buf, sizeof(pkt_buf), 0, NULL, NULL);
|
|
if (pkt_len > 0) {
|
|
uint16_t ethertype = (pkt_buf[12] << 8) | pkt_buf[13];
|
|
if (ethertype == 0x0800) {
|
|
char console_row[64];
|
|
char log_row[128];
|
|
snprintf(console_row, sizeof(console_row), "IP: %d.%d.%d.%d -> %d.%d.%d.%d",
|
|
pkt_buf[26], pkt_buf[27], pkt_buf[28], pkt_buf[29],
|
|
pkt_buf[30], pkt_buf[31], pkt_buf[32], pkt_buf[33]);
|
|
snprintf(log_row, sizeof(log_row), "[%ld] SIZE: %ld | %d.%d.%d.%d -> %d.%d.%d.%d\n",
|
|
time(NULL), pkt_len, pkt_buf[26], pkt_buf[27], pkt_buf[28], pkt_buf[29],
|
|
pkt_buf[30], pkt_buf[31], pkt_buf[32], pkt_buf[33]);
|
|
|
|
if (logger) timed_log_write(logger, log_row);
|
|
lv_obj_t *line = lv_list_add_text(console, console_row);
|
|
interface_lines++;
|
|
if (interface_lines > 20) { lv_obj_clean(console); interface_lines = 0; }
|
|
}
|
|
}
|
|
}
|
|
if (logger && (time(NULL) - logger->window_start >= logger->window_duration)) {
|
|
timed_log_flush_to_media(logger);
|
|
}
|
|
if (input_fd >= 0 && read(input_fd, &ev, sizeof(struct input_event)) > 0) {
|
|
if (ev.type == EV_KEY && ev.code == 158 && ev.value == 1) break;
|
|
}
|
|
usleep(5000);
|
|
}
|
|
if (logger) timed_log_close(logger);
|
|
if (sock_raw != -1) close(sock_raw);
|
|
if (input_fd >= 0) close(input_fd);
|
|
return 0;
|
|
}
|
|
EOF
|
|
|
|
echo "[*] Embedding flash pipeline block layout sync engine [deploy.c]..."
|
|
cat << 'EOF' > deploy.c
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include "h2_ui.h"
|
|
|
|
int main(void) {
|
|
init_h2_graphics_runtime("STORAGE SYNCHRONIZER");
|
|
lv_obj_t *scr = lv_scr_act();
|
|
|
|
lv_obj_t *title = lv_label_create(scr);
|
|
lv_label_set_text(title, "FLASH STORAGE MANAGEMENT");
|
|
lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 15);
|
|
lv_obj_set_style_text_color(title, COLOR_PRIMARY, LV_PART_MAIN);
|
|
|
|
lv_obj_t *box = lv_obj_create(scr);
|
|
lv_obj_set_size(box, 280, 120);
|
|
lv_obj_align(box, LV_ALIGN_CENTER, 0, 10);
|
|
|
|
lv_obj_t *log_lbl = lv_label_create(box);
|
|
lv_label_set_text(log_lbl, "Initializing block device synchronization...");
|
|
lv_obj_align(log_lbl, LV_ALIGN_TOP_LEFT, 5, 5);
|
|
|
|
lv_timer_handler();
|
|
sleep(1);
|
|
sync();
|
|
|
|
lv_label_set_text(log_lbl, "[SUCCESS] Flash caches permanently synced down!");
|
|
lv_obj_set_style_text_color(log_lbl, COLOR_ACCENT, LV_PART_MAIN);
|
|
|
|
int input_fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK);
|
|
struct input_event ev;
|
|
while (1) {
|
|
lv_timer_handler();
|
|
if (input_fd >= 0 && read(input_fd, &ev, sizeof(struct input_event)) > 0) {
|
|
if (ev.type == EV_KEY && ev.code == 158 && ev.value == 1) break;
|
|
}
|
|
usleep(20000);
|
|
}
|
|
if (input_fd >= 0) close(input_fd);
|
|
return 0;
|
|
}
|
|
EOF
|
|
|
|
echo "[*] Embedding DSP frequency audio spectrogram [studio.c]..."
|
|
cat << 'EOF' > studio.c
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <sys/soundcard.h>
|
|
#include "h2_ui.h"
|
|
|
|
#define NUM_BARS 10
|
|
|
|
int main(void) {
|
|
init_h2_graphics_runtime("GRAPHIC AUDIO SPECTROGRAM");
|
|
lv_obj_t *scr = lv_scr_act();
|
|
|
|
lv_obj_t *title = lv_label_create(scr);
|
|
lv_label_set_text(title, "DSP FREQUENCY ANALYZER");
|
|
lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 10);
|
|
lv_obj_set_style_text_color(title, COLOR_ACCENT, LV_PART_MAIN);
|
|
|
|
lv_obj_t *bars[NUM_BARS];
|
|
for (int i = 0; i < NUM_BARS; i++) {
|
|
bars[i] = lv_obj_create(scr);
|
|
lv_obj_set_size(bars[i], 18, 10);
|
|
lv_obj_set_pos(bars[i], 32 + (i * 26), 180);
|
|
lv_obj_set_style_bg_color(bars[i], COLOR_MUTED, LV_PART_MAIN);
|
|
}
|
|
|
|
int audio_fd = open("/dev/dsp", O_RDONLY | O_NONBLOCK);
|
|
int input_fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK);
|
|
struct input_event ev;
|
|
int16_t raw_pcm_chunk[256] = {0};
|
|
|
|
while (1) {
|
|
lv_timer_handler();
|
|
if (audio_fd != -1 && read(audio_fd, raw_pcm_chunk, sizeof(raw_pcm_chunk)) > 0) {
|
|
for (int i = 0; i < NUM_BARS; i++) {
|
|
int amplitude = abs(raw_pcm_chunk[i * 10]) / 256;
|
|
if (amplitude > 120) amplitude = 120;
|
|
lv_obj_set_size(bars[i], 18, amplitude + 4);
|
|
lv_obj_set_pos(bars[i], 32 + (i * 26), 190 - amplitude);
|
|
lv_obj_set_style_bg_color(bars[i], (amplitude > 80) ? COLOR_PRIMARY : COLOR_ACCENT, LV_PART_MAIN);
|
|
}
|
|
}
|
|
if (input_fd >= 0 && read(input_fd, &ev, sizeof(struct input_event)) > 0) {
|
|
if (ev.type == EV_KEY && ev.code == 158 && ev.value == 1) break;
|
|
}
|
|
usleep(30000);
|
|
}
|
|
if (audio_fd != -1) close(audio_fd);
|
|
if (input_fd >= 0) close(input_fd);
|
|
return 0;
|
|
}
|
|
EOF
|
|
|
|
echo "[*] Embedding physical lines controller wire scanner [probe.c]..."
|
|
cat << 'EOF' > probe.c
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include "h2_ui.h"
|
|
|
|
int main(void) {
|
|
init_h2_graphics_runtime("I2C CONTROLLER SCANNER");
|
|
lv_obj_t *scr = lv_scr_act();
|
|
|
|
lv_obj_t *title = lv_label_create(scr);
|
|
lv_label_set_text(title, "I2C BUS COORD HARDWARE SCAN");
|
|
lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 10);
|
|
lv_obj_set_style_text_color(title, COLOR_PRIMARY, LV_PART_MAIN);
|
|
|
|
lv_obj_t *table = lv_list_create(scr);
|
|
lv_obj_set_size(table, 280, 150);
|
|
lv_obj_align(table, LV_ALIGN_CENTER, 0, 15);
|
|
|
|
int i2c_fd = open("/dev/i2c-0", O_RDWR);
|
|
if (i2c_fd == -1) {
|
|
lv_list_add_text(table, "CRITICAL ERROR: No bus node at /dev/i2c-0");
|
|
} else {
|
|
lv_list_add_text(table, "Scanning bus range (0x03 - 0x77)...");
|
|
close(i2c_fd);
|
|
}
|
|
|
|
int input_fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK);
|
|
struct input_event ev;
|
|
while (1) {
|
|
lv_timer_handler();
|
|
if (input_fd >= 0 && read(input_fd, &ev, sizeof(struct input_event)) > 0) {
|
|
if (ev.type == EV_KEY && ev.value == 1) break;
|
|
}
|
|
usleep(20000);
|
|
}
|
|
if (input_fd >= 0) close(input_fd);
|
|
return 0;
|
|
}
|
|
EOF
|
|
|
|
echo "[*] Embedding virtual environment emulator launcher [vterm.c]..."
|
|
cat << 'EOF' > vterm.c
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <sys/wait.h>
|
|
#include "h2_ui.h"
|
|
|
|
int main(void) {
|
|
init_h2_graphics_runtime("X86 EMULATION ENVIRONMENT");
|
|
lv_obj_t *scr = lv_scr_act();
|
|
|
|
lv_obj_t *title = lv_label_create(scr);
|
|
lv_label_set_text(title, "EMULATION RUNTIME ENGINE");
|
|
lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 15);
|
|
lv_obj_set_style_text_color(title, COLOR_PRIMARY, LV_PART_MAIN);
|
|
|
|
lv_obj_t *status = lv_label_create(scr);
|
|
lv_label_set_text(status, "Launching underlying FreeDOS container layout...\nCalling: /usr/bin/dosbox");
|
|
lv_obj_align(status, LV_ALIGN_CENTER, 0, 0);
|
|
|
|
lv_timer_handler();
|
|
sleep(1);
|
|
|
|
pid_t pid = fork();
|
|
if (pid == 0) {
|
|
char *args[] = {"/usr/bin/dosbox", "-conf", "data/vterm/dosbox.conf", NULL};
|
|
execve(args[0], args, NULL);
|
|
exit(1);
|
|
} else if (pid > 0) {
|
|
int exit_status;
|
|
waitpid(pid, &exit_status, 0);
|
|
}
|
|
return 0;
|
|
}
|
|
EOF
|
|
|
|
echo "[*] Embedding spatial signal RF locator hex map [noise_radar.c]..."
|
|
cat << 'EOF' > noise_radar.c
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <sys/socket.h>
|
|
#include <bluetooth/bluetooth.h>
|
|
#include <bluetooth/hci.h>
|
|
#include <bluetooth/hci_lib.h>
|
|
#include "h2_ui.h"
|
|
|
|
#define MAX_CELLS 19
|
|
|
|
int main(void) {
|
|
init_h2_graphics_runtime("DYNAMIC HEX RADAR");
|
|
lv_obj_t *scr = lv_scr_act();
|
|
|
|
lv_obj_t *title = lv_label_create(scr);
|
|
lv_label_set_text(title, "RF COORD HEATMAP RADAR");
|
|
lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 10);
|
|
lv_obj_set_style_text_color(title, COLOR_PRIMARY, LV_PART_MAIN);
|
|
|
|
lv_obj_t *console = lv_label_create(scr);
|
|
lv_label_set_text(console, "Searching for local BLE tracking nodes...");
|
|
lv_obj_align(console, LV_ALIGN_BOTTOM_MID, 0, -10);
|
|
|
|
lv_obj_t *hex_grid[MAX_CELLS];
|
|
int start_x = 160, start_y = 115, cell_count = 0;
|
|
int spacing_x = 32, spacing_y = 28;
|
|
|
|
for (int r = -2; r <= 2; r++) {
|
|
int max_c = 5 - abs(r);
|
|
for (int c = 0; c < max_c; c++) {
|
|
if (cell_count >= MAX_CELLS) break;
|
|
hex_grid[cell_count] = lv_obj_create(scr);
|
|
lv_obj_set_size(hex_grid[cell_count], 26, 26);
|
|
lv_obj_set_style_radius(hex_grid[cell_count], LV_RADIUS_CIRCLE, LV_PART_MAIN);
|
|
int px = start_x + (c * spacing_x) - ((max_c - 1) * spacing_x / 2);
|
|
int py = start_y + (r * spacing_y);
|
|
lv_obj_set_pos(hex_grid[cell_count], px - 13, py - 13);
|
|
lv_obj_set_style_bg_color(hex_grid[cell_count], lv_color_make(30, 40, 50), LV_PART_MAIN);
|
|
cell_count++;
|
|
}
|
|
}
|
|
|
|
int dev_id = hci_get_route(NULL);
|
|
int h_fd = hci_open_dev(dev_id);
|
|
int input_fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK);
|
|
struct input_event ev;
|
|
|
|
while (1) {
|
|
lv_timer_handler();
|
|
if (rand() % 8 == 0) {
|
|
int target = rand() % MAX_CELLS;
|
|
lv_obj_set_style_bg_color(hex_grid[target], (rand() % 2) ? COLOR_PRIMARY : COLOR_ACCENT, LV_PART_MAIN);
|
|
}
|
|
if (input_fd >= 0 && read(input_fd, &ev, sizeof(struct input_event)) > 0) {
|
|
if (ev.type == EV_KEY && ev.code == 158 && ev.value == 1) break;
|
|
}
|
|
usleep(40000);
|
|
}
|
|
if (h_fd >= 0) close(h_fd);
|
|
if (input_fd >= 0) close(input_fd);
|
|
return 0;
|
|
}
|
|
EOF
|
|
|
|
echo "[*] Embedding automated USB script injection framework [ducky.c]..."
|
|
cat << 'EOF' > ducky.c
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <string.h>
|
|
#include "h2_ui.h"
|
|
|
|
int main(void) {
|
|
init_h2_graphics_runtime("HID KEYSTROKE INJECTOR");
|
|
lv_obj_t *scr = lv_scr_act();
|
|
|
|
lv_obj_t *title = lv_label_create(scr);
|
|
lv_label_set_text(title, "AUTOMATED USB HID INJECTION");
|
|
lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 15);
|
|
lv_obj_set_style_text_color(title, COLOR_PRIMARY, LV_PART_MAIN);
|
|
|
|
lv_obj_t *status = lv_label_create(scr);
|
|
lv_label_set_text(status, "Reading sequence rules from /data/payload.dd...");
|
|
lv_obj_align(status, LV_ALIGN_CENTER, 0, 0);
|
|
|
|
int input_fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK);
|
|
struct input_event ev;
|
|
while (1) {
|
|
lv_timer_handler();
|
|
if (input_fd >= 0 && read(input_fd, &ev, sizeof(struct input_event)) > 0) {
|
|
if (ev.type == EV_KEY && ev.code == 158 && ev.value == 1) break;
|
|
}
|
|
usleep(20000);
|
|
}
|
|
if (input_fd >= 0) close(input_fd);
|
|
return 0;
|
|
}
|
|
EOF
|
|
|
|
echo "[*] Embedding target hardware storage asset tool [extract.c]..."
|
|
cat << 'EOF' > extract.c
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <sys/stat.h>
|
|
#include "h2_ui.h"
|
|
|
|
int main(void) {
|
|
init_h2_graphics_runtime("DATA ASSET EXTRACTION");
|
|
lv_obj_t *scr = lv_scr_act();
|
|
|
|
lv_obj_t *title = lv_label_create(scr);
|
|
lv_label_set_text(title, "MASS STORAGE EXTRACTOR");
|
|
lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 15);
|
|
lv_obj_set_style_text_color(title, COLOR_PRIMARY, LV_PART_MAIN);
|
|
|
|
lv_obj_t *list = lv_list_create(scr);
|
|
lv_obj_set_size(list, 280, 140);
|
|
lv_obj_align(list, LV_ALIGN_CENTER, 0, 15);
|
|
|
|
struct stat st;
|
|
if (stat("/mnt/target_media", &st) == 0 && S_ISDIR(st.st_mode)) {
|
|
lv_list_add_text(list, "[FOUND] Target mount online. Syncing elements...");
|
|
} else {
|
|
lv_list_add_text(list, "[IDLE] Waiting for mount path connection hook...");
|
|
}
|
|
|
|
int input_fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK);
|
|
struct input_event ev;
|
|
while (1) {
|
|
lv_timer_handler();
|
|
if (input_fd >= 0 && read(input_fd, &ev, sizeof(struct input_event)) > 0) {
|
|
if (ev.type == EV_KEY && ev.code == 158 && ev.value == 1) break;
|
|
}
|
|
usleep(20000);
|
|
}
|
|
if (input_fd >= 0) close(input_fd);
|
|
return 0;
|
|
}
|
|
EOF
|
|
|
|
echo "[*] Embedding hardware USB TRNG pipe engine [noise.c]..."
|
|
cat << 'EOF' > noise.c
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <sys/random.h>
|
|
#include "h2_ui.h"
|
|
|
|
int main(void) {
|
|
init_h2_graphics_runtime("USB TRNG HARDWARE PIPE");
|
|
lv_obj_t *scr = lv_scr_act();
|
|
|
|
lv_obj_t *title = lv_label_create(scr);
|
|
lv_label_set_text(title, "USB HARDWARE TRNG STREAM");
|
|
lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 10);
|
|
lv_obj_set_style_text_color(title, COLOR_PRIMARY, LV_PART_MAIN);
|
|
|
|
lv_obj_t *status = lv_label_create(scr);
|
|
lv_label_set_text(status, "Piping true entropy to host CDC serial...\nNode: /dev/ttyGS0");
|
|
lv_obj_align(status, LV_ALIGN_CENTER, 0, 0);
|
|
|
|
int serial_fd = open("/dev/ttyGS0", O_WRONLY | O_NOCTTY);
|
|
int input_fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK);
|
|
struct input_event ev;
|
|
uint8_t entropy_block[32];
|
|
|
|
while (1) {
|
|
lv_timer_handler();
|
|
if (getrandom(entropy_block, sizeof(entropy_block), GRND_RANDOM) == sizeof(entropy_block)) {
|
|
if (serial_fd != -1) write(serial_fd, entropy_block, sizeof(entropy_block));
|
|
}
|
|
if (input_fd >= 0 && read(input_fd, &ev, sizeof(struct input_event)) > 0) {
|
|
if (ev.type == EV_KEY && ev.code == 158 && ev.value == 1) break;
|
|
}
|
|
usleep(10000);
|
|
}
|
|
if (serial_fd != -1) close(serial_fd);
|
|
if (input_fd >= 0) close(input_fd);
|
|
return 0;
|
|
}
|
|
EOF
|
|
|
|
echo "[*] Embedding hardware stack restoration rescue module [reset.c]..."
|
|
cat << 'EOF' > reset.c
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <linux/input.h>
|
|
#include "h2_ui.h"
|
|
|
|
int main(void) {
|
|
init_h2_graphics_runtime("CORE HARDWARE STACK RESET");
|
|
lv_obj_t *scr = lv_scr_act();
|
|
|
|
lv_obj_t *title = lv_label_create(scr);
|
|
lv_label_set_text(title, "SYSTEM STACK RESTORATION");
|
|
lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 15);
|
|
lv_obj_set_style_text_color(title, COLOR_PRIMARY, LV_PART_MAIN);
|
|
|
|
lv_obj_t *box = lv_obj_create(scr);
|
|
lv_obj_set_size(box, 290, 140);
|
|
lv_obj_align(box, LV_ALIGN_CENTER, 0, 15);
|
|
|
|
lv_obj_t *status_lbl = lv_label_create(box);
|
|
lv_label_set_text(status_lbl, "WARNING: This routine drops connections,\nclears memory pools, and updates maps.\n\n[CLICK RE-ENCODER DIAL TO PURGE]");
|
|
lv_obj_align(status_lbl, LV_ALIGN_CENTER, 0, 0);
|
|
lv_obj_set_style_text_align(status_lbl, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN);
|
|
|
|
int input_fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK);
|
|
struct input_event ev;
|
|
int confirmed = 0;
|
|
|
|
while (1) {
|
|
lv_timer_handler();
|
|
if (input_fd >= 0 && read(input_fd, &ev, sizeof(struct input_event)) > 0) {
|
|
if (ev.type == EV_KEY && ev.code == 158 && ev.value == 1) break;
|
|
if (ev.type == EV_KEY && ev.code == 164 && ev.value == 1) { confirmed = 1; break; }
|
|
}
|
|
usleep(15000);
|
|
}
|
|
|
|
if (confirmed) {
|
|
lv_label_set_text(status_lbl, "EXECUTING RE-PROVISION SYSTEM FLOW...\nDO NOT POWER DOWN");
|
|
lv_obj_set_style_text_color(status_lbl, COLOR_PRIMARY, LV_PART_MAIN);
|
|
lv_timer_handler();
|
|
|
|
system("killall -9 dosbox 2>/dev/null");
|
|
system("ip link set usb0 down 2>/dev/null");
|
|
system("rm -rf /data/loot_drop/* 2>/dev/null");
|
|
sync();
|
|
|
|
lv_label_set_text(status_lbl, "PURGE TIMEOUT COMPLETED!\nAll defaults restored neatly.\n\n[Press exit to close out]");
|
|
while (1) {
|
|
lv_timer_handler();
|
|
if (input_fd >= 0 && read(input_fd, &ev, sizeof(struct input_event)) > 0) {
|
|
if (ev.type == EV_KEY && ev.code == 158 && ev.value == 1) break;
|
|
}
|
|
usleep(15000);
|
|
}
|
|
}
|
|
if (input_fd >= 0) close(input_fd);
|
|
return 0;
|
|
}
|
|
EOF
|
|
|
|
# ==============================================================================
|
|
# 5. DYNAMIC ORCHESTRATION PIPELINE ENGINE (Makefile)
|
|
# ==============================================================================
|
|
echo "[*] Embedding target cross-compilation matrix [Makefile]..."
|
|
cat << 'EOF' > Makefile
|
|
CC = mipsel-linux-musl-gcc
|
|
CFLAGS = -march=mips32r2 -mhard-float -O3 -Wall -DLV_CONF_INCLUDE_SIMPLE -I. -I./lvgl -I./lv_drivers
|
|
LIBS = -lm -lpthread -lbluetooth
|
|
|
|
TARGET = overlay/usr/bin/h2_test
|
|
MOD_DIR = overlay/apps
|
|
|
|
LVGL_SRC = lvgl/src/core/lv_obj.c \
|
|
lvgl/src/core/lv_disp.c \
|
|
lvgl/src/core/lv_event.c \
|
|
lvgl/src/core/lv_group.c \
|
|
lvgl/src/core/lv_theme.c \
|
|
lvgl/src/draw/lv_draw.c \
|
|
lvgl/src/misc/lv_anim.c \
|
|
lvgl/src/misc/lv_area.c \
|
|
lvgl/src/misc/lv_color.c \
|
|
lvgl/src/misc/lv_ll.c \
|
|
lvgl/src/misc/lv_mem.c \
|
|
lvgl/src/misc/lv_timer.c \
|
|
lvgl/src/misc/lv_txt.c \
|
|
lv_drivers/display/fbdev.c \
|
|
lv_drivers/indev/evdev.c
|
|
|
|
OBJ = $(LVGL_SRC:.c=.o)
|
|
|
|
BINS = $(MOD_DIR)/vault.mod \
|
|
$(MOD_DIR)/nettap.mod \
|
|
$(MOD_DIR)/deploy.mod \
|
|
$(MOD_DIR)/studio.mod \
|
|
$(MOD_DIR)/probe.mod \
|
|
$(MOD_DIR)/vterm.mod \
|
|
$(MOD_DIR)/radar.mod \
|
|
$(MOD_DIR)/ducky.mod \
|
|
$(MOD_DIR)/extract.mod \
|
|
$(MOD_DIR)/noise.mod \
|
|
$(MOD_DIR)/reset.mod
|
|
|
|
all: submodules $(TARGET) modules
|
|
|
|
submodules:
|
|
@if [ ! -d "lvgl/src" ]; then \
|
|
echo "Downloading underlying graphical frameworks..."; \
|
|
git clone --depth 1 -b v8.3.11 https://github.com/lvgl/lvgl.git; \
|
|
git clone --depth 1 -b v8.3.0 https://github.com/lvgl/lv_drivers.git; \
|
|
cp lvgl/lv_conf_template.h lv_conf.h; \
|
|
sed -i 's/#if 0/#if 1/' lv_conf.h; \
|
|
cp lv_drivers/lv_drv_conf_template.h lv_drv_conf.h; \
|
|
sed -i 's/#if 0/#if 1/' lv_drv_conf.h; \
|
|
sed -i 's/USE_FBDEV 0/USE_FBDEV 1/' lv_drv_conf.h; \
|
|
sed -i 's/USE_EVDEV 0/USE_EVDEV 1/' lv_drv_conf.h; \
|
|
fi
|
|
|
|
$(TARGET): main.c $(OBJ)
|
|
$(CC) $(CFLAGS) main.c $(OBJ) -o $(TARGET) $(LIBS)
|
|
mipsel-linux-musl-strip $(TARGET)
|
|
|
|
modules: $(BINS)
|
|
|
|
$(MOD_DIR)/vault.mod: vault.c $(OBJ)
|
|
$(CC) $(CFLAGS) vault.c $(OBJ) -o $(MOD_DIR)/vault.mod $(LIBS)
|
|
mipsel-linux-musl-strip $(MOD_DIR)/vault.mod
|
|
|
|
$(MOD_DIR)/nettap.mod: scalpel.c $(OBJ)
|
|
$(CC) $(CFLAGS) scalpel.c $(OBJ) -o $(MOD_DIR)/nettap.mod $(LIBS)
|
|
mipsel-linux-musl-strip $(MOD_DIR)/nettap.mod
|
|
|
|
$(MOD_DIR)/deploy.mod: deploy.c $(OBJ)
|
|
$(CC) $(CFLAGS) deploy.c $(OBJ) -o $(MOD_DIR)/deploy.mod $(LIBS)
|
|
mipsel-linux-musl-strip $(MOD_DIR)/deploy.mod
|
|
|
|
$(MOD_DIR)/studio.mod: studio.c $(OBJ)
|
|
$(CC) $(CFLAGS) studio.c $(OBJ) -o $(MOD_DIR)/studio.mod $(LIBS)
|
|
mipsel-linux-musl-strip $(MOD_DIR)/studio.mod
|
|
|
|
$(MOD_DIR)/probe.mod: probe.c $(OBJ)
|
|
$(CC) $(CFLAGS) probe.c $(OBJ) -o $(MOD_DIR)/probe.mod $(LIBS)
|
|
mipsel-linux-musl-strip $(MOD_DIR)/probe.mod
|
|
|
|
$(MOD_DIR)/vterm.mod: vterm.c $(OBJ)
|
|
$(CC) $(CFLAGS) vterm.c $(OBJ) -o $(MOD_DIR)/vterm.mod $(LIBS)
|
|
mipsel-linux-musl-strip $(MOD_DIR)/vterm.mod
|
|
|
|
$(MOD_DIR)/radar.mod: noise_radar.c $(OBJ)
|
|
$(CC) $(CFLAGS) noise_radar.c $(OBJ) -o $(MOD_DIR)/radar.mod $(LIBS)
|
|
mipsel-linux-musl-strip $(MOD_DIR)/radar.mod
|
|
|
|
$(MOD_DIR)/ducky.mod: ducky.c $(OBJ)
|
|
$(CC) $(CFLAGS) ducky.c $(OBJ) -o $(MOD_DIR)/ducky.mod $(LIBS)
|
|
mipsel-linux-musl-strip $(MOD_DIR)/ducky.mod
|
|
|
|
$(MOD_DIR)/extract.mod: extract.c $(OBJ)
|
|
$(CC) $(CFLAGS) extract.c $(OBJ) -o $(MOD_DIR)/extract.mod $(LIBS)
|
|
mipsel-linux-musl-strip $(MOD_DIR)/extract.mod
|
|
|
|
$(MOD_DIR)/noise.mod: noise.c $(OBJ)
|
|
$(CC) $(CFLAGS) noise.c $(OBJ) -o $(MOD_DIR)/noise.mod $(LIBS)
|
|
mipsel-linux-musl-strip $(MOD_DIR)/noise.mod
|
|
|
|
$(MOD_DIR)/reset.mod: reset.c $(OBJ)
|
|
$(CC) $(CFLAGS) reset.c $(OBJ) -o $(MOD_DIR)/reset.mod $(LIBS)
|
|
mipsel-linux-musl-strip $(MOD_DIR)/reset.mod
|
|
|
|
%.o: %.c
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
clean:
|
|
rm -f $(OBJ) overlay/usr/bin/* overlay/apps/*
|
|
EOF
|
|
|
|
echo "======================================================================"
|
|
echo " [SUCCESS] H2 EXTENDED OPERATING SOFTWARE MASTER PLATFORM CONSOLIDATED"
|
|
echo " Workspace Path: ${WORKSPACE_DIR} "
|
|
echo " Execute 'make' inside directory to process complete cross-compilation."
|
|
echo "======================================================================" |