海思機頂盒Hi3798使用Hitool和TTL備份並燒錄海納思Linux伺服器系統固件

来源:https://www.cnblogs.com/Sky-seeker/archive/2023/04/10/17302989.html
-Advertisement-
Play Games

介紹了使用海思 CPU 的機頂盒的固件備份和燒錄。通過 USB-TTL 串口燒錄器 CH340 連接機頂盒,使用華為海思刷機工具 HiTool 創建和修改分區表文件,備份和燒寫固件,通過升級包升級系統。在海納思系統中安裝homeassistant,通過 FTP、WebDAV、Alist雲盤訪問文件,... ...


海思機頂盒Hi3798使用Hitool和TTL備份並燒錄海納思Linux伺服器系統固件

摘要

  • 介紹了使用海思 CPU 的機頂盒的固件備份和燒錄。通過 USB-TTL 串口燒錄器 CH340 連接機頂盒,使用華為海思刷機工具 HiTool 創建和修改分區表文件,備份和燒寫固件,通過升級包升級系統。在海納思系統中安裝homeassistant,通過 FTP、WebDAV、Alist雲盤訪問文件,真實的 CPU 型號和 reg name 的確定,以及加快燒寫速度的方法。

背景說明

  • 使用 Home assistant(後文縮寫為 HA)需要個人伺服器,根據不同的情況有不同的家用 Linux 伺服器方案。

    伺服器方案 優點 缺點
    舊手機 體積小、功耗低、價格低 性能低、網路受限
    機頂盒 體積小、功耗低、價格低 性能低、網路受限
    樹莓派 體積小、功耗低 價格貴、性能中、網路受限
    迷你主機 體積小、價格中 功耗中、性能中、網路受限
    NAS 體積中、價格中 功耗高、性能高、網路受限
    電腦/伺服器 性能高 價格貴、體積大、功耗高、網路受限
    雲伺服器 網路不受限,性能高 價格貴
  • 舊手機可用於簡單的功能驗證,安裝較為複雜,也容易出現問題。目前常用的方案有termuxtermux+prootAlpine Term+dockerlinux deploy(需要 root 許可權)。termux 和 termux+proot 方案主要是通過安裝 Python 來安裝 HA。經過嘗試,termux 安裝 HA 會出現依賴報錯;termux+proot+debian 啟動 HA 時會出現版本錯誤的提示;Alpine Term+docker 安裝 HA 後可以正常運行,但性能極低卡頓嚴重。

  • 機頂盒可用於簡單的個人使用,安裝難度一般,不容易出現問題。目前常用的有Armbian海納思系統這兩種方案,主要是通過安裝 docker 來安裝 HA。海納思系統 主要支持海思晶元中的 Hi3798MV100Hi3798MV200Hi3798MV300 ,不支持Hi3798MV300H 等帶尾碼的處理器。Armbian 主要支持晶晨晶元中的 S9xx 系列。

  • 原本是打算對型號為CM211-2的機頂盒進行刷機,後來發現 CPU 型號為Hi3798MV300H。於是改為對型號為HG680-j且 CPU 為Hi3798MV100的機頂盒進行刷機。

操作實踐

前提要求

獲取系統信息

  1. 使用網線將接機頂盒和電腦連接到網路,使用導線連接機頂盒和 USB-TTL 串口燒錄工具。
    HiTool主界面

  2. 打開HiTool後點擊HiBurn
    HiTool主界面

  3. 設置PC 與板端配置參數。設置 本地 PC 配置下的串口伺服器 IP板端配置下的IP 地址網關串口 為 USB-TTL 串口燒錄器所使用的埠號(查看方式:控制面板 -> 設備管理器 -> 埠(COM 和 LPT)),伺服器 IP 為電腦的 IP 地址。 IP 地址 為機頂盒的 IP 地址,網關一般保持預設即可 。傳輸方式 選擇 網口(推薦)
    PC與板端配置

  4. 獲取中央處理器型號和管腳配置表。點擊 打開終端工具 ,然後點擊連接,最後給機頂盒上電。啟動信息中的 Reg Name 包含管腳配置表、中央處理器型號、記憶體規格、PCB 板層數、快閃記憶體類型。
    打開終端工具

  5. 查看分區表。對於型號為CM211-2且 CPU 為Hi3798MV300H的機頂盒,啟動信息中會顯示分區表信息。而對於型號為HG680-j且 CPU 為Hi3798MV100的機頂盒,啟動信息中不會顯示分區表,需要執行cat /proc/cmdline命令查看分區表信息。
    啟動信息中顯示分區表
    執行命令查看分區表

  6. 查看掛載信息。執行mount命令查看系統中所有的掛載文件系統。
    執行命令查看掛載信息

  7. 查看快閃記憶體塊分區。對於型號為CM211-2機頂盒,執行cd /dev/block/platform/soc/by-namels -al命令查看快閃記憶體塊分區所指向的分區名。而對於型號為HG680-j機頂盒,執行cd /dev/block/platform/hi_mci.1/by-namels -al命令查看快閃記憶體塊分區所指向的分區名。對於其它機頂盒,可在/dev/block/platform下的目錄的子目錄中尋找by-name文件夾。
    執行命令查看快閃記憶體塊分區

  8. 查看文件系統信息。執行df命令查看系統中分區的大小和使用量。
    執行命令查看文件系統信息

  9. 根據系統中分區的使用量,清理無用信息為數據備份做準備。軟體卸載可使用開心電視助手軟體,此軟體還可以便捷的獲取分區表、掛載信息、文件系統信息等。
    使用開心電視助手獲取系統信息

創建和修改分區表

  1. 設置晶元型號。點擊晶元 -> 切換晶元 -> Hi3798MV100
    設置晶元型號

  2. 點擊 燒寫 eMMC,點擊表格右側的綠色的加號以創建新的分區。

  3. 點擊名稱項,根據分區表輸入分區名,並遵循快閃記憶體塊分區中的區塊順序(從mmcblk0p1mmcblk0p17)。

  4. 點擊文件項裡面的右側的文件夾圖標(選中時出現),在彈出的對話框中選擇文件路徑併在輸入文件名後點擊打開,建議文件名與分區名一致。

  5. 點擊長度項,根據分區表設置對應分區的大小。

  6. 點擊文件系統項,根據掛載信息選擇對應分區的文件系統。此項隻影響燒錄的速度。

  7. 勾選要操作的分區前面的覆選框。

  8. 點擊eMMC分區表文件右側的瀏覽,在彈出的對話框中選擇文件路徑併在輸入文件名後點擊打開,然後點擊保存。建議文件名包含設備的 CPU 型號和快閃記憶體類型。
    創建分區表文件

操作固件

備份固件

方法一:TTL+HiTool

  1. 在創建和修改分區表的最後一步點擊上傳

  2. 彈出對話框後關閉機頂盒電源。

  3. 開啟機頂盒電源。

  4. 等待對話框中的上傳的進度條結束。
    上傳固件

方法二:TTL+U 盤

  1. 點擊 打開終端工具 ,然後點擊連接,最後給機頂盒上電。

  2. 執行df命令查看系統中分區的使用情況。

  3. 插入 U 盤(FAT32 格式)後執行df命令查看系統中分區的使用情況,新出現的/mnt/sda/sda1表示 U 盤掛載成功。

  4. 執行cd /dev/block/platform/soc/by-namels -al命令查看快閃記憶體塊分區所指向的分區名。

    root@Hi3798MV300:/ # cd /dev/block/platform/soc/by-name
    root@Hi3798MV300:/dev/block/platform/soc/by-name # ls -al
    lrwxrwxrwx root    root    1970-01-01 08:00 baseparam -> /dev/block/mmcblk0p5
    lrwxrwxrwx root    root    1970-01-01 08:00 boot -> /dev/block/mmcblk0p9
    lrwxrwxrwx root    root    1970-01-01 08:00 cache -> /dev/block/mmcblk0p14
    lrwxrwxrwx root    root    1970-01-01 08:00 fastboot -> /dev/block/mmcblk0p1
    lrwxrwxrwx root    root    1970-01-01 08:00 fastplay -> /dev/block/mmcblk0p8
    lrwxrwxrwx root    root    1970-01-01 08:00 logo -> /dev/block/mmcblk0p7
    lrwxrwxrwx root    root    1970-01-01 08:00 misc -> /dev/block/mmcblk0p10
    lrwxrwxrwx root    root    1970-01-01 08:00 partition -> /dev/block/mmcblk0p2
    lrwxrwxrwx root    root    1970-01-01 08:00 pqparam -> /dev/block/mmcblk0p6
    lrwxrwxrwx root    root    1970-01-01 08:00 recovery -> /dev/block/mmcblk0p3
    lrwxrwxrwx root    root    1970-01-01 08:00 securestore -> /dev/block/mmcblk0p12
    lrwxrwxrwx root    root    1970-01-01 08:00 swdb -> /dev/block/mmcblk0p13
    lrwxrwxrwx root    root    1970-01-01 08:00 swdevinfo -> /dev/block/mmcblk0p4
    lrwxrwxrwx root    root    1970-01-01 08:00 system -> /dev/block/mmcblk0p15
    lrwxrwxrwx root    root    1970-01-01 08:00 trustedcore -> /dev/block/mmcblk0p11
    lrwxrwxrwx root    root    1970-01-01 08:00 userdata -> /dev/block/mmcblk0p16
    
  5. 執行cd /mnt/sda/sda1命令以切換當前工作目錄為/mnt/sda/sda1,執行mkdir FW_BK命令以在當前工作目錄創建名為FW_BK的文件夾。

  6. 使用下麵的dd命令備份分區。對於比較大的分區,應執行dd if=/dev/block/platform/soc/by-name/userdata | gzip > /mnt/sda/sda1/FW_BK/userdata.bin.gz命令以先壓縮後輸出。

    dd if=/dev/block/platform/soc/by-name/fastboot of=/mnt/sda/sda1/FW_BK/fastboot.bin
    dd if=/dev/block/platform/soc/by-name/partition of=/mnt/sda/sda1/FW_BK/partition.bin
    dd if=/dev/block/platform/soc/by-name/recovery of=/mnt/sda/sda1/FW_BK/recovery.bin
    dd if=/dev/block/platform/soc/by-name/swdevinfo of=/mnt/sda/sda1/FW_BK/swdevinfo.bin
    dd if=/dev/block/platform/soc/by-name/baseparam of=/mnt/sda/sda1/FW_BK/baseparam.bin
    dd if=/dev/block/platform/soc/by-name/pqparam of=/mnt/sda/sda1/FW_BK/pqparam.bin
    dd if=/dev/block/platform/soc/by-name/logo of=/mnt/sda/sda1/FW_BK/logo.bin
    dd if=/dev/block/platform/soc/by-name/fastplay of=/mnt/sda/sda1/FW_BK/fastplay.bin
    dd if=/dev/block/platform/soc/by-name/boot of=/mnt/sda/sda1/FW_BK/boot.bin
    dd if=/dev/block/platform/soc/by-name/misc of=/mnt/sda/sda1/FW_BK/misc.bin
    dd if=/dev/block/platform/soc/by-name/trustedcore of=/mnt/sda/sda1/FW_BK/trustedcore.bin
    dd if=/dev/block/platform/soc/by-name/securestore of=/mnt/sda/sda1/FW_BK/securestore.bin
    dd if=/dev/block/platform/soc/by-name/swdb of=/mnt/sda/sda1/FW_BK/swdb.bin
    dd if=/dev/block/platform/soc/by-name/cache of=/mnt/sda/sda1/FW_BK/cache.bin
    dd if=/dev/block/platform/soc/by-name/system of=/mnt/sda/sda1/FW_BK/system.bin
    dd if=/dev/block/platform/soc/by-name/userdata of=/mnt/sda/sda1/FW_BK/userdata.bin
    

燒錄固件

方法一:TTL+HiTool

  1. 解壓海納思系統固件包TTL-hi3798mv100-202301.zip

  2. 點擊eMMC分區表文件右側的瀏覽,在彈出的對話框中選擇海納思系統固件包中的 eMMC 分區表文件後點擊打開

  3. 勾選需要燒錄的分區前面的覆選框。

  4. 點擊燒寫

  5. 彈出對話框後關閉機頂盒電源。

  6. 開啟機頂盒電源。

  7. 等待對話框中的燒寫的進度條結束。
    燒寫固件

方法二:TTL+U 盤

  1. 點擊 打開終端工具 ,然後點擊連接,最後給機頂盒上電。

  2. 執行df命令查看系統中分區的使用情況。

  3. 插入 U 盤(FAT32 格式)後執行df命令查看系統中分區的使用情況,新出現的/mnt/sda/sda1表示 U 盤掛載成功。

  4. 執行cd /dev/block/platform/soc/by-namels -al命令查看快閃記憶體塊分區所指向的分區名。

    root@Hi3798MV300:/ # cd /dev/block/platform/soc/by-name
    root@Hi3798MV300:/dev/block/platform/soc/by-name # ls -al
    lrwxrwxrwx root    root    1970-01-01 08:00 baseparam -> /dev/block/mmcblk0p5
    lrwxrwxrwx root    root    1970-01-01 08:00 boot -> /dev/block/mmcblk0p9
    lrwxrwxrwx root    root    1970-01-01 08:00 cache -> /dev/block/mmcblk0p14
    lrwxrwxrwx root    root    1970-01-01 08:00 fastboot -> /dev/block/mmcblk0p1
    lrwxrwxrwx root    root    1970-01-01 08:00 fastplay -> /dev/block/mmcblk0p8
    lrwxrwxrwx root    root    1970-01-01 08:00 logo -> /dev/block/mmcblk0p7
    lrwxrwxrwx root    root    1970-01-01 08:00 misc -> /dev/block/mmcblk0p10
    lrwxrwxrwx root    root    1970-01-01 08:00 partition -> /dev/block/mmcblk0p2
    lrwxrwxrwx root    root    1970-01-01 08:00 pqparam -> /dev/block/mmcblk0p6
    lrwxrwxrwx root    root    1970-01-01 08:00 recovery -> /dev/block/mmcblk0p3
    lrwxrwxrwx root    root    1970-01-01 08:00 securestore -> /dev/block/mmcblk0p12
    lrwxrwxrwx root    root    1970-01-01 08:00 swdb -> /dev/block/mmcblk0p13
    lrwxrwxrwx root    root    1970-01-01 08:00 swdevinfo -> /dev/block/mmcblk0p4
    lrwxrwxrwx root    root    1970-01-01 08:00 system -> /dev/block/mmcblk0p15
    lrwxrwxrwx root    root    1970-01-01 08:00 trustedcore -> /dev/block/mmcblk0p11
    lrwxrwxrwx root    root    1970-01-01 08:00 userdata -> /dev/block/mmcblk0p16
    
  5. 使用下麵的dd命令燒錄分區。備份的固件所在的位置為FW_BK文件夾。對於比較大的分區,應執行gzip -dc /mnt/sda/sda1/FW_BK/userdata.bin.gz | dd of=/dev/block/platform/soc/by-name/userdata命令以先解壓後輸出。

    dd if=/mnt/sda/sda1/FW_BK/fastboot.bin of=/dev/block/platform/soc/by-name/fastboot
    dd if=/mnt/sda/sda1/FW_BK/partition.bin of=/dev/block/platform/soc/by-name/partition
    dd if=/mnt/sda/sda1/FW_BK/recovery.bin of=/dev/block/platform/soc/by-name/recovery
    dd if=/mnt/sda/sda1/FW_BK/swdevinfo.bin of=/dev/block/platform/soc/by-name/swdevinfo
    dd if=/mnt/sda/sda1/FW_BK/baseparam.bin of=/dev/block/platform/soc/by-name/baseparam
    dd if=/mnt/sda/sda1/FW_BK/pqparam.bin of=/dev/block/platform/soc/by-name/pqparam
    dd if=/mnt/sda/sda1/FW_BK/logo.bin of=/dev/block/platform/soc/by-name/logo
    dd if=/mnt/sda/sda1/FW_BK/fastplay.bin of=/dev/block/platform/soc/by-name/fastplay
    dd if=/mnt/sda/sda1/FW_BK/boot.bin of=/dev/block/platform/soc/by-name/boot
    dd if=/mnt/sda/sda1/FW_BK/misc.bin of=/dev/block/platform/soc/by-name/misc
    dd if=/mnt/sda/sda1/FW_BK/trustedcore.bin of=/dev/block/platform/soc/by-name/trustedcore
    dd if=/mnt/sda/sda1/FW_BK/securestore.bin of=/dev/block/platform/soc/by-name/securestore
    dd if=/mnt/sda/sda1/FW_BK/swdb.bin of=/dev/block/platform/soc/by-name/swdb
    dd if=/mnt/sda/sda1/FW_BK/cache.bin of=/dev/block/platform/soc/by-name/cache
    dd if=/mnt/sda/sda1/FW_BK/system.bin of=/dev/block/platform/soc/by-name/system
    dd if=/mnt/sda/sda1/FW_BK/userdata.bin of=/dev/block/platform/soc/by-name/userdata
    

升級固件

  • 方法一:使用 TTL+HiTool+U 盤。燒寫recoveryrecovery,燒寫emmcmisc,然後重啟機頂盒以進入恢復模式,最後在恢復模式中選擇apply update from external storage後選擇 U 盤中的update.zip刷機包進行刷機。

  • 方法二:使用 TTL+U 盤或者ADB+U 盤。使用dd命令輸出recoveryrecoveryemmcmisc,然後執行reboot命令以重啟進入恢復模式,最後在恢復模式中選擇apply update from external storage後選擇 U 盤中的update.zip刷機包進行刷機。

  • 方法三:使用ADB或TTL或TTL+HiTool燒寫recovery後安裝原生版本的設置軟體包,進入原生版本的設置後選擇本地升級以升級系統。升級包必須被命名為update.zip並位於 U 盤的根目錄。軟體包一般被命名為SWProductCheck.apk,可在卡刷救磚相關教程中搜尋。

  • 方法四:把fastboot.binbootargs.binrecovery.img三個文件複製到U盤根目錄。短接強制刷機的短接點,然後打開機頂盒的電源,等待幾秒後鬆開短接。機頂盒就會載入U 盤中的fastboot.bin並引導 U 盤中的recovery.img進入恢復模式,最後在恢復模式中選擇apply update from external storage後選擇 U 盤中的update.zip刷機包進行刷機。

  • 方法五:把fastboot.binbootargs.binrecovery.img三個文件複製到U盤根目錄。使用ADB或TTL或TTL+HiTool擦除fastboot.bin分區。重啟後機頂盒就會載入U 盤中的fastboot.bin並引導 U 盤中的recovery.img進入恢復模式,最後在恢復模式中選擇apply update from external storage後選擇 U 盤中的update.zip刷機包進行刷機。

使用簡述

  • 在瀏覽器輸入機頂盒的IP地址以進入海納思系統首頁。

  • 在首頁點擊外網,然後點擊終端管理,初始用戶名和密碼分別為rootecoo1234,可通過passwd root命令修改當前系統 root 賬號的密碼。

  • 終端管理頁面輸入apt install minidlna安裝 MiniDLNA 軟體。系統內置有基本功能的軟體安裝腳本, 輸入以下命令即可自動安裝並自動配置軟體。Portainer 是可視化的容器鏡像圖形管理工具,青龍面板是支持 Python3、JavaScript、Shell、Typescript 腳本的定時任務管理平臺,Home Assistant 是基於 Python 3 開發的集成現有智能家居生態的開源家庭自動化平臺。

    install-portainer.sh        安裝 Docker 容器管理面板
    install-qinglong.sh         安裝 Docker 應用: 青龍面板
    install-homeassistant.sh    安裝智能家居控制面板
    
  • 支持通過 FTP 或 SCP 等方式對伺服器文檔進行管理,初始用戶名和密碼分別為ubuntuecoo1234。SFTP 模式的 22 埠可訪問根目錄, FTP 模式的 21 埠則只能訪問/home 目錄。

  • 內置的 WebDAV 伺服器在 8081 埠,初始用戶名和密碼分別為adminadmin,預設存儲位置在 /home/ubuntu/webdav

  • 內置的Alist雲盤支持多種存儲,支持網頁瀏覽和 WebDAV 訪問。初始用戶名和密碼分別為adminadmin123

  • 執行recoverbackup命令可以還原備份系統, 根分區內的數據將全部被原備份系統清除並覆蓋。

註意事項

  • 關於晶元型號:魔百盒 CM211-2 的 CPU 型號有 MV100、MV300、MV300H。實際的 CPU 型號以reg name中包含 CPU 型號或晶元本身的絲印為準。

  • 關於reg name:晶元待燒錄固件的fastboot中的reg name與機頂盒現有的fastboot中的reg name在管腳配置表和中央處理器型號上應保持一致,否則無法燒錄fastboot。啟動信息中顯示的reg name僅供參考,實際的管腳配置表以機頂盒現有的fastboot中的reg name包含的管腳配置表為準。
    CPU型號與reg name

  • 關於HiBurn中的傳輸方式:無論傳輸方式選擇串口還是網口,燒寫fastboot時,實際上都是通過串口來傳輸數據,因此非常慢。

  • 關於HiBurn中的文件系統:如果實際上存在文件系統但軟體中的文件系統被設置為none時,在進行燒寫操作時,分區鏡像將會以二進位的形式進行傳輸;如果設置為一個確定的文件系統,如ext3/4時,在進行燒寫操作時,分區鏡像將會以壓縮包的形式進行傳輸,即對鏡像先壓縮後傳輸,最後解壓並寫入分區。因此,在進行燒寫操作時,設置文件系統可以減少分區鏡像傳輸所需要的時間,最終加快總體的燒寫速度。對於上傳操作,無論是否設置軟體中的文件系統,上傳的分區鏡像總是以二進位的形式進行傳輸,不會改變上傳速度。

  • 關於壓縮:userdata分區的鏡像大小會超過 4GB,超過 FAT32 文件系統限制,所以需要壓縮。在使用dd命令時,結合分區的大小和使用量來決定是否進行壓縮可以有效的節省空間占用和傳輸時間。

  • 關於終端內容被覆蓋丟失:點擊視窗 -> 首選項 ,點擊終端後修改終端緩存行數。

  • 關於使用 HiTool 燒錄和備份固件失敗:點擊視窗 -> 首選項,然後點擊HiBurn,修改TFTP設置和命令設置。根據控制台的報錯信息來修改對應的參數。有時重新操作一次也會恢復正常。
    修改工具參數

參考資料


版權聲明:本文為「夢幻之心星」原創,依據 CC BY-NC-SA 4.0 許可證進行授權,轉載請附上原文出處鏈接及本聲明。


博客園地址:https://www.cnblogs.com/Sky-seeker
微信公眾號:關註微信公眾號,獲取即時推送
微信名:夢幻之心星 微信號:Sky-seeker



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 快速冪演算法 設計一個演算法計算$x^n$的值。 根據定義最常見也最能瞬間想到的是如下的演算法: // 遞歸寫法 public int pow1(int x, int n) { if (n == 0) return 1; if (n == 1) return x; return x * pow1(x, n ...
  • 第一步,添加Nuget包引用 需要添加兩個Nuget包分別是:Microsoft.AspNetCore.MiddlewareAnalysis和Microsoft.Extensions.DiagnosticAdapter,前者是分析記錄中間件核心代碼實現後者是用來接收日誌輸出的,由於是用的Diagno ...
  • .NET中的多線程-並行編程 在.NET框架中,多線程編程可以提高程式的性能和併發能力。.NET框架提供了一系列的類和API,用於簡化多線程編程。本文將介紹.NET中的多線程-並行編程,並給出一些示例代碼。 什麼是多線程? 多線程是指一個進程中有多個線程同時執行。每個線程都是獨立的執行路徑,可以同時 ...
  • 隨著技術的發展,ASP.NET Core MVC也推出了好長時間,經過不斷的版本更新迭代,已經越來越完善,本系列文章主要講解ASP.NET Core MVC開發B/S系統過程中所涉及到的相關內容,適用於初學者,在校畢業生,或其他想從事ASP.NET Core MVC 系統開發的人員。 ...
  • 本系列文章導航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址) 0.說明 CommunityToolkit.Mvvm8.1有一個重大更新的功能:源生成器功能,它 ...
  • 本系列文章導航 https://www.cnblogs.com/aierong/category/2297596.html 0.說明 CommunityToolkit.Mvvm包(又名MVVM 工具包,以前名為 Microsoft.Toolkit.Mvvm)是一個現代、快速且模塊化的 MVVM 庫。 ...
  • 哈嘍大家好,我是鹹魚。今天跟大家分享一個關於 Linux 服務(service)相關的案例 案例現象 我在 3 月 31日的時候發表了一篇《shell 腳本之一鍵部署安裝 Nginx》,介紹瞭如何通過 shell 腳本一鍵安裝 Nginx 我腳本中執行了 Nginx 開機自啟動的命令,當我使用 sy ...
  • 600 條最強 Linux 命令總結 每博一文案 你有千萬條微博想寫,可有些根本不重要,後來你才懂那是你怕別人看穿你所以才把真話埋在日常里。你有千萬句話想說,可點開那 個對話框,你根本打不出一個字。你才明白,原來你從一開始就怕別人看穿,所以寧可孤獨。所以你寧可每天嘻嘻哈哈,也不要被人看出來你真的難受 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...