<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>云渡桥财经网</title><link>https://www.jopqhv.cn/</link><description>灵灵猴</description><item><title>四川一西游主题公园因抽象画风走红 “榴莲果”成游客打卡暗号</title><link>https://www.jopqhv.cn/keji/3047.html</link><description>&lt;p&gt;　　中新网绵阳10月15日电(陈选斌)“忆西游主题公园就是一颗榴莲果，喜欢的人爱不释手，不喜欢的人就觉得它是臭的。”四川绵阳忆西游主题公园创建者贺昌林这句形容自己心血之作的话，如今已成为网络热梗，更成了不少游客来打卡时的“接头暗号”。近日，这座由贺昌林耗时16年“手搓”打造的西游主题公园在社交平台走红，造型抽象的雕塑连同背后的建造故事，吸引各地游客实地探访。&lt;/p&gt;  
&lt;img style=&quot;display: block; margin: auto; cursor: pointer;&quot; src=&quot;https://i2.chinanews.com.cn/simg/ypt/2026/261015/8f1c5d04-50e1-4de8-9472-426087c65133_zsite.jpg&quot; class=&quot;aligncenter&quot;&gt;   图为游客与贺昌林(中)在忆西游主题公园门口合影。陈选斌 摄  
&lt;p&gt;　　58岁的贺昌林拥有30多年园林工程从业经历。2010年，他偶然踏入这片山头，见山形地貌酷似想象中的花果山，随即萌生打造一个水帘洞的想法。家人亲友起初并不看好，他便偷偷承包荒地开工。“这一路就像西天取经一样，得逼着自己练就‘72变’。”贺昌林身兼水电工、焊工、泥水匠、塑像师等数职，大部分造景都是亲手打磨，遇到复杂工序才请人搭手。经过多年持续修建，园区于2022年正式对外开放。&lt;/p&gt; 
&lt;p&gt;　　“我打小就爱看《西游记》，不光看孙悟空打妖怪，更看里面的人情世故。小时候看的是热闹，长大了看的是人生。”贺昌林之所以选择西游主题，就是想借大众耳熟能详的角色与情节，将自己对生活的体悟藏进山水造景之中。他说：“唐僧取经还有三个徒弟、各路神仙护佑，我完全是单枪匹马。”&lt;/p&gt;   图为忆西游主题公园内的唐僧师徒横渡通天河造景。陈选斌 摄  
&lt;p&gt;　　园内每一处造景都承载着贺昌林的个人表达。牛魔王、铁扇公主、红孩儿一组塑像沿山势水景布设：铁扇公主面色阴沉伫立山头，红孩儿塑像安置于水中央，牛魔王手持兵器朝向妻子，目光却望向一旁的狐狸精。贺昌林想借此映射现实：夫妻失和，受伤最深的往往是孩子。狐狸精塑像身形窈窕，双手却塑造得粗陋不堪；狐仙洞通道低矮逼仄，游客必须俯身方可通行，隐喻第三者介入，行事本就见不得光。园区还特意打通牛头石景观的双耳，开出一条穿山步道，用“左耳进右耳出”的直观设计，提醒人与人相处贵在真诚。&lt;/p&gt;   图为景区牛头石景观，牛魔王与铁扇公主塑像坐落其上。陈选斌 摄  
&lt;p&gt;　　园中还有诸多暗藏贺昌林巧思的细节。十步台阶上一处“步”字刻意写错，寓意人生一步错、步步错；山道石刻“有脚是福”的“是”字做了特殊改动，寓意路走偏了便无从得福。园内塑像多为手工凿塑，线条质朴粗犷，没有商业化IP的精致打磨。贺昌林常借着这份“不完美”和年轻人聊起自信的话题：“我做的这些‘丑’东西都敢亮出来，年轻人又为什么不敢勇敢展现自己呢？”&lt;/p&gt; 
&lt;p&gt;　　在运营上，忆西游主题公园也和多数景区不一样。园区门票20元一张，不收停车费，景区内无二次消费，对20岁以下群体全部免票，也不查验身份证件。贺昌林还有个长远的打算：等公园运营稳定后，面向40岁以下人群全部免票，让更多人都能来逛逛。针对网络上关于景区资质的疑问，绵阳市游仙区文化广播电视和旅游局回复，忆西游主题公园相关经营资质齐全，暂未参与景区评级。&lt;/p&gt; 
&lt;p&gt;　　公园走红也带动周边村民增收。园区里的金角大王、取经四人组、牛魔王等NPC均由当地村民出演；周边农户可免费使用园区门口场地摆摊，售卖蔬果、小吃。随着客流量持续攀升，贺昌林计划在各处景点增设讲解牌，解读造景深意，同时吸纳更多村民参与景区运营。&lt;/p&gt; 
&lt;p&gt;　　如今园区日均接待游客一两千人次，有人冲着抽象雕塑而来，也有不少游客专程来见贺昌林。游客罗先生说，这里跳出商业化套路，氛围松弛又解压；游客袁先生表示，真正打动自己的，是贺昌林十几年坚持做好一件事的韧劲。&lt;/p&gt; 
&lt;p&gt;　　面对网友对园区造景的调侃，贺昌林并不介意。流量来去匆匆，他依旧每天在景区里转悠，游客凑过来问，他就细细讲造景背后的心思，有人想合影、想对“暗号”，他也都笑着配合。这颗“榴莲果”，正以它独特的“丑”与真诚，吸引着越来越多游客前来打卡，寻找属于自己的感悟。(完)&lt;/p&gt; 
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;    &lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt;    
&lt;span&gt;【编辑:姜媛媛】 &lt;/span&gt;</description><pubDate>Fri, 16 Oct 2026 07:04:38 +0800</pubDate></item><item><title>（校馆弦歌）一座未完成的“大屋顶”，如何长成一所大学的报国路？</title><link>https://www.jopqhv.cn/keji/3046.html</link><description>&lt;p&gt;　　中新网广州10月15日电 题：一座未完成的“大屋顶”，如何长成一所大学的报国路？&lt;/p&gt; 
&lt;p&gt;　　中新网记者 许青青&lt;/p&gt; 
&lt;p&gt;　　1937年秋天，在国立中山大学石牌校区的工地，伫立着一栋裸露着主体框架的未完工首层建筑。这座设计为三层半仿中国古典式的图书馆，刚浇完第一层楼面，就不得不停了下来。&lt;/p&gt; 
&lt;p&gt;　　它的设计者和筹建者不会想到，这一停，就是十多年。&lt;/p&gt; 
&lt;p&gt;　　&lt;strong&gt;一座图书馆的“抗战”&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;　　记者近日探访华南理工大学了解到，该校五山校区图书馆是在原国立中山大学图书馆总馆基础上，经多次续建和扩建而成。&lt;/p&gt; 
&lt;p&gt;　　1936年11月，国立中山大学图书馆总馆在广州石牌校区破土动工。主持筹建的是中国近代图书馆事业的奠基人之一杜定友，原方案由岭南近现代著名建筑师杨锡宗设计——一座三层半仿中国古典式建筑，中国式大屋顶覆于其上，可藏书80万册。&lt;/p&gt; 
&lt;p&gt;　　当时，中国正处在中西文化激烈碰撞的时期，传统复兴式风格在当时的主要教学建筑中被广泛采用，红砖绿瓦、中国式大屋顶，正是这一思潮的产物。&lt;/p&gt; 
&lt;p&gt;　　图书馆预计1937年秋建成。然而，卢沟桥的枪声响了，工程停工。日寇占据石牌校园，这座未完成的图书馆甚至被用作马厩。所幸的是，广州沦陷前夕，杜定友将贵重图书装箱，一路西迁：他保全了大量珍贵文献，却无力让这座图书馆“站起来”。&lt;/p&gt; 
&lt;p&gt;　　这几乎是那个时代试图以知识报国的人共同的困境：他们的志向早已在图纸上完整呈现，但脚下的地基，始终等不来浇筑的机会。&lt;/p&gt;  
&lt;img style=&quot;display: block; margin: auto; cursor: pointer;&quot; src=&quot;https://i2.chinanews.com.cn/simg/ypt/2026/261015/bcac3c61-8364-49d7-9be9-cfa6bfe158d5_zsite.jpg&quot; class=&quot;aligncenter&quot;&gt;   1954年5月竣工的五山老馆被收入国家建筑工程部建筑科学研究院主编的《建筑十年》画册。华南理工大学供图  
&lt;p&gt;&lt;strong&gt;　　创新改动，不停“生长”&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;　　新中国成立后，岭南近现代著名建筑师夏昌世主持在原址上修改续建图书馆。他放弃了原方案中厚重的中国古典式大屋顶，转而采用更简洁、更适应岭南湿热气候的现代建筑风格：外廊遮阳挡掉直射光，中庭把天光引进来，穿堂风从天井里把热气拔出去。&lt;/p&gt; 
&lt;p&gt;　　1952年全国院系调整，以中山大学工学院为主要基础的华南工学院(华南理工大学前身)在石牌校区正式组建，图书馆工程继续推进。1954年5月工程竣工，图纸上那座三层半的大屋顶建筑，最终“长”成了一座四层高的灰白色现代建筑。1959年，它被收入国家建筑工程部建筑科学研究院主编的《建筑十年》画册，被誉为“我国基本建设方面伟大成就的一个缩影”。&lt;/p&gt; 
&lt;p&gt;　　此后几十年，这座建筑一直在“生长”：1987年扩建，1991年新馆落成，2002年新馆大门改建四根廊柱，呼应老馆气韵。2014年至2017年，图书馆经历了一次完整修缮。&lt;/p&gt; 
&lt;p&gt;　　主持修缮的华南理工大学教授级高级工程师、博士生导师郭卫宏介绍，修缮时保留了南北楼原有立面面貌，内部推行“藏阅合一”的空间模式，这样既保持了“大台阶+大柱廊”的端庄气质，又获得了开阔、流动的内部空间。&lt;/p&gt;   在五山老馆自习的华南理工大学学生。华南理工大学供图  
&lt;p&gt;&lt;strong&gt;　　一座大屋顶，长成三座馆&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;　　随着华南理工大学办学规模的扩大和三校区格局的形成，历经90年岁月沉淀的图书馆，也从五山校区的一隅走向“一校三馆”，完整见证了华南理工大学从建校到“双一流”建设的全过程。&lt;/p&gt; 
&lt;p&gt;　　华南理工大学图书馆馆长王晓丽介绍，2006年，大学城校区图书馆落成，面迎珠江，外形如张开的双臂。何镜堂院士团队设计的这座建筑，建筑面积42300平方米，全开放开架式阅览，主要服务于大学城校区本科生和研究生的日常学习与通识教育需求。&lt;/p&gt; 
&lt;p&gt;　　2023年，广州国际校区图书馆落成，它的造型灵感来自“博士帽”，寓意“知识之冠”，内部以“书山智谷”为主体空间，主要服务于国际校区新工科方向的交叉学科研究与国际化办学。&lt;/p&gt; 
&lt;p&gt;　　五山老馆作为学校图书馆总馆承载全校特色馆藏、古籍特藏、老旧文献保存传承，同时承担校园文化建设、阅读推广、馆藏文脉传承等核心工作，是学校藏书最厚、文脉最深的地方。&lt;/p&gt; 
&lt;p&gt;　　从五山老馆的“从废墟中站起来”，到大学城馆的“向珠江敞开”，再到国际校区馆的“面向未来”，图书馆的空间在拓展，馆藏文献在增加，功能在升级。但如果仔细看，这里有一条清晰的线索：每一座新图书馆，都在用自己的方式回答同一个问题——一所大学应该如何以知识报国？&lt;/p&gt;   异木棉下的华南理工大学大学城校区图书馆。覃新佩 摄  
&lt;p&gt;&lt;strong&gt;　　“未完成”本身就是生命力&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;　　在新时代，图书馆聚焦华南理工大学“双一流”建设和科研创新需求，围绕学校科研全链条、知识产权全生命周期，搭建了培训普及—检索查新—数据分析—合规审核—转化辅助的完整服务体系，核心覆盖五大关键环节，全方位支撑学校专利创新与成果转化。&lt;/p&gt; 
&lt;p&gt;　　2009年以来，截至目前，华南理工大学以第一专利权人荣获中国专利奖56次，排名全国高校第一。专利相关服务、成果转化支撑工作位居全国高校前列。&lt;/p&gt; 
&lt;p&gt;　　而一座图书馆真正的馆藏，从来不只是书。据统计，华南理工大学建校至今累计培养各类学生62万人，其中40余万学子扎根粤港澳大湾区，不乏两院院士、上市企业创始人等杰出校友。他们中许多人从这里出发，走向实验室、工地、企业和讲台，在自己的岗位上把学问变成实实在在的东西。&lt;/p&gt; 
&lt;p&gt;　　今天，走进修缮后的五山校区图书馆，那四层高的灰白色建筑依然端庄地立在正门东侧，内部是暖褐色的木质包边、黑润的砚石铺地，与潜心研习的师生构成一幅安静的图景。&lt;/p&gt; 
&lt;p&gt;　　阮冈纳赞1931年提出的图书馆学五定律，最后一条是：“图书馆是一个生长着的有机体。”这座建筑可以修缮、竣工，但它承载的一切——藏书、读者、学问，以及一代代人知识报国的志向——永远都在生长之中。(完)&lt;/p&gt; 
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;    &lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt;    
&lt;span&gt;【编辑:张令旗】 &lt;/span&gt;</description><pubDate>Fri, 16 Oct 2026 07:04:36 +0800</pubDate></item><item><title>recovery是怎么找到各个分区的？——fstab、by-name和那个PARTLABEL巧合</title><link>https://www.jopqhv.cn/keji/3045.html</link><description>&lt;p class=&quot;rich_media_content js_underline_content autoTypeSetting24psection&quot;&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;font-size:14px;margin:0px 0px 22px;border-bottom:1px solid rgb(229,231,235);padding-bottom:14px;&quot;&gt; &lt;span&gt;recovery 找分区靠的不是分区表，是 /etc/fstab。而这份 fstab 里写着 PARTLABEL=oem，代码却用 st&lt;u&gt;rs&lt;/u&gt;tr 找 LABEL=——一个是另一个的子串。这个巧合撑起了整条链路，也是它在 Debian/Ubuntu 上跑不起来的原因。&lt;/span&gt;&lt;/p&gt; 
 &lt;h2 style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-style:normal;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;font-size:20px;border-left:4px solid rgb(17,17,17);padding-left:10px;margin:34px 0px 12px;&quot;&gt; &lt;span&gt;问题场景&lt;/span&gt;&lt;/h2&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;上一篇里 recovery 拿到命令之后，要往 /userdata 擦数据、往 /dev/block/by-name/misc 写 BCB。但 recovery 是个跑在 &lt;u&gt;ram&lt;/u&gt;disk 里的独立程序，&lt;/span&gt;&lt;b&gt;&lt;span&gt;它没有在 &lt;u&gt;SD&lt;/u&gt;K 里见过的分区表&lt;/span&gt;&lt;/b&gt;&lt;span&gt;——parameter.txt 早就被 u-boot 解析成 GPT 了，recovery 手上什么都没有。&lt;/span&gt;&lt;/p&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;那它是怎么知道 /userdata 对应哪块设备的？/dev/block/by-name/ 这个目录又是谁建的？为什么官方文档 2.3 节专门讲&quot;Debian 和 Ubuntu 系统的升级&quot;要额外拷一个 udev 规则文件？&lt;/span&gt;&lt;/p&gt; 
 &lt;h2 style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-style:normal;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;font-size:20px;border-left:4px solid rgb(17,17,17);padding-left:10px;margin:34px 0px 12px;&quot;&gt; &lt;span&gt;一、recovery 眼里的&quot;分区表&quot;&lt;/span&gt;&lt;/h2&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;先说一个需要区分的地方：&lt;/span&gt;&lt;b&gt;&lt;span&gt;挂载分区&lt;/span&gt;&lt;/b&gt;&lt;span&gt;和&lt;/span&gt;&lt;b&gt;&lt;span&gt;重建分区表&lt;/span&gt;&lt;/b&gt;&lt;span&gt;走的是两条完全不同的路。&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;list-paddingleft-1&quot; style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;margin:6px 0px 6px 22px;padding-left:0px;&quot;&gt;
  &lt;li&gt; &lt;span&gt;recovery 二进制本身（roots.c、bootlo&lt;u&gt;ad&lt;/u&gt;er.c 这一套）&lt;/span&gt;&lt;b&gt;&lt;span&gt;不解析 parameter.txt&lt;/span&gt;&lt;/b&gt;&lt;span&gt;，它只认 /etc/fstab 和 /dev/block/by-name/ 这些运行时视图&lt;/span&gt;&lt;/li&gt; 
  &lt;li&gt; &lt;span&gt;但 updateEngine 里有解析 RK 参数格式的代码——getParamFromString() 会解开 mtdparts= 那一行，然后在升级 parameter 分区时&lt;/span&gt;&lt;b&gt;&lt;span&gt;据此重建整个 GPT&lt;/span&gt;&lt;/b&gt;&lt;span&gt;（这部分在 09 篇讲）&lt;/span&gt;&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;本节讲的是前者。分区表在启动链的更早阶段就已经被消费掉了：u-boot 读 parameter.txt 并据此写入 GPT，内核再根据 GPT 建立起设备节点。等 recovery 跑起来时，能看到的只有这些&lt;/span&gt;&lt;b&gt;&lt;span&gt;运行时视图&lt;/span&gt;&lt;/b&gt;&lt;span&gt;：&lt;/span&gt;&lt;/p&gt; 
 &lt;table style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;border-collapse:collapse;width:720px;font-size:13.5px;margin:10px 0px;border:1px solid rgb(229,231,235);&quot;&gt;
  &lt;tbody&gt;
   &lt;tr style=&quot;background:rgb(249,250,251);&quot;&gt;
    &lt;th style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;来源&lt;/span&gt;&lt;/th&gt; 
    &lt;th style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;提供什么&lt;/span&gt;&lt;/th&gt; 
    &lt;th style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;谁在用&lt;/span&gt;&lt;/th&gt; 
   &lt;/tr&gt;
   &lt;tr&gt;
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;/etc/fstab&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;挂载点到设备的映射&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;load_volume_table()&lt;/span&gt;&lt;/td&gt; 
   &lt;/tr&gt;
   &lt;tr&gt;
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;/dev/block/by-name/*&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;按分区名寻址的符号链接&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;bootloader.c、update_engine&lt;/span&gt;&lt;/td&gt; 
   &lt;/tr&gt;
   &lt;tr&gt;
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;/proc/cmdline&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;storagemedia=、&lt;u&gt;android&lt;/u&gt;boot.slot_suffix= 等&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;isMtdDevice()、getCurrentSlot()&lt;/span&gt;&lt;/td&gt; 
   &lt;/tr&gt;
   &lt;tr&gt;
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;/sys/bus/mmc/devices/*/type&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;哪个 mmcblkN 是 eMMC、哪个是 SD&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;init_sd_emmc_point()&lt;/span&gt;&lt;/td&gt; 
   &lt;/tr&gt;
   &lt;tr&gt;
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;/proc/mtd&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;MTD 分区名和大小&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;mtd_s&lt;u&gt;can&lt;/u&gt;_par&lt;u&gt;ti&lt;/u&gt;tions()&lt;/span&gt;&lt;/td&gt; 
   &lt;/tr&gt;
  &lt;/tbody&gt;
 &lt;/table&gt;
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;所以&quot;找分区&quot;实际上是&lt;/span&gt;&lt;b&gt;&lt;span&gt;在运行时视图里查表&lt;/span&gt;&lt;/b&gt;&lt;span&gt;，而不是解析任何镜像格式。&lt;/span&gt;&lt;/p&gt; 
 &lt;h2 style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-style:normal;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;font-size:20px;border-left:4px solid rgb(17,17,17);padding-left:10px;margin:34px 0px 12px;&quot;&gt; &lt;span&gt;二、17 行 fstab 变成一张表&lt;/span&gt;&lt;/h2&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;roots.c 的 load_volume_table() 把 /etc/fstab 读进一张 Volume 数组。解析逻辑很短：&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;code-snippet__line-index code-snippet__js&quot;&gt;
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;pre class=&quot;code-snippet__js&quot;&gt;
&lt;code&gt;&lt;span&gt;// ex&lt;u&gt;te&lt;/u&gt;rnal/recovery/roots.c&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__keyword&quot;&gt;while&lt;/span&gt;(fgets(buffer, sizeof(buffer) -&lt;span class=&quot;code-snippet__number&quot;&gt;1&lt;/span&gt;, fstab)) {&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; i = sscanf(buffer,&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;span class=&quot;code-snippet__variable&quot;&gt;%s&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;span class=&quot;code-snippet__variable&quot;&gt;%s&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;span class=&quot;code-snippet__variable&quot;&gt;%s&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;span class=&quot;code-snippet__variable&quot;&gt;%s&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;span class=&quot;code-snippet__variable&quot;&gt;%s&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;span class=&quot;code-snippet__variable&quot;&gt;%s&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;&lt;/span&gt;, file_system,&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; mount_point, fs_type, option,&lt;span class=&quot;code-snippet__keyword&quot;&gt;dump&lt;/span&gt;, pass);&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; &lt;span class=&quot;code-snippet__keyword&quot;&gt;if&lt;/span&gt;(file_system[&lt;span class=&quot;code-snippet__number&quot;&gt;0&lt;/span&gt;] ==&lt;span class=&quot;code-snippet__string&quot;&gt;'#'&lt;/span&gt;)&lt;span class=&quot;code-snippet__keyword&quot;&gt;continue&lt;/span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; &lt;span class=&quot;code-snippet__keyword&quot;&gt;if&lt;/span&gt;(i ==&lt;span class=&quot;code-snippet__number&quot;&gt;6&lt;/span&gt;) {&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; &lt;span class=&quot;code-snippet__regexp&quot;&gt;/* 记录这一项到 device_volumes[] */&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; }&lt;span class=&quot;code-snippet__keyword&quot;&gt;else&lt;/span&gt;{&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; LOGE(&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;skip&lt;u&gt;pi&lt;/u&gt;ng malformed recovery.fstab line:&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;span class=&quot;code-snippet__variable&quot;&gt;%s&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;n&quot;&lt;/span&gt;, buffer);&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; }&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;要求一行必须有&lt;/span&gt;&lt;b&gt;&lt;span&gt;6 个字段&lt;/span&gt;&lt;/b&gt;&lt;span&gt;（device、mountpoint、type、options、dump、pass），少一个就整行丢弃。注意 # 注释的判断是在 sscanf&lt;/span&gt;&lt;b&gt;&lt;span&gt;之后&lt;/span&gt;&lt;/b&gt;&lt;span&gt;做的——不过因为格式串只吃&lt;/span&gt;&lt;b&gt;&lt;span&gt;6 个 token&lt;/span&gt;&lt;/b&gt;&lt;span&gt;，完整的 6 字段行后面再跟 # 注释 属于第 7 个 token，会被直接丢弃，不影响解析。真正受影响的只有&lt;/span&gt;&lt;b&gt;&lt;span&gt;以 # 开头的整行注释&lt;/span&gt;&lt;/b&gt;&lt;span&gt;，而且那样写本来就是合法用法。&lt;/span&gt;&lt;/p&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;这张表的 0 号位置是硬编码塞进去的：&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;code-snippet__line-index code-snippet__js&quot;&gt;
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;pre class=&quot;code-snippet__js&quot;&gt;
&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;// external/recovery/roots.c&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;// Insert an entry for /tmp, which is the ramdisk and is always mounted.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;device_volumes[&lt;span class=&quot;code-snippet__number&quot;&gt;0&lt;/span&gt;].mount_point =&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;/tmp&quot;&lt;/span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;device_volumes[&lt;span class=&quot;code-snippet__number&quot;&gt;0&lt;/span&gt;].fs_type =&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;ramdisk&quot;&lt;/span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;device_volumes[&lt;span class=&quot;code-snippet__number&quot;&gt;0&lt;/span&gt;].device =&lt;span class=&quot;code-snippet__literal&quot;&gt;NULL&lt;/span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;/* device2 / option / dump / pass 在这里一并置空 */&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;num_volumes =&lt;span class=&quot;code-snippet__number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;/tmp 永远可用，不参与挂载。&lt;/span&gt;&lt;/p&gt; 
 &lt;h3 style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-style:normal;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;font-size:17px;border-left:4px solid rgb(209,213,219);padding-left:8px;margin:22px 0px 8px;&quot;&gt; &lt;span&gt;rk3576 recovery 镜像里真实的 fstab&lt;/span&gt;&lt;/h3&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;这个文件不是手写的，由 post-fstab.sh 在构建时生成。生成结果里的关键几行是：&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;code-snippet__line-index code-snippet__js&quot;&gt;
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;pre class=&quot;code-snippet__js&quot;&gt;
&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;# buildroot/output/&lt;u&gt;rockchip&lt;/u&gt;_rk3576_recovery/target/etc/fstab&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;/dev/root/ext4rw,noauto01&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;tmpfs/tmptmpfsmode=177700&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;...&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;/dev/sda1/mnt/udiskautodefaults0 2&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;/dev/mmcblk1p1/mnt/sdcardautodefaults0 2&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;PARTLABEL=oem/oemext4defaults0 2&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;PARTLABEL=userdata/userdataext4defaults0 2&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;看清楚最后两行的写法：&lt;/span&gt;&lt;b&gt;&lt;span&gt;PARTLABEL=userdata&lt;/span&gt;&lt;/b&gt;&lt;span&gt;。记住这个，下一节就是围绕它的。&lt;/span&gt;&lt;/p&gt; 
 &lt;h2 style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-style:normal;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;font-size:20px;border-left:4px solid rgb(17,17,17);padding-left:10px;margin:34px 0px 12px;&quot;&gt; &lt;span&gt;三、一个靠巧合工作的转换&lt;/span&gt;&lt;/h2&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;fstab 里设备字段理论上可以直接写 /dev/mmcblk0p5，但 RK 的镜像想用分区名寻址。于是 roots.c 里有一段标着 HACK 的转换：&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;code-snippet__line-index code-snippet__js&quot;&gt;
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;pre class=&quot;code-snippet__js&quot;&gt;
&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;// external/recovery/roots.c&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;/*&lt;/span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;&lt;span class=&quot;code-snippet__doctag&quot;&gt;HACK:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;Convert *LABEL to &quot;by-name&quot; symlink */&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__keyword&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;code-snippet__built_in&quot;&gt;strstr&lt;/span&gt;(file_system,&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;LABEL=&quot;&lt;/span&gt;))&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; &lt;span class=&quot;code-snippet__built_in&quot;&gt;snprintf&lt;/span&gt;(device,&lt;span class=&quot;code-snippet__built_in&quot;&gt;sizeof&lt;/span&gt;(device),&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;/dev/block/by-name/%s&quot;&lt;/span&gt;,&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; &lt;span class=&quot;code-snippet__built_in&quot;&gt;strstr&lt;/span&gt;(file_system,&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;LABEL=&quot;&lt;/span&gt;) +&lt;span class=&quot;code-snippet__built_in&quot;&gt;strlen&lt;/span&gt;(&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;LABEL=&quot;&lt;/span&gt;));&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__keyword&quot;&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; &lt;span class=&quot;code-snippet__built_in&quot;&gt;strcpy&lt;/span&gt;(device, file_system);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;作者的意图大概是处理 LABEL=xxx 这种写法。但代码用的是&lt;/span&gt;&lt;b&gt;&lt;span&gt;strstr 子串匹配&lt;/span&gt;&lt;/b&gt;&lt;span&gt;，不是前缀匹配。&lt;/span&gt;&lt;/p&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;于是 PARTLABEL=userdata 里的 &quot;PART&quot; 后面正好跟着 &quot;LABEL=&quot;，&lt;/span&gt;&lt;b&gt;&lt;span&gt;子串命中&lt;/span&gt;&lt;/b&gt;&lt;span&gt;。&lt;/span&gt;&lt;/p&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;strstr 返回的是 &quot;LABEL=userdata&quot; 这段的起始位置，再 + strlen(&quot;LABEL=&quot;) 跳过 6 个字符，拿到的正是 userdata。拼出来的结果是：&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;code-snippet__line-index code-snippet__js&quot;&gt;
  &lt;li&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;pre class=&quot;code-snippet__js&quot;&gt;
&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__attr&quot;&gt;PARTLABEL&lt;/span&gt;=userdata → /dev/block/by-name/userdata&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;b&gt;&lt;span&gt;结果是对的，但路径完全不是作者写这段代码时想的那条。&lt;/span&gt;&lt;/b&gt;&lt;span&gt;如果哪天有人把 fstab 改成前缀判断（看起来是修 bug），或者换个不叫 PARTLABEL 的写法，这条链就断了。&lt;/span&gt;&lt;/p&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;顺带一个对照：官方文档 4.3.3 节给了另一种改法，让用户直接写完整路径——&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;code-snippet__line-index code-snippet__js&quot;&gt;
  &lt;li&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;pre class=&quot;code-snippet__js&quot;&gt;
&lt;code&gt;&lt;span&gt;/dev/block/by-name/userdata /userdata ext2 defaults 0 0&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;这种写法走 else 分支原样使用，反而更稳。&lt;/span&gt;&lt;/p&gt; 
 &lt;h2 style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-style:normal;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;font-size:20px;border-left:4px solid rgb(17,17,17);padding-left:10px;margin:34px 0px 12px;&quot;&gt; &lt;span&gt;四、/dev/block/by-name/ 是谁建的&lt;/span&gt;&lt;/h2&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;既然最后都落到 /dev/block/by-name/
   &lt;名字&gt;
    ，那这个目录必须先存在。它由一条 udev 规则创建，在 recovery 的 rootfs 里是 external/rkscript/61-persistent-internal-storage.rules：
   &lt;/名字&gt;&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;code-snippet__line-index code-snippet__js&quot;&gt;
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;pre class=&quot;code-snippet__js&quot;&gt;
&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;# persistent internal storage links(Android style): /dev/block/by-name&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
&lt;code&gt;&lt;span&gt;&lt;u&gt;AC&lt;/u&gt;TION==&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;remove&quot;&lt;/span&gt;, GOTO=&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;persistent_storage_end&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;u&gt;SUB&lt;/u&gt;SYSTEM!=&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;block&quot;&lt;/span&gt;, GOTO=&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;persistent_storage_end&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;# ignore removable devices&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;ATTRS{removable}==&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;1&quot;&lt;/span&gt;, GOTO=&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;persistent_storage_end&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;# ignore SD Cards&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;ATTRS{TYPE}==&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;SD&quot;&lt;/span&gt;, GOTO=&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;persistent_storage_end&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;# honor various types of names&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;ENV{ID_PART_ENTRY_NAME}==&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;?*&quot;&lt;/span&gt;, &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; SYMLINK+=&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;block/by-name/&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;span class=&quot;code-snippet__subst&quot;&gt;$env&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;{ID_PART_ENTRY_NAME}&quot;&lt;/span&gt;, GOTO=&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;persistent_storage_end&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;ENV{PARTNAME}==&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;?*&quot;&lt;/span&gt;, SYMLINK+=&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;block/by-name/&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;span class=&quot;code-snippet__subst&quot;&gt;$env&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;{PARTNAME}&quot;&lt;/span&gt;, &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; GOTO=&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;persistent_storage_end&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;ENV{ID_FS_LABEL}==&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;?*&quot;&lt;/span&gt;, SYMLINK+=&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;block/by-name/&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;span class=&quot;code-snippet__subst&quot;&gt;$env&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;{ID_FS_LABEL}&quot;&lt;/span&gt;, &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; GOTO=&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;persistent_storage_end&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;KERNEL==&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;mtdblock*&quot;&lt;/span&gt;, TEST==&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;device/name&quot;&lt;/span&gt;, SYMLINK+=&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;block/by-name/&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&lt;span class=&quot;code-snippet__subst&quot;&gt;$attr&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;{device/name}&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;三个名字来源按优先级排队：&lt;/span&gt;&lt;b&gt;&lt;span&gt;GPT 分区名 → 内核 uevent 的 PARTNAME → 文件系统 label&lt;/span&gt;&lt;/b&gt;&lt;span&gt;。因为 GPT 是有分区名的（parameter.txt 里括号里那些），实际生效的基本都是第一个。&lt;/span&gt;&lt;/p&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;注意上面那两行&quot;忽略&quot;：&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;list-paddingleft-1&quot; style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;margin:6px 0px 6px 22px;padding-left:0px;&quot;&gt;
  &lt;li&gt; &lt;span&gt;ATTRS{removable}==&quot;1&quot; 排除可移动设备&lt;/span&gt;&lt;/li&gt; 
  &lt;li&gt; &lt;span&gt;ATTRS{TYPE}==&quot;SD&quot;&lt;/span&gt;&lt;b&gt;&lt;span&gt;明确排除 SD 卡&lt;/span&gt;&lt;/b&gt;&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;b&gt;&lt;span&gt;所以 SD 卡上不会有 /dev/block/by-name/*。&lt;/span&gt;&lt;/b&gt;&lt;span&gt;这不是遗漏，是故意的——by-name 是给&quot;内部固定存储&quot;用的，插拔的介质不该占用这个名字空间。这也直接决定了下一节。&lt;/span&gt;&lt;/p&gt; 
 &lt;h2 style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-style:normal;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;font-size:20px;border-left:4px solid rgb(17,17,17);padding-left:10px;margin:34px 0px 12px;&quot;&gt; &lt;span&gt;五、SD 卡走的是另一条路&lt;/span&gt;&lt;/h2&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;因为 SD 卡被 udev 规则排除在外，它的设备节点就是普通的 /dev/mmcblk1p1——这正是 fstab 里那一行的来历：&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;code-snippet__line-index code-snippet__js&quot;&gt;
  &lt;li&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;pre class=&quot;code-snippet__js&quot;&gt;
&lt;code&gt;&lt;span&gt;/dev/mmcblk1p1/mnt/sdcardautodefaults0 2&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;但 roots.c 对 /mnt/sdcard 还埋了一个特例。挂载时它会&lt;/span&gt;&lt;b&gt;&lt;span&gt;绕开 fstab 里的设备名&lt;/span&gt;&lt;/b&gt;&lt;span&gt;，改用环境变量：&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;code-snippet__line-index code-snippet__js&quot;&gt;
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;pre class=&quot;code-snippet__js&quot;&gt;
&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;// external/recovery/roots.c&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__keyword&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;code-snippet__built_in&quot;&gt;strcmp&lt;/span&gt;(&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;/mnt/sdcard&quot;&lt;/span&gt;, v-&amp;gt;mount_point) ==&lt;span class=&quot;code-snippet__number&quot;&gt;0&lt;/span&gt;) {&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; blk_device =&lt;span class=&quot;code-snippet__built_in&quot;&gt;getenv&lt;/span&gt;(SD_POINT_NAME);&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; &lt;span class=&quot;code-snippet__keyword&quot;&gt;if&lt;/span&gt;(blk_device ==&lt;span class=&quot;code-snippet__literal&quot;&gt;NULL&lt;/span&gt;) {&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; &lt;span class=&quot;code-snippet__built_in&quot;&gt;se&lt;u&gt;tF&lt;/u&gt;lashPoint&lt;/span&gt;();&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; blk_device =&lt;span class=&quot;code-snippet__built_in&quot;&gt;getenv&lt;/span&gt;(SD_POINT_NAME);&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; }&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; result =&lt;span class=&quot;code-snippet__built_in&quot;&gt;mount&lt;/span&gt;(blk_device, v-&amp;gt;mount_point, v-&amp;gt;fs_type, ...);&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; &lt;span class=&quot;code-snippet__keyword&quot;&gt;if&lt;/span&gt;(result ==&lt;span class=&quot;code-snippet__number&quot;&gt;0&lt;/span&gt;)&lt;span class=&quot;code-snippet__keyword&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;code-snippet__number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;为什么要绕？因为 SD 卡插在哪个&lt;u&gt;控制器&lt;/u&gt;上是不定的。板子设计不同、有没有 eMMC，都会让 SD 卡在 mmcblk0 和 mmcblk1 之间跳。写死 mmcblk1p1 只是碰巧对——真正靠谱的是运行时探测。&lt;/span&gt;&lt;/p&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;挂载失败时还会依次退回 v-&amp;gt;device、v-&amp;gt;device2 两个备选，算是一层保险。&lt;/span&gt;&lt;/p&gt; 
 &lt;h2 style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-style:normal;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;font-size:20px;border-left:4px solid rgb(17,17,17);padding-left:10px;margin:34px 0px 12px;&quot;&gt; &lt;span&gt;六、运行时怎么认出哪块是 eMMC&lt;/span&gt;&lt;/h2&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;setFlashPoint() 干的就是这件事（rktools.c）。它会遍历 /sys/bus/mmc/devices/，读每个设备的 type 文件，和一张表比对：&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;code-snippet__line-index code-snippet__js&quot;&gt;
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;pre class=&quot;code-snippet__js&quot;&gt;
&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;// external/recovery/rktools.h&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;&lt;span class=&quot;code-snippet__keyword&quot;&gt;define&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;EMMC_POINT_NAME &lt;/span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;emmc_point_name&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;&lt;span class=&quot;code-snippet__keyword&quot;&gt;define&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;SD_POINT_NAME &lt;/span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;sd_point_name&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;&lt;span class=&quot;code-snippet__keyword&quot;&gt;define&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;SD_POINT_NAME_2 &lt;/span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;sd_point_name_2&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__type&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;code-snippet__type&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;code-snippet__type&quot;&gt;char&lt;/span&gt;*point_items[] = {&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;/dev/mmcblk0&quot;&lt;/span&gt;,&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;/dev/mmcblk1&quot;&lt;/span&gt;,&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; &lt;span class=&quot;code-snippet__string&quot;&gt;&quot;/dev/mmcblk2&quot;&lt;/span&gt;,&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;/dev/mmcblk3&quot;&lt;/span&gt;};&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__type&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;code-snippet__type&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;code-snippet__type&quot;&gt;char&lt;/span&gt;*typeName[] = {&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;MMC&quot;&lt;/span&gt;,&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;SD&quot;&lt;/span&gt;,&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;&lt;u&gt;SDI&lt;/u&gt;O&quot;&lt;/span&gt;,&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;SDcombo&quot;&lt;/span&gt;};&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;type 文件里写的是 MMC 或 SD 这样的字符串，匹配上哪个就把对应的 mmcblkN 记下来，然后导出成环境变量：&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;code-snippet__line-index code-snippet__js&quot;&gt;
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;pre class=&quot;code-snippet__js&quot;&gt;
&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__built_in&quot;&gt;setenv&lt;/span&gt;(EMMC_POINT_NAME, result_point[MMC],&lt;span class=&quot;code-snippet__number&quot;&gt;1&lt;/span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__keyword&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;code-snippet__built_in&quot;&gt;access&lt;/span&gt;(result_point[SD], F_OK) ==&lt;span class=&quot;code-snippet__number&quot;&gt;0&lt;/span&gt;)&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; &lt;span class=&quot;code-snippet__built_in&quot;&gt;setenv&lt;/span&gt;(SD_POINT_NAME_2, result_point[SD],&lt;span class=&quot;code-snippet__number&quot;&gt;1&lt;/span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;// 再拼上 &quot;p1&quot; 试探第一个分区是否存在，存在才导出&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__built_in&quot;&gt;setenv&lt;/span&gt;(SD_POINT_NAME,&lt;span class=&quot;code-snippet__type&quot;&gt;name_t&lt;/span&gt;,&lt;span class=&quot;code-snippet__number&quot;&gt;1&lt;/span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;两个 SD 变量有区别：sd_point_name_2 存的是&lt;/span&gt;&lt;b&gt;&lt;span&gt;裸设备&lt;/span&gt;&lt;/b&gt;&lt;span&gt;（/dev/mmcblk1），sd_point_name 存的是&lt;/span&gt;&lt;b&gt;&lt;span&gt;第一个分区&lt;/span&gt;&lt;/b&gt;&lt;span&gt;（/dev/mmcblk1p1）。&lt;/span&gt;&lt;/p&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;b&gt;&lt;span&gt;但要注意：sd_point_name_2 在这份 SDK 里只被导出、没有被读取过&lt;/span&gt;&lt;/b&gt;&lt;span&gt;（全仓库找不到 getenv(&quot;sd_point_name_2&quot;)）。真正被消费的是 emmc_point_name——update_engine/rktools.c 和 rkupdate 都靠它定位整块 flash。所以别把 sd_point_name_2 当成一条已经打通的链路。&lt;/span&gt;&lt;/p&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;这个函数会先等 /dev/block/by-name/misc 出现再开始探测——又回到了第四节那条 udev 规则：&lt;/span&gt;&lt;b&gt;&lt;span&gt;by-name 没建好，闪存探测就不会开始。&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;整条链路串起来是这样：&lt;/span&gt;&lt;/p&gt; 
 &lt;img src=&quot;https://file1.elecfans.com//web3/M00/7D/4E/wKgZO2rFgPaAFgB3AAB3hAitorM894.png&quot; alt=&quot;wKgZO2rFgPaAFgB3AAB3hAitorM894.png&quot; class=&quot;aligncenter&quot;&gt;
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;b&gt;&lt;span&gt;两个构建期的产物（parameter.txt、fstab）和一条 udev 规则，必须同时对齐，recovery 才能正常工作。&lt;/span&gt;&lt;/b&gt;&lt;span&gt;少任何一环，表现都是&quot;找不到设备&quot;。&lt;/span&gt;&lt;/p&gt; 
 &lt;h2 style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-style:normal;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;font-size:20px;border-left:4px solid rgb(17,17,17);padding-left:10px;margin:34px 0px 12px;&quot;&gt; &lt;span&gt;七、Debian/Ubuntu 上为什么跑不起来&lt;/span&gt;&lt;/h2&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;官方文档 2.3 节专门讲了这个问题，原因是这一节开头那条链里，&lt;/span&gt;&lt;b&gt;&lt;span&gt;第四条断了&lt;/span&gt;&lt;/b&gt;&lt;span&gt;——Debian/Ubuntu 系统里没有生成 /dev/block/by-name/ 的规则，设备节点是 /dev/mmcblk0p0、/dev/mmcblk0p1 这种数字名字。而 recovery 里到处都是写死的 by-name 路径：&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;code-snippet__line-index code-snippet__js&quot;&gt;
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;pre class=&quot;code-snippet__js&quot;&gt;
&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;// external/recovery/common.h&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;&lt;span class=&quot;code-snippet__keyword&quot;&gt;define&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;MISC_PARTITION_NAME_BLOCK&lt;/span&gt;&lt;span class=&quot;code-snippet__meta&quot;&gt;&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;/dev/block/by-name/misc&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;文档给的解法是把 buildroot 的 udev 规则拷过去。&lt;/span&gt;&lt;b&gt;&lt;span&gt;但这里有个坑&lt;/span&gt;&lt;/b&gt;&lt;span&gt;：文档里写的文件名是 61-partition-init.rules，而这份 SDK 里实际的文件叫 61-persistent-internal-storage.rules——名字对不上，照着文档去找会找不到。&lt;/span&gt;&lt;/p&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;更麻烦的是，Ubuntu 那边&lt;/span&gt;&lt;b&gt;&lt;span&gt;已经有一条同类的规则了，但生成的是另一个路径&lt;/span&gt;&lt;/b&gt;&lt;span&gt;。这份 SDK 里就有，在 ubuntu/binary/usr/lib/udev/rules.d/61-persistent-storage-android.rules：&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;code-snippet__line-index code-snippet__js&quot;&gt;
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;pre class=&quot;code-snippet__js&quot;&gt;
&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__attribute&quot;&gt;ACTION&lt;/span&gt;!=&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;remove&quot;&lt;/span&gt;, KERNEL==&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;mmcblk[0-9]p[0-9]&quot;&lt;/span&gt;, ENV{PARTNAME}==&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;?*&quot;&lt;/span&gt;,&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt; SYMLINK+=&lt;span class=&quot;code-snippet__string&quot;&gt;&quot;disk/by-partlabel/$env{PARTNAME}&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;注意 SYMLINK+= 后面跟的是&lt;/span&gt;&lt;b&gt;&lt;span&gt;disk/by-partlabel/&lt;/span&gt;&lt;/b&gt;&lt;span&gt;，不是&lt;/span&gt;&lt;b&gt;&lt;span&gt;block/by-name/&lt;/span&gt;&lt;/b&gt;&lt;span&gt;。&lt;/span&gt;&lt;/p&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;两条规则同时看下来，Ubuntu 上会出现这样的局面：&lt;/span&gt;&lt;/p&gt; 
 &lt;table style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;border-collapse:collapse;width:720px;font-size:13.5px;margin:10px 0px;border:1px solid rgb(229,231,235);&quot;&gt;
  &lt;tbody&gt;
   &lt;tr style=&quot;background:rgb(249,250,251);&quot;&gt;
    &lt;th style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;系统&lt;/span&gt;&lt;/th&gt; 
    &lt;th style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;生成的符号链接&lt;/span&gt;&lt;/th&gt; 
    &lt;th style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;recovery 需要的&lt;/span&gt;&lt;/th&gt; 
    &lt;th style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;结果&lt;/span&gt;&lt;/th&gt; 
   &lt;/tr&gt;
   &lt;tr&gt;
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;Buildroot recovery&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;/dev/block/by-name/*&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;/dev/block/by-name/*&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;正常&lt;/span&gt;&lt;/td&gt; 
   &lt;/tr&gt;
   &lt;tr&gt;
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;Debian / Ubuntu&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;/dev/disk/by-partlabel/*&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;/dev/block/by-name/*&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;b&gt;&lt;span&gt;找不到设备&lt;/span&gt;&lt;/b&gt;&lt;/td&gt; 
   &lt;/tr&gt;
  &lt;/tbody&gt;
 &lt;/table&gt;
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;所以光在 Ubuntu 里&quot;有一条 android 风格的 udev 规则&quot;是不够的，路径必须落到 block/by-name。稳妥的做法就是文档说的：把 buildroot 那条规则整个拷过去，放到 /etc/udev/rules.d/ 或 /lib/udev/rules.d/ 下。&lt;/span&gt;&lt;/p&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;如果串口里看到 /dev/block/ 里是一堆纯数字（179:0、179:1、7:0 这种），就说明规则没生效——官方 FAQ 4.3 节给的就是这个排查点。&lt;/span&gt;&lt;/p&gt; 
 &lt;h2 style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-style:normal;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;font-size:20px;border-left:4px solid rgb(17,17,17);padding-left:10px;margin:34px 0px 12px;&quot;&gt; &lt;span&gt;八、格式化与扩容&lt;/span&gt;&lt;/h2&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;找到设备之后，擦数据和扩容走的是同一张表。format_volume() 按 fs_type 分派到外部工具：&lt;/span&gt;&lt;/p&gt; 
 &lt;ul class=&quot;code-snippet__line-index code-snippet__js&quot;&gt;
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;pre class=&quot;code-snippet__js&quot;&gt;
&lt;code&gt;&lt;span&gt;&lt;span class=&quot;code-snippet__comment&quot;&gt;// external/recovery/roots.c&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;ext4 → make_ext4&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;ext2 → make_ext2&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;vfat → make_vfat&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span&gt;ntfs → make_ntfs&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;MTD 上的 yaffs2 / mtd / ubifs 走另一条路，用 mtd_erase_blocks() 直接擦（注意 mtd 也是合法值，别只记 yaffs2）。&lt;/span&gt;&lt;/p&gt; 
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;resize_volume() 支持得窄一些，&lt;/span&gt;&lt;b&gt;&lt;span&gt;只有 ext4 和 ext2&lt;/span&gt;&lt;/b&gt;&lt;span&gt;，调的是 rk_check_and_resizefs()。这也是为什么升级 userdata 之后能做自动扩容，而 vfat 不行——官方文档 4.3.3 节讲把 userdata 改成 vfat 时，通篇没提扩容，原因就在这里。&lt;/span&gt;&lt;/p&gt; 
 &lt;h2 style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-style:normal;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;font-size:20px;border-left:4px solid rgb(17,17,17);padding-left:10px;margin:34px 0px 12px;&quot;&gt; &lt;span&gt;小结&lt;/span&gt;&lt;/h2&gt; 
 &lt;table style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;border-collapse:collapse;width:720px;font-size:13.5px;margin:10px 0px;border:1px solid rgb(229,231,235);&quot;&gt;
  &lt;tbody&gt;
   &lt;tr style=&quot;background:rgb(249,250,251);&quot;&gt;
    &lt;th style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;环节&lt;/span&gt;&lt;/th&gt; 
    &lt;th style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;靠什么&lt;/span&gt;&lt;/th&gt; 
    &lt;th style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;常见故障&lt;/span&gt;&lt;/th&gt; 
   &lt;/tr&gt;
   &lt;tr&gt;
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;知道 /userdata 在哪&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;/etc/fstab 的 PARTLABEL= 被当 LABEL= 匹配&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;改 fstab 写法就断&lt;/span&gt;&lt;/td&gt; 
   &lt;/tr&gt;
   &lt;tr&gt;
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;按名字找分区&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;udev 规则生成 /dev/block/by-name/&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;规则没装 / 名字不对&lt;/span&gt;&lt;/td&gt; 
   &lt;/tr&gt;
   &lt;tr&gt;
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;SD 卡寻址&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;被 udev 规则&lt;/span&gt;&lt;b&gt;&lt;span&gt;故意排除&lt;/span&gt;&lt;/b&gt;&lt;span&gt;，走 sd_point_name&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;误以为 SD 也该有 by-name&lt;/span&gt;&lt;/td&gt; 
   &lt;/tr&gt;
   &lt;tr&gt;
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;分辨 eMMC/SD&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;读 /sys/bus/mmc/devices/*/type&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;—&lt;/span&gt;&lt;/td&gt; 
   &lt;/tr&gt;
   &lt;tr&gt;
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;计算 total sectors&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;getFlashSize()&lt;/span&gt;&lt;/td&gt; 
    &lt;td style=&quot;border:1px solid rgb(229,231,235);padding:8px 10px;text-align:left;&quot;&gt; &lt;span&gt;MTD 要减掉 4 个擦除块&lt;/span&gt;&lt;/td&gt; 
   &lt;/tr&gt;
  &lt;/tbody&gt;
 &lt;/table&gt;
 &lt;p style=&quot;color:rgb(17,17,17);font-family:'-apple-system', 'PingFang SC', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;font-size:medium;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-thickness:initial;text-decoration-style:initial;text-decoration-color:initial;&quot;&gt; &lt;span&gt;下一篇讲 UI：为什么官方文档说&quot;不带屏的设备必须打开 No UI for recovery&quot;——这个配置背后到底是哪一行代码会让 recovery 起不来。&lt;/span&gt;&lt;/p&gt; 
 &lt;p&gt; &lt;/p&gt; 
&lt;/p&gt;</description><pubDate>Thu, 15 Oct 2026 06:21:41 +0800</pubDate></item><item><title>降本增效不是喊口号：测一测你的工厂品质管控ROI究竟是多少？</title><link>https://www.jopqhv.cn/keji/3044.html</link><description>&lt;img src=&quot;https://file1.elecfans.com/web3/M00/43/EE/wKgZO2lM9YWATquBAALf5B4aHkc533.gif&quot; alt=&quot;文章配图-1&quot; class=&quot;aligncenter&quot;&gt;
&lt;p style=&quot;margin-left:0px;&quot;&gt;在当前的微利时代，工厂老板最关心的就是ROI。但很多工厂的品质管控仍停留在“买个凑合用”的阶段。作为国内领先的&lt;u&gt;PCB&lt;/u&gt;测量仪器、智能检测设备专业解决方案供应商，班通科技智慧管家倾心为您提供一份科学的品质ROI测算指南。&lt;/p&gt;
&lt;p style=&quot;margin-left:0px;&quot;&gt;&lt;strong&gt;测算公式：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left:0px;&quot;&gt;不仅仅是买设备，真实的ROI = (减少的废品成本 + 降低的人工成本 + 缩短的交期收益) / (设备采购成本 + 维护成本)。&lt;/p&gt;
&lt;p style=&quot;margin-left:0px;&quot;&gt;&lt;strong&gt;Bamtone班通的ROI优势&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
 &lt;li&gt;采购成本：PCB精密测量与智能检测设备国产替代的领先品牌，在性能和精度相当的情况下，价格仅约为进口的60%。&lt;/li&gt;
 &lt;li&gt;增效收益：Bamtone班通智能检测设备全面实现自动化检测替代人工，人均效率提升3倍以上。&lt;/li&gt;
 &lt;li&gt;减损收益：&lt;u&gt;高精度&lt;/u&gt;把关，减少因批量退货产生的巨额损失，为品牌声誉提供产品质量保障。&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;margin-left:0px;&quot;&gt;&lt;strong&gt;如果我已经有了旧设备，还有必要换Bamtone班通的新自动化设备吗？&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left:0px;&quot;&gt;答：如果旧设备效率低下且无法联网，其维护成本和隐性损失可能已超过新机采购费。Bamtone班通提供以旧换新政策，助您快速完成技术升级。&lt;/p&gt;
&lt;p style=&quot;margin-left:0px;&quot;&gt;&lt;strong&gt;如何量化“品牌溢价”带来的收益？&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left:0px;&quot;&gt;答：使用Bamtone班通这类行业标杆设备，能显著提升您在海外高端客户审计时的评分，从而获得更高溢价的订单。数据说话，价值驱动。班通科技，让您的每一分品质投入都转化为实实在在的利润。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description><pubDate>Thu, 15 Oct 2026 06:20:49 +0800</pubDate></item><item><title>油压传感器灌封后为什么常温正常，接触油液一段时间却开始漂移？先查介质渗透和界面变化</title><link>https://www.jopqhv.cn/keji/3043.html</link><description>&lt;p&gt;油压&lt;u&gt;传感器&lt;/u&gt;灌封后常温测试正常，但接触液压油、润滑油等介质一段时间后出现零点漂移、绝缘下降或密封异常，不能只查传感芯片；更应该检查灌封材料是否发生吸液、溶胀、软化，以及胶与金属、塑料之间的界面是否发生变化。油压传感器用胶的核心不是“初始粘得牢”，而是接触实际介质后仍保持稳定。&lt;/p&gt;
&lt;img src=&quot;https://mp.toutiao.com/mp/agw/article_material/open_image/get?code=NTI5ZmI5YTFhMzcyZGUzNTIxNTAwOGIxZDE2MTg1MTcsMTc5MTk0ODk3MDAxOQ==&quot; alt=&quot;get?code=NTI5ZmI5YTFhMzcyZGUzNTIxNTAwOGIxZDE2MTg1MTcsMTc5MTk0ODk3MDAxOQ==&quot; class=&quot;aligncenter&quot;&gt;
&lt;p&gt;油压传感器灌封&lt;/p&gt;
&lt;p&gt;这类失效最容易误判的一点是：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;出厂测试全部合格，就认为灌封材料没有问题。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;但油压传感器面对的是典型的长期复合工况：&lt;/p&gt;
&lt;p&gt;压力 + 温度 + 振动 + 油液介质。&lt;/p&gt;
&lt;p&gt;初始性能，只能证明材料“刚做完时可以”。&lt;/p&gt;
&lt;h2&gt;一、为什么常温测试合格，泡油以后才出现问题？&lt;/h2&gt;
&lt;p&gt;因为常温测试主要看到的是材料的&lt;strong&gt;初始状态&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;长期接触油液以后，真正需要观察的是：&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;胶体尺寸有没有变化；&lt;/li&gt;
 &lt;li&gt;硬度有没有变化；&lt;/li&gt;
 &lt;li&gt;界面有没有脱离；&lt;/li&gt;
 &lt;li&gt;绝缘有没有下降；&lt;/li&gt;
 &lt;li&gt;传感器零点有没有漂移。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;尤其对于精密压力传感器，即使材料没有明显开裂，只要发生轻微溶胀或界面变化，也可能改变内部&lt;u&gt;机械&lt;/u&gt;边界条件。&lt;/p&gt;
&lt;p&gt;所以：&lt;/p&gt;
&lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;“胶没有掉”不能作为耐油合格的唯一判断。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;二、油液进入以后，材料可能发生什么变化？&lt;/h2&gt;
&lt;p&gt;不同材料体系、不同油液和不同温度下，结果并不相同。&lt;/p&gt;
&lt;p&gt;需要重点观察四类变化。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一：吸液。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;介质进入聚合物内部后，可能引起质量和尺寸变化。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二：溶胀。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;胶体体积增加后，会向周围结构施加额外机械作用。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三：软化或性能变化。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;材料长期接触介质后，力学状态可能与初始状态不同。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四：界面失效。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;即使胶体本身没有明显异常，胶与金属、塑料之间也可能先出现脱离。&lt;/p&gt;
&lt;p&gt;对于传感器来说，第四种往往最容易被忽略。&lt;/p&gt;
&lt;h2&gt;三、为什么油压传感器特别怕“轻微溶胀”？&lt;/h2&gt;
&lt;p&gt;普通电子模块可能只关心：&lt;/p&gt;
&lt;p&gt;有没有进水、有没有短路。&lt;/p&gt;
&lt;p&gt;&lt;u&gt;压力传感器&lt;/u&gt;还要关心：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;封装材料有没有改变敏感结构的受力状态。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果胶体靠近：&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;&lt;u&gt;MEMS&lt;/u&gt;敏感单元&lt;/li&gt;
 &lt;li&gt;压力膜片&lt;/li&gt;
 &lt;li&gt;陶瓷基板&lt;/li&gt;
 &lt;li&gt;焊线&lt;/li&gt;
 &lt;li&gt;精密&lt;u&gt;PCB&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;材料长期吸液后的尺寸变化就可能形成额外应力。&lt;/p&gt;
&lt;p&gt;这种应力未必让器件立即损坏，却可能表现为：&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;零点偏移&lt;/li&gt;
 &lt;li&gt;重复性变差&lt;/li&gt;
 &lt;li&gt;温漂变化&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此“传感器漂移”和“胶没有开裂”完全可以同时发生。&lt;/p&gt;
&lt;h2&gt;四、怎样判断到底是材料本体问题还是界面问题？&lt;/h2&gt;
&lt;p&gt;建议先看失效形态。&lt;/p&gt;
&lt;table&gt;
 &lt;tbody&gt;
  &lt;tr&gt;
   &lt;td&gt;失效表现&lt;/td&gt;
   &lt;td&gt;优先排查方向&lt;/td&gt;
   &lt;td&gt;重点验证&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;胶体整体变软&lt;/td&gt;
   &lt;td&gt;材料耐介质&lt;/td&gt;
   &lt;td&gt;硬度、质量变化&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;胶体明显膨胀&lt;/td&gt;
   &lt;td&gt;吸液/溶胀&lt;/td&gt;
   &lt;td&gt;尺寸、重量&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;金属边缘出现缝隙&lt;/td&gt;
   &lt;td&gt;界面粘接&lt;/td&gt;
   &lt;td&gt;截面、剥离&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;塑料壳体边缘脱离&lt;/td&gt;
   &lt;td&gt;基材相容&lt;/td&gt;
   &lt;td&gt;实际壳体测试&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;零点缓慢漂移&lt;/td&gt;
   &lt;td&gt;应力变化&lt;/td&gt;
   &lt;td&gt;电信号+尺寸&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;高温泡油后才异常&lt;/td&gt;
   &lt;td&gt;温度与介质&lt;u&gt;耦合&lt;/u&gt;&lt;/td&gt;
   &lt;td&gt;高温浸泡&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;每次固定位置异常&lt;/td&gt;
   &lt;td&gt;结构/界面&lt;/td&gt;
   &lt;td&gt;局部截面&lt;/td&gt;
  &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这里有一个非常实用的判断：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;固定界面反复失效，优先查材料与该基材的匹配；整批随机漂移，再查工艺和材料状态波动。&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;五、为什么不能只看“耐油”两个字？&lt;/h2&gt;
&lt;p&gt;因为实际油液并不是一个统一介质。&lt;/p&gt;
&lt;p&gt;工程现场可能接触：&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;液压油&lt;/li&gt;
 &lt;li&gt;润滑油&lt;/li&gt;
 &lt;li&gt;&lt;u&gt;变速箱&lt;/u&gt;油&lt;/li&gt;
 &lt;li&gt;冷却介质&lt;/li&gt;
 &lt;li&gt;清洗剂&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不同介质的化学组成、添加剂和使用温度并不相同。&lt;/p&gt;
&lt;p&gt;所以“耐某种油”不能直接推导为：&lt;/p&gt;
&lt;blockquote&gt;
 &lt;p&gt;对所有油液都稳定。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;真正有效的验证方式是：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;实际介质 + 实际温度 + 实际时间。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;而不是只看一个泛化的“耐油”&lt;u&gt;标签&lt;/u&gt;。&lt;/p&gt;
&lt;h2&gt;六、为什么材料体系要根据传感器位置重新选择？&lt;/h2&gt;
&lt;p&gt;油压传感器灌封&lt;/p&gt;
&lt;p&gt;油压传感器内部并不是所有区域承担相同任务。&lt;/p&gt;
&lt;p&gt;靠近敏感芯片的位置，更关注：低应力。&lt;/p&gt;
&lt;p&gt;靠近壳体和引线出口的位置，更关注：密封与界面稳定。&lt;/p&gt;
&lt;p&gt;需要机械固定的位置，还要考虑：粘接和结构强度。&lt;/p&gt;
&lt;p&gt;因此同一只传感器内部完全可能存在：&lt;strong&gt;芯片保护材料 + 灌封材料 + 壳体密封材料&lt;/strong&gt;多种材料。&lt;/p&gt;
&lt;p&gt;这比“一种胶从底灌到顶”更容易针对不同失效风险设计。&lt;/p&gt;
&lt;h2&gt;七、什么时候应该优先考虑柔性环氧？&lt;/h2&gt;
&lt;p&gt;对于需要：&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;较好的机械固定&lt;/li&gt;
 &lt;li&gt;&lt;u&gt;电气&lt;/u&gt;绝缘&lt;/li&gt;
 &lt;li&gt;耐介质&lt;/li&gt;
 &lt;li&gt;同时又不希望使用过高刚性体系的工业传感器，可以评估柔性环氧路线。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;易立安ELAPLUS柔性环氧系列采用韧性改性思路，应用方向包括PCB、&lt;u&gt;电源模块&lt;/u&gt;和传感器；其中EP 1720 A/B定位为双组分低应力耐油柔性环氧灌封材料。&lt;/p&gt;
&lt;p&gt;但这里仍然不能简单理解为：“写着耐油，所以任何油压传感器都能直接用。”&lt;/p&gt;
&lt;p&gt;最终仍需用项目实际介质验证。&lt;/p&gt;
&lt;h2&gt;八、如果靠近MEMS敏感芯片，为什么又不能只追求耐油和强度？&lt;/h2&gt;
&lt;p&gt;因为MEMS附近最怕的是：&lt;strong&gt;封装材料把机械应力传给敏感结构。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;官网现有压力传感器方案采用SIGEL 1806双组分硅凝胶进行低应力保护，其核心思路就是通过柔性凝胶降低温度、振动和冲击对敏感区域的机械影响。&lt;/p&gt;
&lt;p&gt;所以材料选择必须分清两个任务：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;外层封装要扛环境。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;敏感区域要控制应力。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;把两者混为一个指标，很容易出现“防护很强，但传感精度反而受影响”的情况。&lt;/p&gt;
&lt;h2&gt;九、耐油验证应该怎么做才真正有价值？&lt;/h2&gt;
&lt;p&gt;不要只做“泡进去，看外观”。&lt;/p&gt;
&lt;p&gt;建议至少建立四组数据。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;浸泡前：&lt;/strong&gt;记录重量、尺寸、硬度、电性能和传感器零点。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;实际介质浸泡：&lt;/strong&gt;使用项目真实油液。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;温度加速：&lt;/strong&gt;按照实际工况设计温度条件，而不是随意提高温度。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;浸泡后：&lt;/strong&gt;再次测量重量、尺寸、硬度、绝缘和传感器输出。&lt;/p&gt;
&lt;p&gt;最后再做：截面检查。&lt;/p&gt;
&lt;p&gt;这样才能知道：到底是胶体变了，还是界面先变了。&lt;/p&gt;
&lt;h2&gt;十、行业避坑：耐油选胶最常见的3个误区&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;误区一：只看初始粘接强度。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;初始粘得牢，不代表高温泡油后界面仍然稳定。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误区二：一种油测试通过，就认为所有油都可以。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;不同油液添加剂和温度条件不同，不能直接横向替代。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;误区三：只看胶有没有开裂。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对于精密传感器，零点漂移可能早于肉眼可见的材料破坏。&lt;/p&gt;
&lt;p&gt;真正应该关注的是：&lt;/p&gt;
&lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;材料变化有没有传递成传感器性能变化。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;十一、场景化适配：什么情况下适合哪种思路？&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;更适合评估柔性耐油环氧：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;需要灌封、绝缘、一定结构固定，同时存在油液介质的工业传感器。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;更适合低应力凝胶：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;靠近MEMS、敏感膜片等对机械应力高度敏感的位置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不建议直接套用单一材料：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;既有敏感芯片，又有高强度壳体固定和长期油液接触的复杂结构。&lt;/p&gt;
&lt;p&gt;这类产品更适合做：&lt;strong&gt;分区用胶。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;易立安ELAPLUS坚持的诊断式选型逻辑是：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;先判失效位置 → 再查介质、结构和工艺 → 最后定材料体系。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这也是“&lt;strong&gt;易立安：按工况选胶，不堆参数&lt;/strong&gt;”在传感器项目中的具体做法。&lt;/p&gt;
&lt;h2&gt;FAQ&lt;/h2&gt;
&lt;h2&gt;油压传感器泡油后漂移，一定是芯片问题吗？&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;不一定。&lt;/strong&gt;灌封材料吸液、溶胀或界面变化都可能改变敏感结构的机械边界，从而影响输出。&lt;/p&gt;
&lt;h2&gt;耐油胶是不是泡油后完全没有任何变化？&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;不能这样理解。&lt;/strong&gt;工程上应该通过质量、尺寸、硬度、界面和电性能变化综合判断是否满足项目要求。&lt;/p&gt;
&lt;h2&gt;EP 1720 A/B适合什么方向？&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;适合需要低应力、耐油和绝缘防护的柔性环氧灌封方向，可用于传感器等电子封装场景。&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;MEMS附近也能直接用高强度耐油环氧吗？&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;不能只按耐油和强度决定。&lt;/strong&gt;MEMS敏感区域还必须优先评估封装应力对测量精度的影响。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</description><pubDate>Thu, 15 Oct 2026 06:20:48 +0800</pubDate></item><item><title>联合国官员：古灵渠运河展示前辈管理水方面的非凡智慧</title><link>https://www.jopqhv.cn/keji/3042.html</link><description>&lt;p&gt;　　中新网桂林10月13日电(周利朔 欧惠兰)2026年世界运河大会13日在广西桂林开幕，联合国教科文组织东亚地区办事处主任夏泽翰(Shahbaz Khan)在开幕式上发表视频致辞时表示，拥有两千多年历史的古灵渠运河，展示了前辈在管理水方面的非凡智慧。同时，平陆运河也代表着新一代的水基础设施和技术创新。它们一起提供了历史与未来、传统智慧与现代科学、人与自然之间的有力对话。&lt;/p&gt;  
&lt;img style=&quot;display: block; margin: auto; cursor: pointer;&quot; src=&quot;https://i2.chinanews.com.cn/simg/ypt/2026/261013/2831dbfc-2a72-40a4-8829-e9f2ad061ab1_zsite.jpg&quot; class=&quot;aligncenter&quot;&gt;   10月13日，联合国教科文组织东亚地区办事处主任夏泽翰发表视频致辞。邓竣缤 　摄  
&lt;p&gt;　　他表示，首先，我们需要将水科学、创新和传统知识结合在一起。目前，我们正在与成员国和合作伙伴合作，以解决雨水安全、气候变化、弹性社会和创新有关的日益复杂的挑战。数千年来，人类社区以及文明在水资源利用，景观保护以及适应环境变化方面积累了非常宝贵的知识。&lt;/p&gt; 
&lt;p&gt;　　他说，我们必须认识到水不仅是一种资源，水也是文化。一条运河不仅是一个工程结构，它也是一个文化景观，一个知识和记忆的宝库，以及几代人之间的鲜活联系。联合国教科文组织在促进文化多样性、遗产保护、教育和跨文化多领域展开对话。从这个角度来看，保护运河遗产不仅意味着保护物理结构，还意味着保护与水有关的知识、实践和价值。与此同时，遗产仍然与今天的人们有关。我们面临的挑战是使古代运河和其他形式的水遗产能够为教育、旅游、社区福祉和可持续的生计作出贡献，同时保护其文化和生态的完整性。&lt;/p&gt; 
&lt;p&gt;　　他指出，我们需要把人与自然的和谐放在可持续发展的核心。气候变化、生物多样性丧失、缺水、洪水和其他日益增长的压力提醒我们，水安全、生态系统健康、文化遗产和人类福祉是紧密联系的。运河提供了一个很好的例子，它们连接着河流、景观、城市、生态系统和社区。因此，它们的可持续管理要求我们跨越传统边界开展工作，将水、生物多样性、文化、气候、旅游、教育和可持续发展结合在一起。(完)&lt;/p&gt; 
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;    &lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt;    
&lt;span&gt;【编辑:徐世傲】 &lt;/span&gt;</description><pubDate>Wed, 14 Oct 2026 07:04:39 +0800</pubDate></item><item><title>“新艺中国·数艺无界”文化和科技融合新质生产力大会在长沙举行</title><link>https://www.jopqhv.cn/keji/3041.html</link><description>&lt;p&gt;　　中新网长沙10月13日电 (记者 徐雪莹 程小路)“新艺中国·数艺无界”文化和科技融合新质生产力大会13日在湖南长沙举行，全国新的社会阶层人士“新艺中国”服务团湖南服务考察同步启动。中央统战部副部长王瑞军，湖南省委常委、省委统战部部长隋忠诚出席活动并致辞。&lt;/p&gt;  
&lt;img style=&quot;display: block; margin: auto; cursor: pointer;&quot; src=&quot;https://i2.chinanews.com.cn/simg/ypt/2026/261013/9a0b28c4-c5fd-4174-8c99-889c4bb4e898_zsite.jpg&quot; class=&quot;aligncenter&quot;&gt;   10月13日，“新艺中国·数艺无界”文化和科技融合新质生产力大会在湖南长沙举行。　中新网记者 徐雪莹 摄  
&lt;p&gt;　　大会上，6位嘉宾围绕文化和科技融合主题，从文化传承、技术创新、产业培育等多个维度分享前沿思考、建言产业发展。会上还发布了《“新艺中国”马栏山倡议》，号召各界同仁共同探索文化和科技深度融合发展新路径，携手担负文化强国建设新使命。&lt;/p&gt; 
&lt;p&gt;　　现场设置文化和科技融合成果体验展区，一大批数字文博、数智文创、数字非遗、3D动漫成果集中展出，让参会嘉宾沉浸式感受数字文化魅力。&lt;/p&gt; 
&lt;p&gt;　　大会之后，还将举办3场高端对话(专场对接)，即由湖南省文旅厅牵头“智慧文旅”专场对接活动，湖南省文联和省作协牵头“新大众文艺的网络原生力量”高端对话以及长沙市牵头“文化和科技融合”高端对话暨产业推介。服务团将分赴湘潭、张家界、湘西开展服务考察，搭建文化、科技、人才、资本精准对接桥梁，推动更多文化科技融合项目落地合作。&lt;/p&gt; 
&lt;p&gt;　　据悉，“新艺中国”品牌活动是全国新的社会阶层人士投身文化传承创新的重要平台。该项目自2025年11月17日在云南启动以来，持续深耕非遗保护传承、文艺创作生产、数字文化传播、文创设计开发等领域，充分发挥新的社会阶层人士创新创造优势，把人才智力优势转化为文化强国建设力量。(完)&lt;/p&gt; 
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;    &lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt;    
&lt;span&gt;【编辑:李骏】 &lt;/span&gt;</description><pubDate>Wed, 14 Oct 2026 07:04:30 +0800</pubDate></item><item><title>1214亿研发！华为首发星迹定位技术，全球研发投资Top6</title><link>https://www.jopqhv.cn/keji/3040.html</link><description>&lt;p&gt; 10月12日，在华为终端创新技术沟通会上，华为终端BG CTO、华为终端BG硬件工程与产品开发管理部部长李小龙宣布，2026年上半年，华为集团研发投入创历史同期新高，研发投入达到1214亿元，研发费用率达到25.9%，同比增长25.2%，华为全球研发投资排名位居全球Top6。近10年，华为研发总投入达到13820亿元。在全球科技公司中属于第一梯队。华为是全球最大的专利持有企业之一，截至2025年底，华为全球持有有效专利数量超过16.5万，专利许可协议数量超过260个，终端技术品牌背后正是这张覆盖全球的专利网络。&lt;/p&gt; 
&lt;p style=&quot;text-align:center;&quot;&gt; &lt;img alt=&quot;&quot; src=&quot;https://file1.elecfans.com/web3/M00/7E/63/wKgZO2rMlfaAEyswAAJR7I1QsLE836.png&quot; style=&quot;width:600px;height:289px;&quot; class=&quot;aligncenter&quot;&gt;&lt;/p&gt; 
&lt;p&gt; 相比于美国巨头苹果、微软、谷歌、&lt;u&gt;亚马逊&lt;/u&gt;和&lt;u&gt;英特尔&lt;/u&gt;，华为走得是“芯-端-网-云-&lt;u&gt;AI&lt;/u&gt;”全栈路线，&lt;u&gt;英伟达&lt;/u&gt;强势在于&lt;u&gt;GPU&lt;/u&gt;、CUDA和AI计算生态，谷歌强在搜索、安卓系统、云和AI模型，苹果强在终端硬件、芯片设计和封闭生态。华为的特点是覆盖更宽：&lt;u&gt;通信&lt;/u&gt;设备、&lt;u&gt;5G&lt;/u&gt;/5G-A，麒麟芯片、昇腾AI芯片、鲲鹏服务器、&lt;u&gt;鸿蒙&lt;/u&gt;/欧拉&lt;u&gt;操作系统&lt;/u&gt;、高斯数据库、盘古大模型、华为云、智能汽车解决方案都有布局。这种全栈能力让华为提供一套相对独立于美国技术链的完整方案，但也意味着研发战线更长，投入更重。&lt;/p&gt; 
&lt;p&gt; 这也从华为BG终端董事长余承东9月29日的谈话中表述出来。9月29日，他在国际媒体沟通会上表示，从2007年到2025年底，华为累计研发投入超过1.8万亿元人民币。早些年，我们每年将约10%收入投入到研发，近年来，这一比例已经提高到20%以上。我们刚刚发布的Mate90系列&lt;u&gt;智能手机&lt;/u&gt;搭载最新的麒麟9050 Pro芯片，整机性能较上一代提升31%。其中，巴龙调制解调器、图像信号&lt;u&gt;处理器&lt;/u&gt;（ISP）、灵犀&lt;u&gt;CPU&lt;/u&gt;、Maleoon GPU、以及采用华为达芬奇架构进行AI处理的NPU，均自主设计。最近，华为还在&lt;u&gt;半导体&lt;/u&gt;领域取得了一项新突破：基于韬定律的逻辑折叠技术。麒麟9050 Pro芯片采用该技术。华为2019年开发鸿蒙操作系统，在此之前，华为是安卓社区乃至整个安卓生态的重要贡献者。&lt;/p&gt; 
&lt;p&gt; 经过多年的努力，目前已经有超过9000万台设备运行鸿蒙6和鸿蒙7操作系统，我们预计，到今年年底，这个数字将超过1个亿。美国科技巨头收入高度全球化，能够把研发成本摊到全球市场，华为虽然也有海外业务，但近年收入更加依赖中国市场，尤其在通信、终端、云、智能汽车解决方案领域，国内生态支撑作用明显。这使得华为在国内产业带动能力很强，但全球生态扩展难度也更高。&lt;/p&gt; 
&lt;h3&gt; 华为首发星迹定位技术，折叠屏累计出货量超2000万台&lt;/h3&gt; 
&lt;p&gt; 考虑到隧道、跑步、地库、滑雪、室内、高架和运动场等场景的拓展，传统的定位技术已经无法满足消费者复杂场景需求，华为推出的星迹定位技术。李小龙指出，针对高架行驶时没有&lt;u&gt;高精度&lt;/u&gt;导航无法及时变道这一痛点，华为采用&lt;u&gt;海思&lt;/u&gt;短距芯片+GNSS载波相位测量，实现测距精度提升超10倍。&lt;/p&gt; 
&lt;p style=&quot;text-align:center;&quot;&gt; &lt;/p&gt; 
&lt;p&gt; 华为星迹定位的优势：一、隧道内车道级定位，星迹定位宣称通过AI速度估算和地磁匹配，能在卫星&lt;u&gt;信号&lt;/u&gt;缺失的隧道里面继续维持车道级定位，这一点是目前业界少有的能力；&lt;/p&gt; 
&lt;p&gt; 二、多源融合系统，包括GNSS载波定位、RTK、AI-PDR、地磁、3D路网、室内围栏等，目标是在卫星信号弱或无信号时也保持连续定位。3D悬浮&lt;u&gt;天线&lt;/u&gt;强化信号，RTK与AI-PDR融合&lt;u&gt;算法&lt;/u&gt;实现车道级亚米级定位，华为星迹定位技术在车道级导航下能实现亚米级的定位精度。&lt;/p&gt; 
&lt;p&gt; 三、消费终端覆盖更完整：它不仅面向测绘、&lt;u&gt;无人机&lt;/u&gt;或者专业车机，可以落地到&lt;u&gt;手机&lt;/u&gt;、手表、车机、地库、商场、运动场等日常场景。相比之下，&lt;u&gt;高通&lt;/u&gt;、&lt;u&gt;博通&lt;/u&gt;、&lt;u&gt;联发科&lt;/u&gt;、u-blox等芯片和服务在全球手机、汽车、工业设备中渗透率更高，海外地图数据和位置服务更加成熟。华为的技术突破在中国落地更有优势。华为星迹定位的差异化，不是单纯“卫星信号更强”，而是把高精度定位从专业设备下放到普通消费者。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt; 同时，华为宣布折叠屏手机累计发货量已经突破2000万台，2026年上半年，华为折叠屏手机市场份额超过70%，持续领跑折叠屏手机市场。值得关注的是，李小龙透露，未来华为将推出新形态折叠屏产品，进一步拓展折叠屏手机的产品形态。&lt;/p&gt;</description><pubDate>Tue, 13 Oct 2026 06:21:46 +0800</pubDate></item><item><title>高低边驱动器多通道并联应用的设计注意事项</title><link>https://www.jopqhv.cn/keji/3039.html</link><description>&lt;p style=&quot;text-indent:2em;&quot;&gt; 集成了多重保护和诊断功能的高、低边&lt;u&gt;驱动芯片&lt;/u&gt;，在&lt;u&gt;汽车电子&lt;/u&gt;和&lt;u&gt;工业控制&lt;/u&gt;领域被广泛用于替代传统的分立&lt;u&gt;MOSFET&lt;/u&gt;方案。它们能够适配不同系统中常见的阻性负载加热、容性负载快速启动、感性负载关断钳位等多种应用场景。对于不同系统而言，在多通道应用中，不同通道的负载&lt;u&gt;电流&lt;/u&gt;往往存在一定差异。当某个通道的电流需求超过驱动芯片单通道的最大带载能力时，系统将无法正常工作。一种可行的解决办法是将多通道高边驱动芯片的多个通道并联使用，以增加负载电流能力。本应用说明将详细介绍高、低边驱动芯片通道并联应用中的关键注意事项及需要考虑的限制条件。&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; &lt;strong&gt;01&lt;/strong&gt;&lt;strong&gt;多通道并联应用简介&lt;/strong&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 在实际应用中，多通道高、低边&lt;u&gt;驱动器&lt;/u&gt;在常温下工作时，单通道的电流能力通常已能满足负载需求，并驱动负载稳定工作不会触发芯片的热关断保护。然而，当环境温度升高时，负载所需的驱动电流保持不变，但驱动器的导通阻抗会随着温度升高而增大。这一物理特性导致芯片的功率损耗增加，使得原本在常温下能稳定工作的芯片，在高温下因自身发热加剧而触发热关断保护。&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 解决此问题的一种有效方式是增加外部散热器，将功率器件的热量及时散发，确保芯片整体结温工作在热关断保护阈值以下。但额外散热器的引入，无疑会增加系统成本和布局设计的复杂度。相比之下，采用多通道并联的方式，通过降低单个通道承受的电流，减小单个通道的损耗，从而有效控制温升，使芯片在较高的环境温度下仍能稳定运行于过温保护阈值之内。圣邦微电子提供多款可用于通道并联的高、低边驱动产品，代表型号如表1所示。&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 表1 圣邦微电子可用于通道并联的高、低边驱动产品&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://file1.elecfans.com/web3/M00/7E/62/wKgZO2rMkyuABUapAAANSRiLne8743.png&quot; alt=&quot;44915280-b6e4-11f1-90a1-92fbcf53809c.png&quot; class=&quot;aligncenter&quot;&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 这些多通道高、低边驱动芯片专为汽车系统和工业应用设计，集成了短路保护、过热保护、过压钳位和开路诊断功能，并具备内部和外部可配置的限流功能。其中，高边驱动器还集成了&lt;u&gt;高精度&lt;/u&gt;&lt;u&gt;电流检测&lt;/u&gt;电路。该系列器件支持多种负载驱动模式：可通过并联所有通道以驱动单个大电流负载，也可并联部分通道以应对中等电流负载，或通过单通道独立驱动适配小电流负载。并联通道输出是通过将单个器件集成的多个功率场效应管并联起来为负载提供更大的电流。此时，负载电流由原先的单通道承受变成并联的多通道分担，每个并联通道承载的电流理论值为总负载电流除以并联通道数量。这种并联配置使得这些高、低边驱动器能够驱动功率超过单通道能力的负载，如大功率卤素灯、螺线管、电磁阀及&lt;u&gt;电机&lt;/u&gt;等。&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; &lt;strong&gt;02&lt;/strong&gt;&lt;strong&gt;电流与电压输出关系&lt;/strong&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 多通道高、低边驱动器在并联工作时，从&lt;u&gt;电源&lt;/u&gt;端VCC到输出端OUT之间具有相同的电压降（VDS），高边驱动电压降为VCC-VOUT，低边驱动电压降为VDRAIN-VSOURCE。多通道并联后的总输出电流等于各通道电流之和，总电阻为各通道导通阻抗的并联等效值。图1分别展示了高、低边驱动器在n个通道并联时，电源电压VCC节点及各通道输出VOUT节点的连接方式。上部分图示为n个独立通道的导通阻抗RON(x)及其对应电流，下部分则为多通道并联后的等效导通阻抗RON(EQ)和总输出电流IOUT。&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 在理想条件下，多个通道并联使用，负载电流会被各个通道平均分配，期望实现的总输出电流IOUT是单个通道的n倍。这要求器件的各通道具有高度一致的导通阻抗。实际生产制造中，同一器件内部因工艺波动及键合线长度差异，各通道的导通阻抗存在一定偏差，导致多通道并联时总输出电流无法在各单通道间均匀分配。在一个器件内部，工艺偏差可能达到10%，以圣邦微电子推出的四通道高边驱动SGM42214xQ为例，其大批量量产测试数据显示，单通道导通阻抗的最小值为143mΩ，典型值为150mΩ，最大值为164mΩ，存在一定的生产工艺偏差。&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://file1.elecfans.com/web3/M00/7E/5A/wKgZPGrMkyuAY6CnAAAXekhIyBA228.png&quot; alt=&quot;4549c8ec-b6e4-11f1-90a1-92fbcf53809c.png&quot; class=&quot;aligncenter&quot;&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; （a）高边驱动&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; （b）低边驱动&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 图1 采用n个通道并联的高、低边驱动器连接方式（n = 2、4、6、8 Channels）&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 以12V系统应用，+85℃环境温度下需驱动总电流为6A的负载为例，可选择圣邦微电子推出的四通道高边驱动SGM42214xQ进行4通道并联驱动。参考SGM42214xQ Datasheet[1]可知，该器件在+25℃环境温度时，单通道导通阻抗的典型值为150mΩ；在+125℃环境温度时（VCC&amp;gt;13.5V），导通阻抗最大值为270mΩ。器件结温到环境温度的热阻参数θJA为25.7℃/W。由于采用4通道并联，满足总负载电流6A应用需要每个通道驱动1.5A的典型电流。理论上6A负载电流在正常工作时产生的最大发热功率为：&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 器件功率管并联驱动产生的温升为：&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 在+85℃环境温度下的器件结温为：&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 由于各通道间的导通阻抗RON存在最大±10%的偏差，每个通道的实际负载电流会在1.35A至1.65A之间变化。这种通道间的电流差异仍在器件规格所规定的电流能力和温升范围内。如图2所示，探头1测量输出电压，探头3测量电源电压，探头4设定1A/DIV，测量得出总的负载电流为6A。如图3所示，通道2（电流探头1）测得单通道最大电流为1.57A，通道4（电流探头2）测得单通道最小电流为1.43A。测量结果表明，各通道的电流和电压均在设计目标范围内。&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 图2 四通道并联驱动6A电流与电压&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://file1.elecfans.com/web3/M00/7E/5A/wKgZPGrMkyyAXfdyAAFOf1JxLJQ178.png&quot; alt=&quot;45f6a0f8-b6e4-11f1-90a1-92fbcf53809c.png&quot; class=&quot;aligncenter&quot;&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 图3 四通道并联驱动下单通道电流最大、最小值&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; &lt;strong&gt;03&lt;/strong&gt;&lt;strong&gt;并联通道设计注意事项&lt;/strong&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 在多通道并联应用中，并联后的保护功能和诊断功能近似等效于单通道的表现。为保证各并联通道的同步输出，对于直接PWM控制的高、低边驱动器需将所有并行通道的输入引脚INx连接在一起，输出引脚OUTx并联后靠近设备端连接以降低寄生电感影响，同时设计时需充分考虑各通道间导通&lt;u&gt;电阻&lt;/u&gt;、电流检测增益K、感性负载关断钳位等参数的偏差。图4展示了多通道并联下的输入、输出连接方式。对于SPI控制的开关，需确保并联通道的开关指令同步设置。此外，具有单通道故障状态指示功能的STx引脚应并联连接，经外部上拉后反馈至&lt;u&gt;微控制器&lt;/u&gt;；而并联驱动时，具有多通道独立电流感应功能的CSx引脚也需并联连接至采样电阻&lt;u&gt;RS&lt;/u&gt;ENSE，用于检测总负载电流。&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://file1.elecfans.com/web3/M00/7E/62/wKgZO2rMkyyAToYRAAAjVxJuNos666.png&quot; alt=&quot;464c95a8-b6e4-11f1-90a1-92fbcf53809c.png&quot; class=&quot;aligncenter&quot;&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 图4 多通道并联的输入和输出连接方式&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://file1.elecfans.com/web3/M00/7E/62/wKgZO2rMkyyANMXdAAKnpj7Does822.png&quot; alt=&quot;46a0aeb8-b6e4-11f1-90a1-92fbcf53809c.png&quot; class=&quot;aligncenter&quot;&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 图5 以SGM42214xQ为例的直接控制输入并联、输出开关延迟&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 图5显示了SGM42214xQ直接驱动方式下，多通道输入短接时，输出通道间的开关延迟测量结果。由于内部四通道共用同一个&lt;u&gt;电荷泵&lt;/u&gt;电路进行驱动，各通道间同步开关的延迟误差仅来自内部&lt;u&gt;时钟&lt;/u&gt;，延迟时间为微秒量级。实测发现，通道2与通道4间的输出延迟时间为0.2μs，相比开关上升/下降时间的几十微秒级别，该延迟对并联驱动负载应用基本无影响。类似地，图6展示了参考SGM42404A/B Datasheet[2]设置SPI驱动方式下的并联驱动通道&lt;u&gt;开关控制&lt;/u&gt;同步指令。图7则显示了多通道同步开通时，各单通道间的输出延迟时间测量结果。测量发现，通道2与通道4的输出延迟时间为3.6ns，满足各通道间同步开关的延迟误差范围。&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://file1.elecfans.com/web3/M00/7E/5A/wKgZPGrMky2AdWtaAAERji7UKLY247.png&quot; alt=&quot;46fb66dc-b6e4-11f1-90a1-92fbcf53809c.png&quot; class=&quot;aligncenter&quot;&gt;&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://file1.elecfans.com/web3/M00/7E/5A/wKgZPGrMky2AH8EtAADPXODfUW0474.png&quot; alt=&quot;474fbf7a-b6e4-11f1-90a1-92fbcf53809c.png&quot; class=&quot;aligncenter&quot;&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 图6 以SGM42404A/B为例四通道并联驱动SPI设置&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://file1.elecfans.com/web3/M00/7E/62/wKgZO2rMky2AKjFcAAJ0ORPT5mI506.png&quot; alt=&quot;47a39262-b6e4-11f1-90a1-92fbcf53809c.png&quot; class=&quot;aligncenter&quot;&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 图7 SGM42404A/B四通道设置SPI控制输入同步、各输出通道间开关延迟&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; &lt;strong&gt;04&lt;/strong&gt;&lt;strong&gt;并联通道应用功能参数影响&lt;/strong&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 多通道并联应用时的保护功能参数与单通道独立驱动基本一致。表2总结了并联应用中高、低边驱动器件的特性及注意事项，表3总结了诊断功能在单通道与并联通道应用中的区别。&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 表2 高、低边驱动器件特性&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://file1.elecfans.com/web3/M00/7E/5A/wKgZPGrMky2AcqYYAAAhWrouo7E294.png&quot; alt=&quot;47f9529c-b6e4-11f1-90a1-92fbcf53809c.png&quot; class=&quot;aligncenter&quot;&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 需要注意的是：&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 1) 对于采用通道切换轮询方式进行电流检测的器件（例如SGM42214xQ），在并联应用中，电流感应仅报告单通道输出流过的电流值，总的电流感应值等于每个通道的电流检测读数之和。其CS引脚应用图如图8所示。此时，微控制器可以检测到的CS引脚电压为：&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 2) 对于每个通道具备单独电流检测的器件（例如SGM42203/42203Q），在并联应用时，可将所有CS引脚短接后连接到采样电阻RSENSE进行总电流检测。其CS引脚应用图如图9所示。此时，微控制器可以检测到的CS引脚电压为：&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://file1.elecfans.com/web3/M00/7E/62/wKgZO2rMky2ATZQDAAAglS0vWVQ024.png&quot; alt=&quot;484ddfb0-b6e4-11f1-90a1-92fbcf53809c.png&quot; class=&quot;aligncenter&quot;&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 图8 以SGM42214BQ为例的CS引脚应用图&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://file1.elecfans.com/web3/M00/7E/5A/wKgZPGrMky6AU6FeAAAWbpSChyk755.png&quot; alt=&quot;48a7fa22-b6e4-11f1-90a1-92fbcf53809c.png&quot; class=&quot;aligncenter&quot;&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 图9 以SGM42203/Q为例的CS引脚应用图&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 在多通道高、低边驱动器并联驱动感性负载应用中，感性负载关断时，因电流无法突变而产生的反电动势，需要被安全钳位在器件所能承受的安全电压范围内。器件内部每个通道均集成有漏-源电压钳位&lt;u&gt;保护电路&lt;/u&gt;，但并联应用时，钳位电压并不会倍增，仍然保持与单通道相同的钳位电压。大电流、大感量负载关断时，所需耗散的退磁能量EAS并不会在各个通道之间平均分配。受器件工艺误差的影响，各通道间的钳位电压也存在一定的偏差。最坏的情况下，钳位电压偏低的通道会率先激活钳位保护并微导通，导致全部退磁能量集中流过该通道，由此产生的瞬态应力可能会损坏该通道。如果估算出并联驱动感性负载关断所需的退磁能量（EAS=1/2×L×I²）高于器件单通道所能承受的关断退磁能量，圣邦微电子推荐参考规格书中的应用说明，在设计时增加外部钳位电路来耗散多余的退磁能量。&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 表3 高、低边驱动器诊断功能差异&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://file1.elecfans.com/web3/M00/7E/62/wKgZO2rMky6AJ08SAAAVYJ9eJ7o092.png&quot; alt=&quot;49004aec-b6e4-11f1-90a1-92fbcf53809c.png&quot; class=&quot;aligncenter&quot;&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 高、低边驱动器集成的故障诊断功能通过nFAULT、STATUS、CS、&lt;u&gt;SD&lt;/u&gt;O等引脚反馈给微控制器，可诊断出的故障类型包括：开路检测、输出短路电源正极或负极、过流、过载、热关断等。由于通道并联时，将输出端短接在一起，具有&lt;u&gt;模拟&lt;/u&gt;电路检测CS引脚来报错的器件，通过逻辑输入引脚选择任意一个单通道来反馈负载电流状态和器件故障诊断信息。参考表3统计的单通道诊断和多通道并联应用下的诊断可知，并联多通道时，大多不区分通道，仅通过单通道进行故障反馈。特殊的，例如多通道驱动出现过载热重启或者热关断保护时，可通过对应通道的报错进行识别。这是由于工艺偏差导致并联各通道的电流限制、导通阻抗等参数并不完全一致。一旦其中某个通道达到电流限制阈值，或驱动功率发热达到热关断阈值而触发关断，该通道的电流会被强制分配到并联的其他通道，进而导致其他通道也会陆续出现过载热关断。&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; &lt;strong&gt;05&lt;/strong&gt;&lt;strong&gt;结语&lt;/strong&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 通过将多通道高、低边驱动器并联输出，可实现超越单通道最大能力的输出电流。本文从多通道并联应用的角度，介绍了输入和输出的电流、电压关系，阐述了并联通道应用的设计注意事项、功能参数影响及诊断故障报错的差异。在实际应用中，为保障系统的稳定、可靠和必要的安全冗余，设计时必须充分考虑通道间的参数偏差及器件规格书的各项说明。&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; &lt;strong&gt;参考文献&lt;/strong&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; [1] SG Micro Corp. SGM42214AQ_SGM42214BQ Datasheet [EB/OL]. https://www.sg-micro.com/rect/assets/d89e17e9-ee5e-4c9a-a256-78034f4336e8/SGM42214AQ_SGM42214BQ.PDF.&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; [2] SG Micro Corp. SGM42404A_SGM42404B Datasheet [EB/OL]. https://www.sg-micro.com/rect/assets/fa04f901-dd9b-48a7-894a-33e0a56eb681/SGM42404A_SGM42404B-Brief.pdf.&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; &lt;strong&gt;06&lt;/strong&gt;&lt;strong&gt;附录&lt;/strong&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 以下是圣邦微电子近期提供的驱动类产品系列，欢迎来电洽谈！&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 表4 圣邦微电子高、低边驱动产品一览&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://file1.elecfans.com/web3/M00/7E/62/wKgZO2rMky6AW864AABODmIlIz8214.png&quot; alt=&quot;495592a4-b6e4-11f1-90a1-92fbcf53809c.png&quot; class=&quot;aligncenter&quot;&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; &lt;strong&gt;关于圣邦微电子&lt;/strong&gt;&lt;/p&gt; 
&lt;p style=&quot;text-indent:2em;&quot;&gt; 圣邦微电子（北京）股份有限公司（股票代码300661）作为高性能、高品质模拟&lt;u&gt;集成电路&lt;/u&gt;供应商，产品覆盖&lt;u&gt;信号&lt;/u&gt;链、&lt;u&gt;电源管理&lt;/u&gt;、&lt;u&gt;传感器&lt;/u&gt;及存储器等领域。公司拥有38大类7,200余款可销售型号，为工业与能源、汽车、网络与计算和&lt;u&gt;消费电子&lt;/u&gt;等领域提供各类模拟及混合信号创新解决方案。&lt;/p&gt;</description><pubDate>Tue, 13 Oct 2026 06:21:43 +0800</pubDate></item><item><title>迅为3576开发板小尺寸性价比AI算力核心板</title><link>https://www.jopqhv.cn/keji/3038.html</link><description>&lt;p&gt;&lt;/p&gt;
&lt;img src=&quot;https://file1.elecfans.com/web3/M00/7E/58/wKgZO2rMfUeAHBy5AAvv4fcwQH8838.png&quot; alt=&quot;wKgZO2rMfUeAHBy5AAvv4fcwQH8838.png&quot; class=&quot;aligncenter&quot;&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt; 如果你正在找一块“小尺寸、高可靠、能跑&lt;u&gt;AI&lt;/u&gt;”的核心板，迅为iTOP-3576 LGA版本值得认真看一眼。迅为iTOP-3576开发板即日起正式推出全新LGA版本。LGA版本继承了iTOP-3576强大的内“芯”，同时以紧凑的焊盘阵列封装，重新定义了核心板的尺寸边界。搭载&lt;u&gt;瑞芯微&lt;/u&gt;RK3576&lt;u&gt;处理器&lt;/u&gt;，八核异构架构——4个Cortex-A72大核（主频2.2GHz）加4个Cortex-A53小核，内置独立NPU，算力达6TOPS，支持INT4/INT8/INT16/FP16/BF16/&lt;u&gt;TF&lt;/u&gt;32混合运算，&lt;u&gt;TensorFlow&lt;/u&gt;、PyTorch等主流框架模型可轻松部署，为边缘AI和&lt;u&gt;机器视觉&lt;/u&gt;提供算力支撑。视频能力同样不缩水：支持4K@120fps的H.265/VP9/AV1解码和4K@60fps的H.264/H.265编码，是多屏商显、智能N&lt;u&gt;VR&lt;/u&gt;、流媒体应用的理想平台。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;LGA封装的核心价值是什么？三个字：小、稳、久。&lt;/p&gt;
&lt;p&gt; 小——LGA版本采用高密度板载设计，在紧凑的板卡尺寸上完整释放RK3576的绝大部分功能&lt;u&gt;接口&lt;/u&gt;， 核心板尺寸仅45mm*42mm小巧紧凑， 引脚全引出。对于结构空间受限的产品来说，多出来的每一寸空间都弥足珍贵。&lt;/p&gt;
&lt;p&gt; 稳——焊盘阵列封装相比传统&lt;u&gt;连接器&lt;/u&gt;方案，在振动、高低温等严苛环境下具有更高的连接可靠性。LGA版本特别适合对稳定性要求极高的行业应用，如&lt;u&gt;工业控制&lt;/u&gt;、车载中控、边缘计算网关、轨道交通等。&lt;/p&gt;
&lt;p&gt; 久——LGA封装的核心板直接焊接在底板上，省去了连接器插拔带来的&lt;u&gt;机械&lt;/u&gt;磨损风险，适合生命周期长、部署后维护不便的行业设备。接口一样不少。 板载千兆&lt;u&gt;以太网&lt;/u&gt;、WiFi与&lt;u&gt;蓝牙&lt;/u&gt;二合一模块，PCIe 2.0、1路&lt;u&gt;USB&lt;/u&gt;3.0、2路USB2.0、MI&lt;u&gt;PI&lt;/u&gt;-CAMERA等接口一应俱全，满足各种扩展需求。内存2G/&lt;u&gt;4G&lt;/u&gt;/8G标配，存储兼容32G/64G eMMC，不同配置兼容同一底板。&lt;/p&gt;
&lt;img src=&quot;https://file1.elecfans.com/web3/M00/7E/58/wKgZO2rMff2AAOUyAANpcUUwoIs072.jpg&quot; alt=&quot;wKgZO2rMff2AAOUyAANpcUUwoIs072.jpg&quot; class=&quot;aligncenter&quot;&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt; 适用场景： 对体积有严苛要求的便携式AI检测设备、需要内嵌于狭小机箱的工业控制器、边缘计算网关、车载中控、多屏商显等。无论做产品原型还是批量部署，iTOP-3576 LGA版本都能成为可靠的硬件底座。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description><pubDate>Tue, 13 Oct 2026 06:21:21 +0800</pubDate></item></channel></rss>