在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

ARM以及啟動和燒寫等方面

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2022-02-18 13:52 ? 次閱讀

本文所述的ARM的指的是Cortex A系列以及ARM9,ARM11,跑Linux操作系統。對于CortexM系列并不一定完全適用;

談到ARM以及啟動和燒寫等方面,首先我們要明確一下幾個關鍵詞:Uboot,Cmdline,啟動方式選擇,文件系統格式,存儲介質,如NAND,EMMC,SD卡等

下面一個一個做相關介紹:

啟動方式:

① 一般CPU都可以配置為從多種介質啟動,比如SPI Nor Flash,NAND,EMMC,SD卡,U盤等

② 大致原理是CPU內部ROM有一段固化的啟動代碼,根據CPU配置引腳,判斷啟動位置,然后從外部介質讀取數據啟動

③ 一般啟動介質的前一部分代碼的作用必須是:初始化硬件參數,自身拷貝

④ 關于自拷貝:因為CPU內部RAM很小,因此只能讀取一部分啟動介質的數據即Uboot到內部RAM運行,所以Uboot前一部分的工作需要將自身剩余部分拷貝到外部RAM中,然后加載運行

Uboot:

① 主要作用:引導Linux系統(主要是從存儲介質的哪個地方讀取Kernel,傳遞什么樣的啟動參數)

② 其他功能:支持很多命令,主要是存儲控制和網絡命令,最終目的還是引導和升級系統用

③ 常用操作:TFTP,NAS,Flash操作,UBI操作,Setenv,boot等

④ 一般升級系統流程:使用tftp方式從主機下載kernel及文件系統等文件,然后使用flash等命令燒寫到存儲介質如NAND,最后設定啟動參數,然后引導系統啟動;

⑤ 一般調試流程,介紹2種:

- 使用NAS從主機直接加載文件系統,直接在線調試,快捷方便

- 設定從SD卡啟動,從SD卡加載kernel和文件系統調試

CMDLINE:

① 一般由Uboot傳遞給Kernel,或者Kernel中配置寫死不過一般很少見

② 主要2個參數:

第一,指定console設備,用于打印輸出及做控制臺用

第二,指定rootfs掛載分區和類型

③ 看2個例子:

從NAND啟動,/proc/cmdline,加載的是UBI文件系統,位置在mtd3

console=ttymxc0,115200 ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs mtdparts=gpmi-nand:5m(boot),10m(kernel),1m(dtb),-(rootfs)

從SD卡啟動,/proc/cmdline,加載的是ext4文件系統,位置在sd卡第二分區mmcblk0p2

console=ttymxc0,115200 root=/dev/mmcblk0p2 rootwait rw rootdelay=5 mem=256M fstype=ext4 mtdparts=gpmi-nand:5m(boot),10m(kernel),1m(dtb),-(rootfs)

存儲介質:

主要介紹Raw Flash 及 FTL devices區別

Flash特點:寫入前需要先擦除,有壽命且不長,而且容易產生壞塊

RAW Flash:即裸芯片,沒有控制器,針對其主要操作有擦除,讀和寫

Device: 在裸芯片上加了控制器,比如SD卡,U盤等;加了控制器后,只需要讀和寫就行了,不需要擦除。控制器做了一系列的工作:擦除,磨損平衡,磨損算法等等,一個控制器算法的好壞直接決定了設備的使用壽命。

文件系統:

① FAT:windows常用文件系統,一般U盤,sd卡即為fat格式

② ext2/3/4,Linux常用文件系統,一般用于FTL Device,即只有讀和寫

③ JFFS2,Linux常用,一般用于容量較小的Flash,且是Raw Flash,MTD設備

④ UBIFS,Linux常用文件系統,只能用于Raw Flash,因為kernel ubi子系統,有相關的磨損平衡算法,可以保證效率

⑤ SD卡啟動,文件系統掛載情況:

# mount

/dev/root on / type ext4 (rw,noatime,data=ordered)

proc on /proc type proc (rw,nosuid,nodev,noexec,noatime)

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime)

tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime)

tmpfs on /dev type tmpfs (rw,nosuid,relatime,size=512k,mode=755)

devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,mode=600)

debugfs on /sys/kernel/debug type debugfs (rw,noatime)

#

# cat /proc/mtd

dev: size erasesize name

mtd0: 00500000 00020000 “boot”

mtd1: 00a00000 00020000 “kernel”

mtd2: 00100000 00020000 “dtb”

mtd3: 0f000000 00020000 “rootfs”

⑥ NAND啟動,文件系統掛載情況:

# mount

ubi0:rootfs on / type ubifs (rw,relatime)

devtmpfs on /dev type devtmpfs (rw,relatime,size=89164k,nr_inodes=22291,mode=755)

proc on /proc type proc (rw,relatime)

devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw,relatime,mode=777)

tmpfs on /tmp type tmpfs (rw,relatime)

tmpfs on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)

sysfs on /sys type sysfs (rw,relatime)

#

# cat /proc/mtd

dev: size erasesize name

mtd0: 00500000 00020000 “boot”

mtd1: 00a00000 00020000 “kernel”

mtd2: 00100000 00020000 “dtb”

mtd3: 0f000000 00020000 “rootfs”

燒寫過程:

① 一般從SD卡等外部方式啟動,在Uboot中,使用flash命令及UBI命令分別燒寫uboot,dtb,kernel,rootfs到對應的分區即可

② 第二使用芯片廠家的燒寫工具,如nxp的 mfgtoos,在pc上通過usb燒寫文件

③ 如已有uboot,在uboot中從sd卡,U盤等讀取文件燒寫;或tftp從pc下載文件燒寫

升級過程:

① 此升級指的是Uboot OK的前提下做Uboot,kernel,rootfs等升級

② 通過SD卡升級,一般是首先在PC上制作SD卡啟動分區,通過官方的工具燒寫升級文件到SD卡即可;此處的升級文件分兩個方面:

最小升級內核,并且包含升級腳本,此腳本會將目標文件燒寫到存儲介質中

目標升級文件,即要燒寫到比如NAND中的文件

③ 以NXP SD卡升級為例說明此過程:

首先是Uboot啟動過程:

U-Boot 2016.03-mys-imx6ulx+gca7b81f (Apr 27 2017 - 07:55:51 +0800)

CPU: Freescale i.MX6ULL rev1.0 528 MHz (running at 396 MHz)

CPU: Commercial temperature grade (0C to 95C) at 39C

Reset cause: POR

Board: MX6ULL 14x14 EVK

I2C: ready

DRAM: 512 MiB

MMC: FSL_SDHC: 0, FSL_SDHC: 1

*** Warning - bad CRC, using default environment

Display: TFT43AB (480x272)

Video: 480x272x24

In: serial

Out: serial

Err: serial

switch to partitions #0, OK

mmc0 is current device

Net: Board Net Initialization Failed

No ethernet found.

Normal Boot

Hit any key to stop autoboot: 0

switch to partitions #0, OK

mmc0 is current device

switch to partitions #0, OK

mmc0 is current device

reading boot.scr

423 bytes read in 10 ms (41 KiB/s)

Running bootscript from mmc 。..

## Executing script at 80800000

reading zImage

6789824 bytes read in 302 ms (21.4 MiB/s)

reading mys-imx6ull-14x14-evk-gpmi-weim.dtb

36951 bytes read in 20 ms (1.8 MiB/s)

Kernel image @ 0x83000000 [ 0x000000 - 0x679ac0 ]

## Flattened Device Tree blob at 84000000

Booting using the fdt blob at 0x84000000

Using Device Tree in place at 84000000, end 8400c056

Starting kernel 。.

最小系統加載啟動完畢后,運行升級腳本

VFS: Mounted root (ext4 filesystem) on device 179:2.

devtmpfs: mounted

Freeing unused kernel memory: 432K (80b54000 - 80bc0000)

INIT: version 2.88 booting

Starting udev

udevd[114]: starting version 3.1.5

random: udevd urandom read with 32 bits of entropy available

EXT4-fs (mmcblk0p2): re-mounted. Opts: data=ordered

bootlogd: cannot allocate pseudo tty: No such file or directory

FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

ALSA: Restoring mixer settings.。.

/usr/sbin/alsactl: load_state:1735: No soundcards found.。.

INIT: Entering runlevel: 5

Starting system message bus: dbus.

System update start 。..

prepare files are okay

升級腳本分析:

root@mys6ull14x14:/run/media/mmcblk0p2# cat usr/bin/flash_nand.sh

#!/bin/sh

part_uboot=0

part_kernel=1

part_dtb=2

part_rootfs=3

echo heartbeat 》 /sys/class/leds/user/trigger

mfg_path=/run/media/mmcblk0p1/mfg-images

//升級目標文件

uboot=${mfg_path}/u-boot.imx

kernel=${mfg_path}/zImage

dtb=${mfg_path}/gpmi-weim.dtb

rootfs=${mfg_path}/core-image-base.rootfs.tar.xz

if [ -d $mfg_path ] && [ -s $uboot ] && [ -s $kernel ] && [ -s $dtb ] && [ -s $rootfs ]

then

echo “prepare files are okay”

else

echo 0 》 /sys/class/leds/user/brightness

echo “file or directory not exist”

fi

直接使用Flash命令燒寫Uboot到對應分區

echo “Flashing uboot”

flash_erase /dev/mtd${part_uboot} 0 0 && kobs-ng init -x -v ${uboot}

if [ $? -eq 0 ]

then

echo “Flash uboot okay”

else

echo “Flash uboot failed”

echo 0 》 /sys/class/leds/user/brightness

exit

fi

直接使用Flash命令燒寫kernel到對應分區

echo “Flashing kernel”

flash_erase /dev/mtd${part_kernel} 0 0 && nandwrite -p /dev/mtd${part_kernel} -p ${kernel}

if [ $? -eq 0 ]

then

echo “Flash kernel okay”

else

echo “Flash kernel failed”

echo 0 》 /sys/class/leds/user/brightness

exit

fi

直接使用Flash命令燒寫dtb到對應分區

echo “Flashing dtb”

flash_erase /dev/mtd${part_dtb} 0 0 && nandwrite -p /dev/mtd${part_dtb} -p ${dtb}

if [ $? -eq 0 ]

then

echo “Flash dtb file okay”

else

echo “Flash dtb file failed”

echo 0 》 /sys/class/leds/user/brightness

exit

fi

燒寫rootfs比較特別,此處是使用ubifs,因此需要先使用ubi命令在NAND上建立好文件系統格式

echo “Flashing rootfs”

flash_erase /dev/mtd${part_rootfs} 0 0

if [ $? -ne 0 ]

then

echo “erase /dev/mtd${part_rootfs} fail”

echo 0 》 /sys/class/leds/user/brightness

exit

fi

ubiformat /dev/mtd${part_rootfs}

if [ $? -ne 0 ]

then

echo “format /dev/mtd${part_rootfs} fail”

echo 0 》 /sys/class/leds/user/brightness

exit

fi

ubiattach /dev/ubi_ctrl -m ${part_rootfs}

if [ $? -ne 0 ]

then

echo “attach /dev/mtd${part_rootfs} fail”

echo 0 》 /sys/class/leds/user/brightness

exit

fi

ubimkvol /dev/ubi0 -Nrootfs -m

if [ $? -ne 0 ]

then

echo “make volume /dev/mtd${part_rootfs} fail”

echo 0 》 /sys/class/leds/user/brightness

exit

fi

mkdir -p /run/media/mtd${part_rootfs} /

&& mount -t ubifs ubi0:rootfs /run/media/mtd${part_rootfs}

if [ $? -ne 0 ]

then

echo “mount /dev/mtd${part_rootfs} fail”

echo 0 》 /sys/class/leds/user/brightness

exit

fi

建立好ubi格式之后,直接將rootfs壓縮包解壓到對應分區即可;

tar xvf ${rootfs} -C /run/media/mtd${part_rootfs}

if [ $? -eq 0 ]

then

echo “Flash filesystem okay”

sync && sync && sync

echo none 》 /sys/class/leds/user/trigger

echo 1 》 /sys/class/leds/user/brightness

else

echo “Flash filesystem failed”

echo 0 》 /sys/class/leds/user/brightness

umount /run/media/mtd${part_rootfs}

exit

fi

umount /run/media/mtd${part_rootfs}

echo “Programming success”

echo “You need reboot the board”

版權聲明:本文為博主 WindLOR 原創文章,

遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

原文鏈接:https://blog.csdn.net/wind0419/article/details/77973144

審核編輯:何安

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

    關注

    134

    文章

    9309

    瀏覽量

    375059
  • 燒寫
    +關注

    關注

    0

    文章

    57

    瀏覽量

    14548
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    FPGA遠程bit文件和調試ILA指南

    在 FPGA 開發過程中,bit文件和使用ILA進行調試是再常見不過的操作。但如果 FPGA 板卡被放在機房,或者通過PCIe插在服務器上,那么每次調試時我們都不得不帶著筆記本電腦跑去機房或服務器旁,接上 JTAG 線后才能進行調試,非常不便。
    的頭像 發表于 06-05 16:41 ?284次閱讀
    FPGA遠程<b class='flag-5'>燒</b><b class='flag-5'>寫</b>bit文件和調試ILA指南

    AGM FPGA/MCU文件類型有哪些及用途

    AGM FPGA/MCU文件類型有哪些及用途 AGM有FPGA和MCU器件,那FPGA/MCU文件類型有哪些及用途,讓我們一起梳理一下。 一、AG256 / 576系列: .p
    發表于 03-14 09:54

    迅為RK3588開發板技術分享 TF卡大于4G容量鏡像

    RK3588技術分享 | TF卡大于4G容量鏡像
    的頭像 發表于 03-10 14:39 ?471次閱讀
    迅為RK3588開發板技術分享 TF卡<b class='flag-5'>燒</b><b class='flag-5'>寫</b>大于4G容量鏡像

    Linux固件中的陷阱:文件系統異步寫入引發的問題

    成后蜂鳴器提示,產線工人聽到蜂鳴器鳴叫后就直接斷電重啟,進入測試環節,結果在測試中發現有部分產品啟動就出現異常。客戶用解壓方式系統固件,解壓命令執行完后,再運行
    的頭像 發表于 03-07 11:34 ?301次閱讀
    Linux固件<b class='flag-5'>燒</b><b class='flag-5'>寫</b>中的陷阱:文件系統異步寫入引發的問題

    【北京迅為】itop-3568 開發板openharmony鴻蒙及測試-第1章 體驗OpenHarmony—鏡像

    【北京迅為】itop-3568 開發板openharmony鴻蒙及測試-第1章 體驗OpenHarmony—鏡像
    的頭像 發表于 03-04 16:31 ?450次閱讀
    【北京迅為】itop-3568 開發板openharmony鴻蒙<b class='flag-5'>燒</b><b class='flag-5'>寫</b>及測試-第1章 體驗OpenHarmony—<b class='flag-5'>燒</b><b class='flag-5'>寫</b>鏡像

    請問DLPC4422 flash首次需要離線完成嗎?

    做了一塊dlpc4422單板,flash第一次需要使用片機進行嗎,文件是.img文件嗎 還是直接貼裝上,第一次就可以在線
    發表于 02-26 07:07

    DLPC的boot flash在上機貼片之前需要預先程序嗎?

    您好,請問下,DLPC的boot flash在上機貼片之前需要預先程序嗎?是否可以先貼片后經過USB img啟動
    發表于 02-21 16:56

    迅為RK3588開發板實時系統編譯-Preemption系統/ Xenomai系統編譯-實時系統-固件

    按鍵啟動開發板,此時工具會提示發現新設備,就可以松開 VOL +按鍵了。VOL +按鍵如下圖所示: 注意: 如果您的工具沒有發現設備
    發表于 02-18 11:32

    飛凌嵌入式ElfBoard ELF 1板卡-mfgtools燒錄流程之方法

    Mfgtools工具是NXP官方提供的用于其系列產品系統的軟件,可以從官方網站下載,我們的ELF 1開發資料包中也放了這個工具,路徑為:ELF 1開發板資料包\\06-常用工具\\06-4
    發表于 12-19 09:09

    AM6254開發常見問題之「問題排查」——飛凌嵌入式

    在項目的開發過程中,各位工程師小伙伴們可能會遇到各種類型的問題,其中“問題”就是非常典型的一種。本篇文章,將以飛凌嵌入式OK6254-C開發板為例,詳細探討大家在寫過程中可能遇到的問題,并提供一系列排查和解決方法,以幫助開
    的頭像 發表于 11-08 11:51 ?1466次閱讀
    AM6254開發常見問題之「<b class='flag-5'>燒</b><b class='flag-5'>寫</b>問題排查」——飛凌嵌入式

    迅為itop-3568開發板AMP雙系統使用手冊之AMP鏡像

    迅為itop-3568開發板AMP雙系統使用手冊之AMP鏡像
    的頭像 發表于 11-04 15:00 ?1095次閱讀
    迅為itop-3568開發板AMP雙系統使用手冊之<b class='flag-5'>燒</b><b class='flag-5'>寫</b>AMP鏡像

    觸摸屏驅動板無法程序的相關原因

    每次聽到別人說是什么原因導致觸摸屏驅動板無法程序,就很想去討論一下。今天就跟大家聊聊到底是什么原因導致的。
    的頭像 發表于 10-21 11:19 ?693次閱讀

    ARM寄存器的分類及功能

    ARM寄存器是ARM處理器內部的重要組成部分,它們在處理器的運算、控制以及數據存儲等方面發揮著至關重要的作用。下面,我們將從ARM寄存器的定
    的頭像 發表于 09-05 14:18 ?2738次閱讀

    可重復的語音芯片具備哪些特點?

    可重復語音芯片具有高可靠性、低功耗、靈活性、安全性、成本效益,支持USB下載更換語音,組合播放,PWM和DAC輸出,休眠模式和抗干擾,適合工業及需修改語音場合。
    的頭像 發表于 07-16 09:36 ?422次閱讀

    ESP32-DOWD代碼后不斷報錯怎么解決?

    00010000, pos 00010000 1150 mmu set 00020000, pos 00020000 1150 mmu set 00030000, pos 00030000................. 我代碼時的配置和報錯信息如圖所示。 有
    發表于 06-20 06:31
    主站蜘蛛池模板: 在线一区二区观看 | 特级一级毛片视频免费观看 | 色老头性xxxx老头视频 | 曰本aaaaa毛片午夜网站 | 狠狠狠狠狠狠 | 国产色女人 | 日韩精品在线第一页 | 国产成人午夜精品影院游乐网 | 8050午夜| 四虎永久在线精品影院 | 爱爱视频天天看 | 亚洲日本三级 | 麻生希痴汉电车avop130 | 精品免费福利视频 | 男人日女人免费视频 | 高清一级毛片一本到免费观看 | 久久青草视频 | 成年人看的毛片 | 久久精品亚洲一级毛片 | 国产精品午夜免费观看网站 | 黄色一区二区三区 | 五月婷婷六月综合 | 国产精品福利午夜一级毛片 | www.黄网| 欧美日本免费 | 老色皮永久免费网站 | 西西人体www303sw大胆高清 | 亚洲一区二区中文字5566 | 亚洲毛片网 | 完全免费在线视频 | 亚洲欧美视频在线播放 | 日韩a无吗一区二区三区 | 女人扒开腿让男人桶到爽 | 国产人免费人成免费视频 | 免费看男女做好爽好硬视频 | 久久9热| 国产高清免费视频 | 国产午夜精品久久理论片小说 | 91噜噜噜 | 欧美18性精品| 国产精品久久久久久久免费 |