一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Linux系統(tǒng)燒寫實操

CHANBAEK ? 來源:嵌入式攻城獅 ? 作者:嵌入式攻城獅 ? 2023-04-18 15:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

系統(tǒng)燒寫實操

Linux系統(tǒng)燒寫初探一文中介紹了mfgtool燒寫工具及其工作原理,下面以 I.MX6U-ALPHA EMMC開發(fā)板為平臺,分別介紹如何燒寫 NXP官方系統(tǒng),以及燒寫自制系統(tǒng)

1. 燒寫NXP官方系統(tǒng)

燒寫 NXP官方的系統(tǒng)到 I.MX6U-ALPHA EMMC開發(fā)板(512MB DDR3 + 8G EMMC)中,具體步驟如下:

  • 連接好USB,撥碼開關撥到USB下載模式
  • 彈出TF卡,然后按下開發(fā)板復位按鍵
  • 打開MobaXterm串口助手終端
  • 雙擊mfgtool2-yocto-mx-evk-emmc.vbs
  • 點擊Start按鈕燒寫 NXP 官方系統(tǒng)

燒寫過程如下示

圖片

MobaXterm串口助手終端上顯示的燒寫過程

圖片

燒寫完成后點擊Stop按鈕停止燒寫,點擊Exit鍵退出

圖片

拔出USB線,將撥碼開關撥到EMMC啟動模式,重啟后就會從EMMC啟動

圖片

此時啟動后的系統(tǒng)是 NXP給 I.MX6ULL EVK開發(fā)板制作的,需要輸入用戶名,用戶名為“root”,沒有密碼

2. 燒寫自制系統(tǒng)

燒寫自制系統(tǒng)到 I.MX6U-ALPHA EMMC開發(fā)板(512MB DDR3 + 8G EMMC)中。 準備好自制的 uboot、kernel、. dtb 和 rootfs(壓縮包)這四個燒寫文件,對其進行重命名

##根文件系統(tǒng) rootfs 打包
cd rootfs/ 
tar -vcjf rootfs.tar.bz2 *

圖片

將改名后的uboot、kernel、. dtb 這三個文件拷貝到firmware目錄中,替換掉原來的文件

將改名后的所有四個文件拷貝到files目錄中

雙擊mfgtool2-yocto-mx-evk-emmc.vbs文件,打開燒寫軟件,點擊Start按鈕即可燒寫

圖片

燒寫完成后從EMMC啟動系統(tǒng),如下圖示可見自制系統(tǒng)已經(jīng)燒寫成功

圖片

3. 改造燒寫工具

3.1 改造Mfgtool

上面是將 NXP官方的系統(tǒng)更換成自制的系統(tǒng)來完成燒寫,下面將介紹如何改造 MfgTool工具,讓其支持自己的開發(fā)板。 改造MfgTool,主要從以下三方面著手

確定系統(tǒng)文件名字:確定系統(tǒng)文件名字是為了兼容不同的產(chǎn)品

圖片

新建.vbs文件:復制 mfgtool2-yocto-mx-evk-emmc.vbs 文件,重新按需要命令,比如命名成 mfgtool2-andyxi-emmc.vbs

修改OS Firmware文件夾里的 ucl2.xml文件:改為如下所示內(nèi)容



    "BootStrap" dev="MX6UL" vid="15A2" pid="007D"/>
    "BootStrap" dev="MX6ULL" vid="15A2" pid="0080"/>
    "Updater" dev="MSC" vid="066F" pid="37FF"/>
class="hljs-name"CFG>
	
  
  <LIST name="eMMC" desc="Choose eMMC as media">
    "BootStrap" type="boot" body="BootStrap" file
    ="firmware/u-boot-andyxi-emmc.imx" ifdev="MX6ULL">Loading Ubootclass="hljs-name"CMD>
    "BootStrap" type="load" file="firmware/zImage-andyxi-emmc" address="0x80800000"
    loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" 
    ifdev="MX6SL MX6SX MX7D MX6UL MX6ULL">Loading Kernel.class="hljs-name"CMD>
    "BootStrap" type="load" file="firmware/%initramfs%" address="0x83800000"
    loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE"
    ifdev="MX6SL MX6SX MX7D MX6UL MX6ULL">Loading Initramfs.class="hljs-name"CMD>
    "BootStrap" type="load" file="firmware/imx6ull-andyxi-emmc.dtb" address="0x83000000"
    loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE"
    ifdev="MX6ULL">Loading device tree.class="hljs-name"CMD>
    "BootStrap" type="jump" > Jumping to OS image. class="hljs-name"CMD>

    
    "Updater" type="push" body="send" file="mksdcard.sh.tar">Sending partition shellclass="hljs-name"CMD>
    "Updater" type="push" body="$ tar xf $FILE ">Partitioning...class="hljs-name"CMD>
    "Updater" type="push" body="$ sh mksdcard.sh /dev/mmcblk%mmc%"> Partitioning...class="hljs-name"CMD>

    
    "Updater" type="push" body="$ dd if=/dev/zero
    of=/dev/mmcblk%mmc% bs=1k seek=768 conv=fsync count=8">clear u-boot arg

    
    "Updater" type="push" body="$ echo 0 > /sys/block/mmcblk%mmc%boot0/force_ro">
    access boot partition 1class="hljs-name"CMD>
    "Updater" type="push" body="send" file="files/u-boot-andyxi-emmc.imx" ifdev="MX6ULL">
    Sending u-boot.binclass="hljs-name"CMD>
    "Updater" type="push" body="$ dd if=$FILE of=/dev/mmcblk%mmc%boot0 bs=512 seek=2">
    write U-Boot to sd cardclass="hljs-name"CMD>
    "Updater" type="push" body="$ echo 1 > /sys/block/mmcblk%mmc%boot0/force_ro">
    re-enable read-only accessclass="hljs-name"CMD>
    "Updater" type="push" body="$ mmc bootpart enable 1 1 /dev/mmcblk%mmc%">
    enable boot partion 1 to bootclass="hljs-name"CMD>

    
    "Updater" type="push" body="$ while [ ! -e
    /dev/mmcblk%mmc%p1 ]; do sleep 1; echo \\"waiting...\"; done ">Waiting for the partition ready
    "Updater" type="push" body="$ mkfs.vfat /dev/mmcblk%mmc%p1">
    Formatting rootfs partitionclass="hljs-name"CMD>
    "Updater" type="push" body="$ mkdir -p /mnt/mmcblk%mmc%p1"/>
    "Updater" type="push" body="$ mount -t vfat /dev/mmcblk%mmc%p1 /mnt/mmcblk%mmc%p1"/>

    
    "Updater" type="push" body="send" file="files/zImage-andyxi-emmc">
    Sending kernel zImageclass="hljs-name"CMD>
    "Updater" type="push" body="$ cp $FILE /mnt/mmcblk%mmc%p1/zImage">
    write kernel image to sd cardclass="hljs-name"CMD>

    
    "Updater" type="push" body="send" file="files/imx6ull-andyxi-emmc.dtb" ifdev="MX6ULL">
    Sending Device Tree fileclass="hljs-name"CMD>
    "Updater" type="push" body="$ cp $FILE /mnt/mmcblk%mmc%p1/imx6ull-andyxi-emmc.dtb" ifdev="MX6ULL">
    write device tree to sd cardclass="hljs-name"CMD>
    "Updater" type="push" body="$ umount /mnt/mmcblk%mmc%p1">
    Unmounting vfat partitionclass="hljs-name"CMD>

    
    "Updater" type="push" body="$ mkfs.ext3 -F -E nodiscard /dev/mmcblk%mmc%p2">
    Formatting rootfs partitionclass="hljs-name"CMD>
    "Updater" type="push" body="$ mkdir -p /mnt/mmcblk%mmc%p2"/>
    "Updater" type="push" body="$ mount -t ext3 /dev/mmcblk%mmc%p2 /mnt/mmcblk%mmc%p2"/>
    "Updater" type="push" body="pipe tar -jxv -C /mnt/mmcblk%mmc%p2" 
    file="files/rootfs-andyxi-emmc.tar.bz2" ifdev="MX6UL MX7D MX6ULL">Sending and writting rootfsclass="hljs-name"CMD>
    "Updater" type="push" body="frf">Finishing rootfs writeclass="hljs-name"CMD>
    "Updater" type="push" body="$ umount /mnt/mmcblk%mmc%p2">Unmounting rootfs partitionclass="hljs-name"CMD>
    "Updater" type="push" body="$ echo Update Complete!">Doneclass="hljs-name"CMD>
class="hljs-name"LIST>
class="hljs-name"UCL>

3.2 燒寫測試

MfgTool 工具修改好后就可以進行燒寫測試了,將自制的 uboot、linux kernel、和 .dtb 這三個文件拷貝到firmware目錄中,替換掉原來的文件; 將所有四個文件拷貝到files目錄中

雙擊 mfgtool2-andyxi-emmc.vbs文件,打開燒寫軟件,點擊“Start”按鈕即可燒寫。 燒寫完成,設置撥碼開關為 EMMC 啟動,重啟開發(fā)板,系統(tǒng)啟動信息如下圖示:

圖片

開發(fā)板最終卡在 “Starting kernel …”,內(nèi)核啟動失敗。 下面介紹如何解決內(nèi)核啟動失敗的問題

3.3 解決內(nèi)核啟動失敗

仔細觀察 uboot 輸出的 log 信息,會發(fā)現(xiàn)如下圖所示的兩行信息:

圖片

可見在讀取設備樹文件時就出錯了。 重啟 uboot,進入到命令行模式,輸入如下命令查看 EMMC 的分區(qū) 1 里面有沒有設備樹文件

mmc dev 1 	//切換到EMMC
ls mmc 1:1 	//輸出EMMC1分區(qū)1中的所有文件

圖片

可見此時 EMMC的分區(qū)1中是存在設備樹文件的,只是名字不同,因此讀取 imx6ull-14x14-evk.dtb肯定會出錯。 出現(xiàn)這個錯誤的原因是 uboot里默認的設備樹名字是imx6ull-14x14-evk.dtb,解決方法有以下兩種:

重新設置 bootcmd環(huán)境變量值:在 uboot的命令行模式下,重設 bootcmd 和 bootargs 這兩個環(huán)境變量的值

setenv bootcmd 'mmc dev 1;fatload mmc 1:1 80800000 zImage;fatload mmc 1:1 83000000
			    imx6ull-andyxi-emmc.dtb;bootz 80800000 - 83000000'
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
saveenv

修改 uboot源碼:上面方法每次重新燒寫都要再設置,以下方法只需設置一次,uboot源碼 include/configs/mx6ull_andyxi_emmc.h文件里,在宏 CONFIG_EXTRA_ENV_SETTINGS中找到如下所示內(nèi)容:

"findfdt="\\
"if test $fdt_file = undefined; then " \\
    "if test $board_name = EVK && test $board_rev = 9X9; then " \\
	"setenv fdt_file imx6ull-9x9-evk.dtb; fi; " \\
    "if test $board_name = EVK && test $board_rev = 14X14; then " \\
	"setenv fdt_file imx6ull-14x14-evk.dtb; fi; " \\
    "if test $fdt_file = undefined; then " \\
	"echo WARNING: Could not determine dtb to use; fi; " \\
"fi;\\0" \\

findfdt 是用于確定設備樹文件名字的環(huán)境變量, fdt_file環(huán)境變量保存著設備樹文件名。 上面代碼中的兩個設備樹都是 NXP官方開發(fā)板使用的。 因此將 findfdt 值改為如下內(nèi)容:

"findfdt="\\
"if test $fdt_file = undefined; then " \\
    "setenv fdt_file imx6ull-andyxi-emmc.dtb; " \\
"fi;\\0" \\

修改后重新編譯 uboot,然后將新的 uboot燒寫到開發(fā)板后重啟測試,內(nèi)核啟動正常。 至此自制系統(tǒng)燒寫完成,并測試成功,開發(fā)板可以在沒有網(wǎng)絡的情況下正常啟動

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • usb
    usb
    +關注

    關注

    60

    文章

    8175

    瀏覽量

    272637
  • Linux
    +關注

    關注

    87

    文章

    11508

    瀏覽量

    213658
  • Linux系統(tǒng)

    關注

    4

    文章

    605

    瀏覽量

    28562
  • 開發(fā)板
    +關注

    關注

    25

    文章

    5661

    瀏覽量

    104473
  • 燒寫
    +關注

    關注

    0

    文章

    58

    瀏覽量

    14615
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Linux系統(tǒng)移植開發(fā)篇2:linux鏡像

    本文章為《STM32MP157 Linux系統(tǒng)移植開發(fā)篇》系列中的一篇,筆者使用的開發(fā)平臺為華清遠見FS-MP1A開發(fā)板(STM32MP157開發(fā)板)。stm32mp157是ARM雙核,2個A7核
    發(fā)表于 09-29 16:00 ?3486次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b>移植開發(fā)篇2:<b class='flag-5'>燒</b>寫<b class='flag-5'>linux</b>鏡像

    i.MX6ULL嵌入式Linux開發(fā)6-系統(tǒng)寫到eMMC

    本篇主要介紹了Linux移植的系統(tǒng)打包燒錄的EMMC的方法,使用MfgTool工具,將**uboot、linux kernel、.dtb和rootfs這4個文件**寫到板子的EMMC
    的頭像 發(fā)表于 03-17 09:17 ?5661次閱讀
    i.MX6ULL嵌入式<b class='flag-5'>Linux</b>開發(fā)6-<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>燒</b>寫到eMMC

    ok2440linux系統(tǒng)

    用u***linux系統(tǒng)的時候,linux操作系統(tǒng)zImage成功,但是
    發(fā)表于 04-27 18:34

    【OK210試用體驗】之(二)——Linux系統(tǒng)寫和Android HDMI顯示

    ` 本帖最后由 郎中令2000年 于 2015-7-21 01:47 編輯 在開箱貼之后,今天帖子的主要內(nèi)容是對OK210測試板進行Linux系統(tǒng)和Android系統(tǒng)寫,并在
    發(fā)表于 07-09 14:46

    【OK210試用體驗】SDLinux系統(tǒng)

    的。WinPM.EXE在我win7 64位上打開失敗,后來在虛擬機中用xp系統(tǒng)寫成功。搞開發(fā)還是得用xp啊!寫過程中可以使用串口查看寫過程的。
    發(fā)表于 07-26 08:36

    TQ210 Linux系統(tǒng)

    :  使用以下命令把linux文件系統(tǒng)鏡像下載到開發(fā)板的內(nèi)存中,然后程序會把linux文件系統(tǒng)鏡像寫到NAND FLASH中。   ./d
    發(fā)表于 10-30 16:53

    TQ210 Linux系統(tǒng)

    下命令把linux文件系統(tǒng)鏡像下載到開發(fā)板的內(nèi)存中,然后程序會把linux文件系統(tǒng)鏡像寫到NAND FLASH中?! ?/dnw root
    發(fā)表于 11-09 10:48

    3399 開發(fā)板Linux 系統(tǒng)

    `` Linux 鏡像寫 平臺:iTOP-3399開發(fā)板系統(tǒng)Linux 系統(tǒng) 1 RKTool 驅(qū)動安裝 解 壓 光 盤 02 工 具
    發(fā)表于 02-14 15:22

    Linux系統(tǒng)寫DNW報錯這是什么問題

    按照Linux 3.0.1用戶手冊“一鍵Linux系統(tǒng)”相關內(nèi)容,在最后一步寫時DNW報錯:** Unable to read "u-
    發(fā)表于 01-13 06:41

    如何linux鏡像

    使用tftp下載方式進行鏡像的驗證,以及使用scp方式來更新linux內(nèi)核與設備樹。STM32CubeProgrammer寫方式STM32CubeProgrammer工具已經(jīng)在前面的章節(jié)進行了安裝,現(xiàn)在我們可以通過使用這個工具來燒錄
    發(fā)表于 02-16 06:18

    STM32MP157 Linux系統(tǒng)移植開發(fā)篇2:linux鏡像

    使用tftp下載方式進行鏡像的驗證,以及使用scp方式來更新linux內(nèi)核與設備樹。 STM32CubeProgrammer寫方式 STM32CubeProgrammer工具已經(jīng)在前面的章節(jié)進行了安裝,現(xiàn)在我們可以通過使用這個工具來燒錄
    發(fā)表于 12-17 18:22 ?11次下載
    STM32MP157 <b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b>移植開發(fā)篇2:<b class='flag-5'>燒</b>寫<b class='flag-5'>linux</b>鏡像

    STM32MP157系列教程連載-Linux系統(tǒng)移植篇2:STM32MP1微處理器之系統(tǒng)鏡像

    STM32MP157系列教程連載-Linux系統(tǒng)移植篇2:STM32MP1微處理器之系統(tǒng)鏡像寫第 1 章 系統(tǒng)鏡像
    發(fā)表于 12-17 18:22 ?14次下載
    STM32MP157系列教程連載-<b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b>移植篇2:STM32MP1微處理器之<b class='flag-5'>系統(tǒng)</b>鏡像<b class='flag-5'>燒</b>寫

    Linux系統(tǒng)寫初探

    嵌入式 Linux開發(fā)中通常是用網(wǎng)絡來進行測試,但最終的產(chǎn)品中可能不會通過網(wǎng)絡來運行。因此需要將 uboot、linux kernel、.dtb(設備樹) 和 rootfs這四個文件寫到開發(fā)板
    的頭像 發(fā)表于 04-18 15:24 ?1321次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b><b class='flag-5'>燒</b>寫初探

    數(shù)位板的手寫實現(xiàn)原理

    數(shù)位板的手寫實現(xiàn)原理
    的頭像 發(fā)表于 05-26 11:48 ?2131次閱讀

    Linux固件寫中的陷阱:文件系統(tǒng)異步寫入引發(fā)的問題

    在工業(yè)生產(chǎn)中,固件寫是確保產(chǎn)品正常運行的關鍵環(huán)節(jié)。本文通過一個實際案例,揭示了Linux系統(tǒng)下因文件寫入異步性導致的固件寫不完全問題??蛻舭咐蛻舢a(chǎn)線上批量生產(chǎn)時,用SD卡進行固件
    的頭像 發(fā)表于 03-07 11:34 ?361次閱讀
    <b class='flag-5'>Linux</b>固件<b class='flag-5'>燒</b>寫中的陷阱:文件<b class='flag-5'>系統(tǒng)</b>異步寫入引發(fā)的問題