From 22e423a0e431ee868821364deefb019f05ccbd43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=91=E7=88=B1=E7=8E=A9=E5=8E=9F=E7=A5=9E?= <T202410623992546@eduxiji.net> Date: Wed, 31 Jul 2024 23:50:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=B3=E8=B5=9B=E7=AC=94=E8=AE=B0=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...6\345\214\272\351\227\256\351\242\230.png" | Bin 0 -> 39348 bytes Readme.md | 34 ++++++++++++++---- 2 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 "AB\345\210\206\345\214\272\351\227\256\351\242\230.png" diff --git "a/AB\345\210\206\345\214\272\351\227\256\351\242\230.png" "b/AB\345\210\206\345\214\272\351\227\256\351\242\230.png" new file mode 100644 index 0000000000000000000000000000000000000000..5001db02304c42b4884ae011dae87ef143af84b2 GIT binary patch literal 39348 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 MeqHm!pZ)6p09vwYf&c&j literal 0 HcmV?d00001 diff --git a/Readme.md b/Readme.md index 6efc7a1..ae88491 100644 --- a/Readme.md +++ b/Readme.md @@ -29,7 +29,14 @@ OTAä¼ è¾“å议:如HTTPã€HTTPSã€FTPç‰ï¼Œä»¥åŠOTAå‡çº§è¿‡ç¨‹ä¸çš„安全 针对赛题å„éƒ¨åˆ†çš„è°ƒç ”ç»“æžœ: -第一题: 在ubuntu系统ä¸ï¼Œç³»ç»Ÿé‡‡ç”¨grubé…ç½®æ–¹å¼æ¥å®ŒæˆæŒ‚è½½æ ¹ç›®å½•,bootç›®å½•ä»¥åŠæŒ‡å®šçš„å†…æ ¸æ–‡ä»¶å’Œinitrd文件,所以å¯ä»¥é€šè¿‡è‡ªå®šä¹‰grubèœå•ä¿¡æ¯å’Œç³»ç»Ÿé»˜è®¤å¯åЍ项 结åˆA/B分区å‡çº§ç–ç•¥æ¥å®Œæˆã€‚ä¿è¯ç”¨æˆ·åº”用é…ç½®å¯ä»¥åœ¨å‡çº§è¿‡ç¨‹ä¸æ‹‰å–系统当å‰çš„usr,etcç‰ç”¨æˆ·é…置相关文件对备用系统分区进行一个覆盖。 +åˆèµ›é˜¶æ®µ:在ubuntu系统ä¸ï¼Œç³»ç»Ÿé‡‡ç”¨grubé…ç½®æ–¹å¼æ¥å®ŒæˆæŒ‚è½½æ ¹ç›®å½•,bootç›®å½•ä»¥åŠæŒ‡å®šçš„å†…æ ¸æ–‡ä»¶å’Œinitrd文件,所以å¯ä»¥é€šè¿‡è‡ªå®šä¹‰grubèœå•ä¿¡æ¯å’Œç³»ç»Ÿé»˜è®¤å¯åЍ项 结åˆA/B分区å‡çº§ç–ç•¥æ¥å®Œæˆã€‚ä¿è¯ç”¨æˆ·åº”用é…ç½®å¯ä»¥åœ¨å‡çº§è¿‡ç¨‹ä¸æ‹‰å–系统当å‰çš„usr,etcç‰ç”¨æˆ·é…置相关文件对备用系统分区进行一个覆盖。 + +决赛阶段考虑:在åˆèµ›ä½¿ç”¨A/Bç–略完æˆOTA更新的时候出现问题如下: +1:在使用A/B分区ç–ç•¥çš„æ—¶å€™ï¼Œéº’éºŸç³»ç»Ÿæ¯æ¬¡åœ¨æ›´æ¢rootfs分区的时候系统å¯åŠ¨æ€»æ˜¯åœ¨initrfams界é¢å‡ºçްUUID问题,但是æ¤é—®é¢˜åœ¨æ™®é€šUbuntu系统没有出现 + +在查找问题与技术è€å¸ˆäº¤æµåŽå¾—出须è¦ä¿®æ”¹éº’麟本身系统文件进行调整 +2:AB分区ç–略,对系统分é…的储å˜ç©ºé—´è¦æ±‚较高,总体æ¥è¯´ä¼šé€ æˆå†—余问题 +æ ¹æ®ä»¥ä¸Šé—®é¢˜ï¼Œåœ¨è¿›è¡Œå……åˆ†çš„è°ƒç ”åŽå†³å®šè°ƒæ•´ç–ç•¥ä¸ºè®©ç³»ç»Ÿè¿›å…¥æ•‘æ´æ¨¡å¼ï¼Œåœ¨æ•‘æ´æ¨¡å¼ä¸‹å¯¹æ–‡ä»¶ç³»ç»Ÿè¿›è¡Œæ›´æ–°ã€‚ # 系统架构设计 客户端 : å®‰è£…åœ¨åµŒå…¥å¼æ“作系统设备上,通过Cè¯è¨€å¯¹ç³»ç»Ÿçš„脚本控制完æˆè®¾å¤‡OTAçš„å‡çº§è¿‡ç¨‹ã€‚ @@ -45,14 +52,13 @@ OTAä¼ è¾“å议:如HTTPã€HTTPSã€FTPç‰ï¼Œä»¥åŠOTAå‡çº§è¿‡ç¨‹ä¸çš„安全 # é¡¹ç›®å¼€å‘æµç¨‹ 客户端 1:首先完æˆlinux系统对kernel,initrd文件系统å‡çº§ï¼Œå†å®Œæˆå¯¹rootfs文件系统å‡çº§ -2:通过新增grubèœå•项修改指定的Kernelå’ŒInitrdé•œåƒæ–‡ä»¶ç³»ç»Ÿè·¯å¾„完æˆå¯¹kernelå’Œinitrd的更新,ç„¶åŽé€šè¿‡è¿›å…¥ç³»ç»Ÿæ•‘æ´æ¨¡å¼ï¼Œåœ¨æ•‘æ´æ¨¡å¼ä¸‹å®Œæˆå¯¹rootfs的文件自动化脚本更新并监控监测。 -3:å‡çº§åŒ…的制作采用增é‡å‡çº§åªæ›´æ–°ä¸åŒçš„部分,相åŒçš„部分ä¸ä¼šçº³å…¥åˆ°å‡çº§åŒ…ä¸ -4:使用c++ç¼–å†™é€šä¿¡è¿›ç¨‹ï¼Œé€šè¿‡ä¸æ–轮询æœåŠ¡ç«¯çš„é”šç‚¹å†…å®¹è¿›è¡ŒæŽ§åˆ¶å®¢æˆ·ç«¯çš„æ›´æ–°åŠ¨ä½œ +2:通过新增grubèœå•项修改指定的Kernelå’ŒInitrdé•œåƒæ–‡ä»¶ç³»ç»Ÿè·¯å¾„完æˆå¯¹kernelå’Œinitrd的更新,ç„¶åŽé€šè¿‡è¿›å…¥ç³»ç»Ÿæ•‘æ´æ¨¡å¼ï¼Œåœ¨æ•‘æ´æ¨¡å¼ä¸‹å®Œæˆå¯¹rootfs的文件自动化脚本更新。 +3:使用c++ç¼–å†™é€šä¿¡è¿›ç¨‹ï¼Œé€šè¿‡ä¸æ–轮询æœåŠ¡ç«¯çš„é”šç‚¹å†…å®¹è¿›è¡ŒæŽ§åˆ¶å®¢æˆ·ç«¯çš„æ›´æ–°åŠ¨ä½œã€‚ å‰åŽç«¯ 1:实现å‡çº§åŒ…管ç†,支æŒç”¨æˆ·ä¸Šä¼ å‡çº§åŒ… 2ï¼šç»´æŠ¤æ–‡ä»¶æ ‘çš„ç³»ç»Ÿï¼Œæ¥å®žçްå‡çº§åŒ…的制作实现最å°å‡çº§åŒ…æ›´æ–° - +3:å‡çº§åŒ…的制作采用增é‡å‡çº§åªæ›´æ–°ä¸åŒçš„部分,相åŒçš„部分ä¸ä¼šçº³å…¥åˆ°å‡çº§åŒ…ä¸ # 实践过程的总结和进展 åˆèµ›: @@ -77,6 +83,9 @@ OTAä¼ è¾“å议:如HTTPã€HTTPSã€FTPç‰ï¼Œä»¥åŠOTAå‡çº§è¿‡ç¨‹ä¸çš„安全 æå–ç :gmvx 截æ¢åˆ°2024.5.30 +决赛视频 +线下演示 + # 关键问题和解决方案 åˆèµ›: 1:问题1:è§£å†³å†…æ ¸å’Œinitrd文件系统更新 @@ -95,13 +104,24 @@ OTAä¼ è¾“å议:如HTTPã€HTTPSã€FTPç‰ï¼Œä»¥åŠOTAå‡çº§è¿‡ç¨‹ä¸çš„安全 1:å¦‚ä½•è¿›å…¥ç³»ç»Ÿæ•‘æ´æ¨¡å¼ï¼Œæ ¹æ®è°ƒç ”å‘现,一个是通过修改grubé…置设置默认å¯åŠ¨é¡¹ä¸ºsavedï¼Œä¸€ç§æ˜¯é€šè¿‡æŒ‡ä»¤çš„æ–¹å¼è®©ä¸‹æ¬¡é‡å¯è¿›å…¥æ•‘æ´æ¨¡å¼ã€‚采用指令方å¼ã€‚ 2:å¦‚ä½•åœ¨ç³»ç»Ÿæ•‘æ´æ¨¡å¼ä¸‹æ‰§è¡Œè‡ªåŠ¨åŒ–æ›´æ–°è„šæœ¬,脚本通过shell脚本编写,åªè¦æ‰§è¡Œè¿™ä¸ªè„šæœ¬å°±å¯ä»¥å®Œæˆéœ€è¦çš„æ‰§è¡Œçš„内容与功能,ç„¶åŽè°ƒæŸ¥å‘现å¯ä»¥é€šè¿‡å¢žåŠ ä¸€ä¸ªæœåŠ¡å•å…ƒï¼Œè®¾ç½®åœ¨ç³»ç»Ÿè¿›å…¥æ•‘æ´æ¨¡å¼åŽè‡ªåŠ¨æ‰§è¡ŒæŸä¸ªè·¯å¾„的脚本,并且在更新完æˆåŽè¿˜å¯ä»¥è‡ªåŠ¨è®¾ç½®ä¸‹æ¬¡è¿›å…¥æ£å¸¸å›¾å½¢åŒ–界é¢å¹¶é‡å¯ã€‚ 3:如何让æœåŠ¡ç«¯èŽ·å–å¹¶æ“æŽ§å®¢æˆ·ç«¯çš„åŠ¨ä½œå®žçŽ°é™é»˜æ›´æ–°ï¼Œå®¢æˆ·ç«¯é‡‡ç”¨c++编写通信进程的方å¼,通过设置轮询的方å¼ä¸æ–访问æœåŠ¡ç«¯çš„æŸä¸ªé”šç‚¹æ¥èŽ·å–æœåŠ¡å™¨å¯¹å®¢æˆ·ç«¯ä¸‹è¾¾çš„æŒ‡ä»¤ + +æ•‘æ´æ¨¡å¼ç–略好处 +ç‹¬å æ€§è®¿é—®ï¼šåœ¨æ•‘æ´æ¨¡å¼ä¸‹ï¼Œç³»ç»Ÿé€šå¸¸ä»¥å•用户模å¼å¯åŠ¨ï¼Œæ²¡æœ‰å¤šç”¨æˆ·çš„è¿›ç¨‹åœ¨è¿è¡Œã€‚è¿™å‡å°‘了å¯èƒ½çš„æ–‡ä»¶é”定或æ£åœ¨ä½¿ç”¨çš„æ–‡ä»¶å¯¼è‡´çš„æ›´æ–°å†²çªã€‚ +å‡å°‘ç³»ç»Ÿè´Ÿè½½ï¼šæ•‘æ´æ¨¡å¼ä¸‹ç³»ç»Ÿå¤„于最低负载状æ€ï¼Œå‡ 乎没有ä¸å¿…è¦çš„æœåŠ¡åœ¨è¿è¡Œï¼Œç¡®ä¿äº†æ›´æ–°è¿‡ç¨‹ä¸ä¸ä¼šå› 为其他任务影å“到性能。 +ç¨³å®šçš„æ›´æ–°çŽ¯å¢ƒï¼šåœ¨æ•‘æ´æ¨¡å¼ä¸ï¼Œè®¸å¤šç³»ç»ŸæœåŠ¡å’Œå®ˆæŠ¤è¿›ç¨‹æ²¡æœ‰å¯åŠ¨ï¼Œè¿™å‡å°‘äº†æ›´æ–°è¿‡ç¨‹ä¸æ½œåœ¨çš„干扰,å‡å°‘äº†å› æ–‡ä»¶è¢«å 用而导致更新失败的风险。 +简化的æ¢å¤è·¯å¾„ï¼šå¦‚æžœæ›´æ–°è¿‡ç¨‹å‡ºçŽ°é—®é¢˜ï¼Œæ•‘æ´æ¨¡å¼ä¸‹å¯ä»¥æ›´å®¹æ˜“地执行回滚æ“作或切æ¢åˆ°å¤‡ç”¨çš„ rootfsï¼Œå› ä¸ºç³»ç»Ÿå¤„äºŽæœ€å°åŒ–状æ€ï¼Œæ²¡æœ‰å¤šä½™çš„æœåŠ¡å’Œè¿›ç¨‹éœ€è¦è€ƒè™‘。 +最å°åŒ–的潜在æŸå®³ï¼šæ•‘æ´æ¨¡å¼é€šå¸¸ä¸ä¼šæŒ‚载所有文件系统或å¯åŠ¨æ‰€æœ‰æœåŠ¡ï¼Œå³ä½¿æ›´æ–°å¤±è´¥ï¼Œå½±å“é¢ä¹Ÿç›¸å¯¹æœ‰é™ã€‚ +场景:对于一些嵌入å¼ç³»ç»Ÿæˆ–ä¸å…è®¸é•¿æ—¶é—´åœæœºçš„ç³»ç»Ÿï¼Œä½¿ç”¨æ•‘æ´æ¨¡å¼è¿›è¡Œ rootfs OTA æ›´æ–°å¯ä»¥åœ¨æœ€çŸçš„æ—¶é—´å†…完æˆå¿…è¦çš„ç³»ç»Ÿæ›´æ–°ï¼ŒåŒæ—¶ç¡®ä¿ç³»ç»Ÿçš„一致性和完整性。 + # 团队分工 å‰ç«¯: 周翼 +è´Ÿè´£å‰ç«¯å¼€å‘ï¼Œæ ¸å¿ƒå®Œæˆå¯¹äºŽæ–°æ¦‚å¿µï¼ˆç»´æŠ¤æ–‡ä»¶æ ‘ï¼‰çš„å®žçŽ°æ“作,以åŠå·®åˆ†å‡çº§æž„建最å°å‡çº§åŒ… åŽç«¯:è°å¼€æ–‡ +è´Ÿè´£åŽç«¯å¼€å‘ï¼Œæ ¸å¿ƒå®Œæˆå¯¹äºŽå‰ç«¯å’Œå®¢æˆ·ç«¯çš„æŽ¥å£è°ƒç”¨ï¼Œä»¥åŠå‚¨å˜å·®åˆ†å‡çº§å‡çº§åŒ…å’Œæ–‡ä»¶æ ‘ã€‚ä¸Žå‰ç«¯ä¸€èµ·å®Œæˆå·®åˆ†å‡çº§åŠŸèƒ½ 客户端:陈艺谋 -负责嵌入å¼è®¾å¤‡çš„æœ¬åœ°çš„脚本的编写通过网络通信的方å¼ä¸ŽåŽç«¯æœåŠ¡å™¨è¿›è¡Œå‡çº§åŒ…的资æºä¸‹è½½ï¼Œå®Œæˆå¯¹ä¸‰ç§æ–‡ä»¶ç³»ç»Ÿçš„æ›´æ–°.é‡‡ç”¨ç³»ç»Ÿæ•‘æ´æ¨¡å¼ç–略对系统进行å‡çº§,测试å‡çº§åŽç³»ç»Ÿæ˜¯å¦æ£ç¡®è¿è¡Œ 检测到系统异常情况 进行回滚æ“作 +负责嵌入å¼è®¾å¤‡çš„æœ¬åœ°çš„脚本的编写通过网络通信的方å¼ä¸ŽåŽç«¯æœåŠ¡å™¨è¿›è¡Œå‡çº§åŒ…的资æºä¸‹è½½ï¼Œå®Œæˆå¯¹ä¸‰ç§æ–‡ä»¶ç³»ç»Ÿçš„æ›´æ–°.é‡‡ç”¨ç³»ç»Ÿæ•‘æ´æ¨¡å¼ç–略对系统进行å‡çº§ã€‚ @@ -143,7 +163,7 @@ sudo mount --bind /run /mnt/rootfs/run 7:å‡çº§å®Œæˆç‰å¾…é‡å¯ -# 决赛:麒麟系统æˆåŠŸå®Œæˆç¬¬ä¸€é¢˜ç¬¬äºŒé¢˜ +# 决赛OTAæ ¸å¿ƒæ›´æ–°æ¥éª¤ 1:首先轮询æœåŠ¡ç«¯èŽ·å–æŒ‡ä»¤ 2:开始更新之å‰ï¼Œå¤‡ä»½å½“剿 ¹ç›®å½•的内容到指定目录下 3:修改grubé…置新增èœå•é¡¹ï¼ŒæŒ‡å‘æ–°çš„kernelå’Œinitrdé•œåƒæ–‡ä»¶ã€‚(与åˆèµ›åŽŸç†ç›¸åŒï¼‰ -- GitLab