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

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

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

軟件下載 | 游戲 | 討論 | 電視計算器

綜合交流 / 評測 / 活動區(qū)

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

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

新手 | 你問我答 | 免費刷機救磚 | ROM固件

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

從EMMC啟動CoreElec,理論上適用所有盒子, UNT413A測試成功

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

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

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

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

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

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

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


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

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

1、啟動進CE后,用ssh登錄進控制臺。
2、格式化/dev/cache /dev/system /dev/system三個分區(qū)
     /dev/cache和 /dev/data 格式化成ext4分區(qū)
     /dev/system 格式化成fat分區(qū)(跟U盤一樣,CE啟動U盤就是倆分區(qū),一個用于啟動,另一個用于存儲)
     卷標(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),用的是路徑。 我圖省事就沒繼續(xù)研究,改成卷標(biāo)也能用。

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


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











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

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


評分

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

查看全部評分

回復(fù) 支持 1 反對 0

使用道具 舉報

沙發(fā)
發(fā)表于 2022-11-28 20:19 | 只看該作者 | 來自遼寧
支持一下
回復(fù) 支持 反對

使用道具 舉報

板凳
發(fā)表于 2022-11-29 09:58 | 只看該作者 | 來自河南
不懂的路過,也表示支持
回復(fù) 支持 反對

使用道具 舉報

5#
發(fā)表于 2022-12-23 23:34 來自ZNDS手機版 | 只看該作者 | 來自廣東
真正大神
回復(fù) 支持 反對

使用道具 舉報

6#
發(fā)表于 2023-8-4 18:40 來自ZNDS手機版 | 只看該作者 | 來自四川
樓主可不可以提供ddbr備份
回復(fù) 支持 反對

使用道具 舉報

7#
發(fā)表于 2023-8-23 12:46 | 只看該作者 | 來自江蘇
樓主unt413a刷了coreelec可以用無線嗎?
回復(fù) 支持 反對

使用道具 舉報

8#
發(fā)表于 2024-4-29 22:19 來自ZNDS手機版 | 只看該作者 | 來自重慶
好貼,我那個dev下,沒有data和system分區(qū)。有沒有辦法
回復(fù) 支持 反對

使用道具 舉報

9#
發(fā)表于 2024-10-11 02:54 | 只看該作者 | 來自四川
這是真正的技術(shù)大神啊,能看懂Linux內(nèi)核代碼,還分析出了解決辦法。

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

明天我就試試看看能不能奏效,再次感謝。
回復(fù) 支持 反對

使用道具 舉報

10#
發(fā)表于 2024-10-11 02:58 | 只看該作者 | 來自四川
nine1999 發(fā)表于 2024-4-29 22:19
好貼,我那個dev下,沒有data和system分區(qū)。有沒有辦法

其實有沒有都無所謂,樓主介紹的是原理。你可以有什么分區(qū)就用什么分區(qū)(/dev/xxx都可以),命令里面對應(yīng)改一下分區(qū)名稱就行了,主要是卷標(biāo)label要是CE_STORAGE,CE_FLASH,因為最后cfgload是傳的卷標(biāo)。甚至你自己重新分區(qū)都可以
回復(fù) 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

GMT+8, 2024-11-20 03:35 , Processed in 0.064825 second(s), 18 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報:report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

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