diff --git a/support/kvm_system/README.md b/support/kvm_system/README.md new file mode 100644 index 0000000..e69de29 diff --git a/support/kvm_system/main/lib/system_init/system_init.cpp b/support/kvm_system/main/lib/system_init/system_init.cpp index f0c4cd3..9b17d51 100644 --- a/support/kvm_system/main/lib/system_init/system_init.cpp +++ b/support/kvm_system/main/lib/system_init/system_init.cpp @@ -7,9 +7,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/"); @@ -17,18 +17,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"); @@ -41,9 +49,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"); @@ -105,9 +112,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+"); @@ -121,121 +134,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(chack_net_state(ETH_ROUTE) && get_ip_addr(ETH_IP)){ - 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(chack_net_state(ETH_ROUTE) == 0) { - 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"); } \ No newline at end of file diff --git a/support/kvm_system/main/lib/system_init/system_init.h b/support/kvm_system/main/lib/system_init/system_init.h index b0a9e7c..9f84f17 100644 --- a/support/kvm_system/main/lib/system_init/system_init.h +++ b/support/kvm_system/main/lib/system_init/system_init.h @@ -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_ diff --git a/support/kvm_system/main/src/main.cpp b/support/kvm_system/main/src/main.cpp index 2476842..31c010d 100644 --- a/support/kvm_system/main/src/main.cpp +++ b/support/kvm_system/main/src/main.cpp @@ -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){