Merge branch 'main' into rework-nic-state-code

This commit is contained in:
BuGu
2025-02-24 10:13:08 +08:00
committed by GitHub
124 changed files with 15500 additions and 1683 deletions

View File

View File

@@ -8,9 +8,9 @@ using namespace maix::sys;
extern kvm_sys_state_t kvm_sys_state;
extern kvm_oled_state_t kvm_oled_state;
void new_app_init(uint8_t safe_update)
void new_app_init(void)
{
// first start
// Update the necessary scripts
system("cp -f /kvmapp/system/update-nanokvm.py /etc/kvm/");
system("rm /etc/init.d/S02udisk");
system("cp /kvmapp/system/init.d/S01fs /etc/init.d/");
@@ -18,18 +18,26 @@ void new_app_init(uint8_t safe_update)
system("cp /kvmapp/system/init.d/S15kvmhwd /etc/init.d/");
system("cp /kvmapp/system/init.d/S30eth /etc/init.d/");
system("cp /kvmapp/system/init.d/S50sshd /etc/init.d/");
if(kvm_wifi_exist()) system("cp /kvmapp/system/init.d/S30wifi /etc/init.d/");
else system("rm /etc/init.d/S30wifi");
system("cp /kvmapp/system/init.d/S98tailscaled /etc/init.d/");
if(safe_update == 0){
system("cp /kvmapp/system/init.d/S95nanokvm /etc/init.d/"); // /kvmapp/system/init.d/S95nanokvm还没跑完直接覆盖可能出问题
if(kvm_wifi_exist()) {
system("cp /kvmapp/system/init.d/S30wifi /etc/init.d/");
} else {
system("rm /etc/init.d/S30wifi");
}
// system("rm /etc/init.d/S04backlight");
// system("rm /etc/init.d/S05tp");
// system("rm /etc/init.d/S40bluetoothd");
// system("rm /etc/init.d/S99*");
// PCIe Patch
// system("cp /kvmapp/system/init.d/S95nanokvm /etc/init.d/");
if(access("/kvmapp/jpg_stream/dl_lib/libmaixcam_lib.so", F_OK) != 0){
system("cp /kvmapp/system/init.d/S95nanokvm /etc/init.d/");
}
// Remove unnecessary components to speed up boot time
system("rm /etc/init.d/S04backlight");
system("rm /etc/init.d/S05tp");
system("rm /etc/init.d/S40bluetoothd");
system("rm /etc/init.d/S50ssdpd");
system("rm /etc/init.d/S99*");
// Add necessary configuration files for program execution
system("mkdir /kvmapp/kvm");
system("mkdir /etc/kvm");
system("echo 0 > /kvmapp/kvm/now_fps");
@@ -42,9 +50,8 @@ void new_app_init(uint8_t safe_update)
// rm jpg_stream & kvm_stream
system("rm -r /kvmapp/jpg_stream");
system("rm /kvmapp/kvm_system/kvm_stream");
system("rm /kvmapp/kvm_system/kvm_stream"); // Cannot delete temporarily; the old production test script uses this file to determine if the download is complete
// rm kvm_new_app
system("rm /kvmapp/kvm_new_app");
system("sync");
// system("/etc/init.d/S95nanokvm restart");
@@ -106,9 +113,15 @@ void new_app_init(uint8_t safe_update)
if(access("/root/old/kvm_new_img", F_OK) == 0){
system("rm -r /root/old");
}
system("sync");
system("killall NanoKVM-Server");
system("rm -r /tmp/server");
system("cp -r /kvmapp/server /tmp/");
system("/tmp/server/NanoKVM-Server &");
}
void update_resolv_conf(void)
void build_complete_resolv(void)
{
FILE *fp = NULL;
// fp = fopen("/boot/resolv.conf", "w+");
@@ -122,121 +135,8 @@ void update_resolv_conf(void)
system("cp -vf /boot/resolv.conf /etc/resolv.conf");
}
void init_upadte(void)
void new_img_init(void)
{
if(access("/kvmapp/kvm_new_app", F_OK) == 0){
new_app_init(0);
}
// PCIe Patch
if(access("/kvmapp/jpg_stream/dl_lib/libmaixcam_lib.so", F_OK) == 0){
system("cp -f /kvmapp/jpg_stream/dl_lib/libmaixcam_lib.so /kvmapp/kvm_system/dl_lib/");
new_app_init(1);
}
// DNS Patch
system("tailscale set --accept-dns=false");
if(access("/boot/resolv.conf", F_OK) != 0){
// 不存在直接覆盖
update_resolv_conf();
} else {
// 存在则检测是否拷贝/DNS是否正确
uint8_t RW_Data[10] = {0};
FILE *fp;
fp = popen("cat /etc/resolv.conf | grep 119.29.29.29", "r");
fgets((char*)RW_Data, 2, fp);
pclose(fp);
if(RW_Data[0] != 'n') {
update_resolv_conf();
}
}
// libmaixcam_lib.so
if(access("/kvmapp/kvm_system/dl_lib/libmaixcam_lib.so", F_OK) == 0){
// exist
system("cp -f /kvmapp/kvm_system/dl_lib/libmaixcam_lib.so /kvmapp/server/dl_lib");
} else {
printf("kvm_system not exist lib!\n");
}
system("sync");
system("killall NanoKVM-Server");
system("rm -r /tmp/server");
system("cp -r /kvmapp/server /tmp/");
system("/tmp/server/NanoKVM-Server &");
}
void first_start(void)
{
if(access("/kvmapp/kvm_new_img", F_OK) == 0){
// init oled
OLED_state = oled_exist();
if(OLED_state){
printf("oled exist\r\n");
} else {
printf("oled not exist\r\n");
}
if(OLED_state){
OLED_Init();
OLED_ColorTurn(0); //0正常显示 1 反色显示
OLED_DisplayTurn(0); //0正常显示 1 屏幕翻转显示
// OLED_INIT_UI();
if(kvm_hw_ver == 2){
OLED_Revolve();
}
}
uint8_t update_begin = 0;
while(1){
if(kvm_sys_state.eth_state == NIC_STATE_UP){
OLED_Clear();
if(kvm_hw_ver != 2){
if(update_begin == 0){
update_begin = 1;
OLED_ShowString(1, 2, "Auto-updating...", 16);
OLED_ShowStringtoend(1, 4, (char*)kvm_sys_state.eth_addr, 16, 0);
system("python /kvmapp/system/update-nanokvm.py");
} else {
OLED_ShowString(1, 0, "Auto-update fail", 16);
OLED_ShowString(1, 2, "Please open the ", 16);
OLED_ShowStringtoend(1, 4, (char*)kvm_sys_state.eth_addr, 16, 0);
OLED_ShowString(1, 6, "update KVM APP ", 16);
}
} else {
// PCIe
if(update_begin == 0){
update_begin = 1;
OLED_ShowString(0, 1, "Updating...", 8);
OLED_ShowString_AlignRight(AlignRightEND_P, 2, (char*)kvm_sys_state.eth_addr, 4);
system("python /kvmapp/system/update-nanokvm.py");
} else {
OLED_ShowString(0, 0, "Update fail", 8);
OLED_ShowString(0, 1, "Please open", 8);
OLED_ShowString_AlignRight(AlignRightEND_P, 2, (char*)kvm_sys_state.eth_addr, 4);
OLED_ShowString(0, 3, "update APP" , 8);
}
}
while(1){
time::sleep_ms(1000);
if(kvm_sys_state.eth_state == NIC_STATE_DOWN) {
OLED_Clear();
break;
}
}
} else {
get_ip_addr(ETH_ROUTE);
if(kvm_hw_ver != 2){
OLED_ShowString(1, 2, " Please connect ", 16);
OLED_ShowString(1, 4, " to the network ", 16);
OLED_ShowString(1, 6, " to update app ", 16);
} else {
// PCIe
OLED_ShowString(0, 0, "Please link", 8);
OLED_ShowString(0, 1, "to network", 8);
OLED_ShowString(0, 2, "update APP" , 8);
}
time::sleep_ms(10);
}
}
}
build_complete_resolv();
system("rm /kvmapp/kvm_new_img");
}

View File

@@ -2,9 +2,8 @@
#define SYSTEM_INIT_H_
#include "config.h"
void new_app_init(uint8_t safe_update);
void update_resolv_conf(void);
void init_upadte(void);
void first_start(void);
void new_img_init(void);
void new_app_init(void);
#endif // SYSTEM_INIT_H_

View File

@@ -186,9 +186,17 @@ int main(int argc, char* argv[])
pthread_t display_thread;
pthread_t key_thread;
// first_start();
// Execute only when it's a new image
if(access("/kvmapp/kvm_new_img", F_OK) == 0){
new_img_init();
}
init_upadte();
// Execute only when it's a new app
if(access("/kvmapp/kvm_new_app", F_OK) == 0){
new_app_init();
}
system("sync");
OLED_state = oled_exist();
if(OLED_state){