首頁(yè) 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場(chǎng)

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計(jì)算器

綜合交流 / 評(píng)測(cè) / 活動(dòng)區(qū)

交流區(qū) | 測(cè)硬件 | 網(wǎng)站活動(dòng) | Z幣中心

新手入門 / 進(jìn)階 / 社區(qū)互助

新手 | 你問(wèn)我答 | 免費(fèi)刷機(jī)救磚 | ROM固件

查看: 50864|回復(fù): 10
上一主題 下一主題
[移動(dòng)魔百和]

從EMMC啟動(dòng)CoreElec,理論上適用所有盒子, UNT413A測(cè)試成功

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2022-11-22 19:18 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式 | 來(lái)自北京
本帖最后由 beijingliantong 于 2022-11-24 13:49 編輯

從EMMC啟動(dòng)CoreElec,理論上適用所有盒子, UNT413A測(cè)試成功
使用U盤啟動(dòng)CoreELEC有段時(shí)間了,總是感覺有點(diǎn)不完美,實(shí)在不能忍。
CoreELEC自帶的安裝工具只支持有限的設(shè)備。移動(dòng)送的安卓盒子的分區(qū)有點(diǎn)奇怪,用ceemmc -x強(qiáng)制安裝估計(jì)會(huì)搞壞盒子。
經(jīng)過(guò)一番研究后,終于到一個(gè)非常穩(wěn)妥的方法把CE寫入EMMC。
====================原理============================
原理部分比較長(zhǎng),可以直接跳到正題部分,不影響操作。

一、不要?jiǎng)蝇F(xiàn)有的分區(qū)表。
     正規(guī)的分區(qū)表是放在EMMC的開頭,后面是所有的分區(qū)。
    通過(guò)分析Amlogic的內(nèi)核和UBoot的代碼,可以發(fā)現(xiàn)它的分區(qū)表放在某個(gè)固定的位置,操作不當(dāng)就給覆蓋了,然后就變磚了。
     據(jù)說(shuō)是歷史遺留的兼容問(wèn)題,我倒覺得是偷懶不想改—— 要是我,只要不出問(wèn)題就繼續(xù)用著,業(yè)內(nèi)稱之為祖?zhèn)鞔a。

    現(xiàn)有分區(qū)里可以利用上的有
    /dev/cache  1GB左右,適合存放個(gè)人數(shù)據(jù):圖片、安裝包、視頻等
    /dev/sysem 1GB左右,適合當(dāng)CE的啟動(dòng)盤
    /dev/data    容量最大的分區(qū),8G的盒子這個(gè)分區(qū)有3GB左右。適合當(dāng)CE的存儲(chǔ)盤

二、CE的啟動(dòng)原理
   1、CE的啟動(dòng)腳本有兩個(gè) aml_autoscript和cfgload。
         通過(guò)分析Amlogic的UBoot的源代碼(不要看MainLine和linux-meson版的uboot),可以發(fā)現(xiàn)盒子進(jìn)入recovery或update模式時(shí)(安卓里的啟動(dòng)到外部設(shè)備的app,本質(zhì)上就是讓盒子進(jìn)入update模式),會(huì)先運(yùn)行下aml_autoscript腳本。
   CE里利用了這一點(diǎn)搞了點(diǎn)事情,把Uboot的環(huán)境變量魔改了。

   2、魔改變量后的盒子每次啟動(dòng)時(shí),會(huì)按 sd卡、u盤、內(nèi)置Emmc的順序,搜一遍所有分區(qū)。如果找到cfgload文件就執(zhí)行它。
        這就是為什么只有第一次需要進(jìn)入update模式,后面插上U盤就能自動(dòng)進(jìn)入CE的原因。
        
        網(wǎng)上說(shuō)CE跟armbian不能共存,原因是兩個(gè)系統(tǒng)魔改的方式不同。他們都是靠截胡盒子原有啟動(dòng)流程實(shí)現(xiàn)的。
        如果動(dòng)手能力強(qiáng),可以試著改下cfgload腳本,讓它能支持CE和Armbian雙啟動(dòng)。
        千萬(wàn)別改aml_autoscript腳本,這個(gè)是腳本執(zhí)行后會(huì)把環(huán)境變量存起來(lái),是永久的,如果沒(méi)弄好盒子就編磚了。
        cfgload每次啟動(dòng)時(shí)執(zhí)行一次,不存盤。如果改壞了??梢灾匦伦鲆粋€(gè)CE的啟動(dòng)U盤,反復(fù)嘗試。
   
3、cfgload負(fù)責(zé)加載內(nèi)核和dtb文件,并啟動(dòng)。
      linux內(nèi)核啟動(dòng)后,它自己不知道自己位于哪個(gè)分區(qū),更不知存儲(chǔ)分區(qū)在哪。
      看linux的源代碼就知道,那幫搞內(nèi)核的人快魔怔了。因?yàn)椋瑢?shí)際上內(nèi)核是知道自己在哪的,但經(jīng)過(guò)幾次代碼重構(gòu)后。這部分代碼全刪了,完全交給initramfs處理。
      實(shí)際應(yīng)用中,大家都把initramfs嵌到內(nèi)核里一起使用。
      反過(guò)來(lái)看uboot代碼,設(shè)計(jì)的簡(jiǎn)直就是沒(méi)設(shè)計(jì):一個(gè)板子對(duì)應(yīng)一套u(yù)boot代碼,簡(jiǎn)單省事。
      實(shí)際應(yīng)用中,initramfs里也不會(huì)把啟動(dòng)盤路徑硬編碼進(jìn)程序。需要cfgload給它傳參數(shù)。

=============================================================
前面是寫給愛好動(dòng)手的人,希望有所幫助。
現(xiàn)在進(jìn)入正題


==========================正題===============================

總的來(lái)說(shuō)就是把啟動(dòng)盤內(nèi)容復(fù)制進(jìn)/dev/system分區(qū)。修改cfgload腳本,把system分區(qū)和data分區(qū)的卷標(biāo)傳給linux內(nèi)核。

1、啟動(dòng)進(jìn)CE后,用ssh登錄進(jìn)控制臺(tái)。
2、格式化/dev/cache /dev/system /dev/system三個(gè)分區(qū)
     /dev/cache和 /dev/data 格式化成ext4分區(qū)
     /dev/system 格式化成fat分區(qū)(跟U盤一樣,CE啟動(dòng)U盤就是倆分區(qū),一個(gè)用于啟動(dòng),另一個(gè)用于存儲(chǔ))
     卷標(biāo)很重要,linux內(nèi)核就是靠卷標(biāo)區(qū)分分區(qū)的用途的。卷標(biāo)名字是有cfgload傳給linux內(nèi)核的。

     CoreELEC:~ # mkfs.ext4 /dev/cache
     CoreELEC:~ # mkfs.ext4 -L CE_STORAGE /dev/data
     CoreELEC:~ # mkfs.fat   -n CE_FLASH /dev/system



3、復(fù)制內(nèi)容
    mkdir /media/system
    mkdir /media/data
    mount /dev/system /media/system
    mount /dev/data /media/data
    systemctl stop kodi
    cp -r /flash/*  /media/system/
    cp -r /storage/* /media/data/


4、修改/media/system/cfgload
找到下面這行:
if test "${ce_on_emmc}" = "yes"; then setenv rootopt "BOOT_IMAGE=kernel.img boot=LABEL=CE_FLASH disk=FOLDER=/dev/CE_STORAGE"; fi

把disk=FOLDER=/dev/CE_STORAGE
修改成
disk=LABEL=/dev/CE_STORAGE

非常奇怪,為什么disk參數(shù)不用卷標(biāo),用的是路徑。 我圖省事就沒(méi)繼續(xù)研究,改成卷標(biāo)也能用。

5、關(guān)機(jī),拔掉U盤,啟動(dòng)
   順利的話,這時(shí)候就進(jìn)入EMMC上的CE了。
   U盤的啟動(dòng)優(yōu)先級(jí)比EMMC高,所以沒(méi)弄對(duì),還可以重新進(jìn)U盤版的CE。


====================完結(jié)============================











上一篇:上手新魔百和M302二手刷機(jī)版
下一篇:求助海信IP202h 78MA1移動(dòng)魔百ADB打開方法
推薦
 樓主| 發(fā)表于 2022-12-1 15:25 | 只看該作者 | 來(lái)自北京
本帖最后由 beijingliantong 于 2022-12-1 15:27 編輯

修改/media/system/cfgload這一步還一個(gè)更簡(jiǎn)單的辦法:
在/media/system/config.ini后面追加一行:
rootopt='BOOT_IMAGE=kernel.img boot=LABEL=CE_FLASH disk=LABEL=CE_STORAGE'
優(yōu)點(diǎn)就是:
cfgload是個(gè)二進(jìn)制文件編輯起來(lái)有點(diǎn)費(fèi)勁,config.ini是純文本文件,可以用記事本編輯。


評(píng)分

參與人數(shù) 1金幣 +1 收起 理由
不辣的啤特 + 1 行家啊,要跟我學(xué)做菜嗎?

查看全部評(píng)分

沙發(fā)
發(fā)表于 2022-11-28 20:19 | 只看該作者 | 來(lái)自遼寧
支持一下
板凳
發(fā)表于 2022-11-29 09:58 | 只看該作者 | 來(lái)自河南
不懂的路過(guò),也表示支持
5#
發(fā)表于 2022-12-23 23:34 來(lái)自ZNDS手機(jī)版 | 只看該作者 | 來(lái)自廣東
真正大神
6#
發(fā)表于 2023-8-4 18:40 來(lái)自ZNDS手機(jī)版 | 只看該作者 | 來(lái)自四川
樓主可不可以提供ddbr備份
7#
發(fā)表于 2023-8-23 12:46 | 只看該作者 | 來(lái)自江蘇
樓主unt413a刷了coreelec可以用無(wú)線嗎?
8#
發(fā)表于 2024-4-29 22:19 來(lái)自ZNDS手機(jī)版 | 只看該作者 | 來(lái)自重慶
好貼,我那個(gè)dev下,沒(méi)有data和system分區(qū)。有沒(méi)有辦法
9#
發(fā)表于 2024-10-11 02:54 | 只看該作者 | 來(lái)自四川
這是真正的技術(shù)大神啊,能看懂Linux內(nèi)核代碼,還分析出了解決辦法。

現(xiàn)在好像新出的盒子都不能通過(guò)coreelec內(nèi)置的ceemmc命令直接單系統(tǒng)寫入emmc了,樓主這個(gè)辦法完全繞過(guò)了官方工具,而且原理說(shuō)得很清楚,完全可以自己通過(guò)命令一步一步操作實(shí)現(xiàn)emmc的寫入。

明天我就試試看看能不能奏效,再次感謝。
10#
發(fā)表于 2024-10-11 02:58 | 只看該作者 | 來(lái)自四川
nine1999 發(fā)表于 2024-4-29 22:19
好貼,我那個(gè)dev下,沒(méi)有data和system分區(qū)。有沒(méi)有辦法

其實(shí)有沒(méi)有都無(wú)所謂,樓主介紹的是原理。你可以有什么分區(qū)就用什么分區(qū)(/dev/xxx都可以),命令里面對(duì)應(yīng)改一下分區(qū)名稱就行了,主要是卷標(biāo)label要是CE_STORAGE,CE_FLASH,因?yàn)樽詈骳fgload是傳的卷標(biāo)。甚至你自己重新分區(qū)都可以

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號(hào) )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號(hào)

GMT+8, 2024-12-28 13:53 , Processed in 0.078650 second(s), 16 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報(bào):report#znds.com (請(qǐng)將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表