91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

ARM以及啟動(dòng)和燒寫等方面

電子設(shè)計(jì) ? 來(lái)源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2022-02-18 13:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

談到ARM以及啟動(dòng)和燒寫等方面,首先我們要明確一下幾個(gè)關(guān)鍵詞:Uboot,Cmdline,啟動(dòng)方式選擇,文件系統(tǒng)格式,存儲(chǔ)介質(zhì),如NAND,EMMC,SD卡等

下面一個(gè)一個(gè)做相關(guān)介紹:

啟動(dòng)方式:

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

② 大致原理是CPU內(nèi)部ROM有一段固化的啟動(dòng)代碼,根據(jù)CPU配置引腳,判斷啟動(dòng)位置,然后從外部介質(zhì)讀取數(shù)據(jù)啟動(dòng)

③ 一般啟動(dòng)介質(zhì)的前一部分代碼的作用必須是:初始化硬件參數(shù),自身拷貝

④ 關(guān)于自拷貝:因?yàn)镃PU內(nèi)部RAM很小,因此只能讀取一部分啟動(dòng)介質(zhì)的數(shù)據(jù)即Uboot到內(nèi)部RAM運(yùn)行,所以Uboot前一部分的工作需要將自身剩余部分拷貝到外部RAM中,然后加載運(yùn)行

Uboot:

① 主要作用:引導(dǎo)Linux系統(tǒng)(主要是從存儲(chǔ)介質(zhì)的哪個(gè)地方讀取Kernel,傳遞什么樣的啟動(dòng)參數(shù))

② 其他功能:支持很多命令,主要是存儲(chǔ)控制和網(wǎng)絡(luò)命令,最終目的還是引導(dǎo)和升級(jí)系統(tǒng)用

③ 常用操作:TFTP,NAS,F(xiàn)lash操作,UBI操作,Setenv,boot等

④ 一般升級(jí)系統(tǒng)流程:使用tftp方式從主機(jī)下載kernel及文件系統(tǒng)等文件,然后使用flash等命令燒寫到存儲(chǔ)介質(zhì)如NAND,最后設(shè)定啟動(dòng)參數(shù),然后引導(dǎo)系統(tǒng)啟動(dòng);

⑤ 一般調(diào)試流程,介紹2種:

- 使用NAS從主機(jī)直接加載文件系統(tǒng),直接在線調(diào)試,快捷方便

- 設(shè)定從SD卡啟動(dòng),從SD卡加載kernel和文件系統(tǒng)調(diào)試

CMDLINE:

① 一般由Uboot傳遞給Kernel,或者Kernel中配置寫死不過(guò)一般很少見(jiàn)

② 主要2個(gè)參數(shù):

第一,指定console設(shè)備,用于打印輸出及做控制臺(tái)用

第二,指定rootfs掛載分區(qū)和類型

③ 看2個(gè)例子:

從NAND啟動(dòng),/proc/cmdline,加載的是UBI文件系統(tǒng),位置在mtd3

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

從SD卡啟動(dòng),/proc/cmdline,加載的是ext4文件系統(tǒng),位置在sd卡第二分區(qū)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)

存儲(chǔ)介質(zhì):

主要介紹Raw Flash 及 FTL devices區(qū)別

Flash特點(diǎn):寫入前需要先擦除,有壽命且不長(zhǎng),而且容易產(chǎn)生壞塊

RAW Flash:即裸芯片,沒(méi)有控制器,針對(duì)其主要操作有擦除,讀和寫

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

文件系統(tǒng):

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

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

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

④ UBIFS,Linux常用文件系統(tǒng),只能用于Raw Flash,因?yàn)閗ernel ubi子系統(tǒng),有相關(guān)的磨損平衡算法,可以保證效率

⑤ SD卡啟動(dòng),文件系統(tǒng)掛載情況:

# 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啟動(dòng),文件系統(tǒng)掛載情況:

# 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”

燒寫過(guò)程:

① 一般從SD卡等外部方式啟動(dòng),在Uboot中,使用flash命令及UBI命令分別燒寫uboot,dtb,kernel,rootfs到對(duì)應(yīng)的分區(qū)即可

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

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

升級(jí)過(guò)程:

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

② 通過(guò)SD卡升級(jí),一般是首先在PC上制作SD卡啟動(dòng)分區(qū),通過(guò)官方的工具燒寫升級(jí)文件到SD卡即可;此處的升級(jí)文件分兩個(gè)方面:

最小升級(jí)內(nèi)核,并且包含升級(jí)腳本,此腳本會(huì)將目標(biāo)文件燒寫到存儲(chǔ)介質(zhì)中

目標(biāo)升級(jí)文件,即要燒寫到比如NAND中的文件

③ 以NXP SD卡升級(jí)為例說(shuō)明此過(guò)程:

首先是Uboot啟動(dòng)過(guò)程:

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 。.

最小系統(tǒng)加載啟動(dòng)完畢后,運(yùn)行升級(jí)腳本

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

升級(jí)腳本分析:

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

//升級(jí)目標(biāo)文件

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到對(duì)應(yīng)分區(qū)

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到對(duì)應(yīng)分區(qū)

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到對(duì)應(yīng)分區(qū)

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上建立好文件系統(tǒng)格式

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壓縮包解壓到對(duì)應(yīng)分區(qū)即可;

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”

版權(quán)聲明:本文為博主 WindLOR 原創(chuàng)文章,

遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。

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

審核編輯:何安

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

    關(guān)注

    135

    文章

    9552

    瀏覽量

    391792
  • 燒寫
    +關(guān)注

    關(guān)注

    0

    文章

    59

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    迅為RK3588開發(fā)板Android系統(tǒng)及注意事項(xiàng)

    迅為RK3588開發(fā)板Android系統(tǒng)及注意事項(xiàng)
    的頭像 發(fā)表于 12-03 15:17 ?7153次閱讀
    迅為RK3588開發(fā)板Android系統(tǒng)<b class='flag-5'>燒</b><b class='flag-5'>寫</b>及注意事項(xiàng)

    開發(fā)者指南 | 華為昇騰Ascend310B啟動(dòng)鏡像制作與寫全攻略

    在嵌入式Linux開發(fā)中,啟動(dòng)鏡像的制作與是硬件部署的核心環(huán)節(jié)。本文詳細(xì)解析華為昇騰Ascend310B啟動(dòng)鏡像的完整流程,從環(huán)境搭建到
    的頭像 發(fā)表于 11-24 18:03 ?2029次閱讀
    開發(fā)者指南 | 華為昇騰Ascend310B<b class='flag-5'>啟動(dòng)</b>鏡像制作與<b class='flag-5'>燒</b>寫全攻略

    在Nuclei IDE中程序無(wú)法成功的原因及部分解決辦法

    、調(diào)試器、IDE軟件以及soc軟核這四個(gè)方面,同時(shí)也整理一下平時(shí)遇見(jiàn)同樣問(wèn)題的解決辦法。 問(wèn)題原因 1.Fpga軟核 軟核一般不去修改芯來(lái)的開源rtl代碼的話,應(yīng)該不會(huì)出現(xiàn)問(wèn)題,我們團(tuán)隊(duì)
    發(fā)表于 10-31 06:24

    淺談PY32離線燒錄器的滾碼功能

    PY32離線燒錄器可以開啟滾碼功能,默認(rèn)該功能不開啟。添加滾碼時(shí)用戶應(yīng)注意填寫滾碼地址應(yīng)在所選芯片型號(hào) flash 大小之內(nèi),滾碼長(zhǎng)度固定為 32bits。
    的頭像 發(fā)表于 10-13 10:31 ?882次閱讀
    淺談PY32離線燒錄器的<b class='flag-5'>燒</b><b class='flag-5'>寫</b>滾碼功能

    一文了解Arm神經(jīng)超級(jí)采樣 (Arm Neural Super Sampling, Arm NSS) 深入探索架構(gòu)、訓(xùn)練和推理

    本文將從訓(xùn)練、網(wǎng)絡(luò)架構(gòu)到后處理和推理等方面,深入探討 Arm 神經(jīng)超級(jí)采樣 (Arm Neural Super Sampling, Arm NSS) 的工作原理,希望為機(jī)器學(xué)習(xí) (ML
    的頭像 發(fā)表于 08-14 16:11 ?3027次閱讀

    FLASH/編程白皮書

    白皮書:如何Flash——不同場(chǎng)景不同需求下的選擇認(rèn)識(shí)Flash?NAND vs. NOR如何/編程不同方案比較
    發(fā)表于 07-28 16:05 ?0次下載

    【HZ-RK3568開發(fā)板免費(fèi)體驗(yàn)】系統(tǒng)

    開發(fā)環(huán)境: 主機(jī):Ubuntu 20.04 開發(fā)板:合眾HZ-RK3568開發(fā)板 HZ-RK3568開發(fā)板可以使用USB和TF卡,USB是最常用的方式,一般在系統(tǒng)變磚后使用該方
    發(fā)表于 07-25 09:40

    單片機(jī)怎么程序

    驟,才能讓單片機(jī)發(fā)揮作用。 程序前的準(zhǔn)備工作 單片機(jī)程序前,需要做好硬件和軟件兩方面的準(zhǔn)備。硬件方面,核心設(shè)備包括目標(biāo)單片機(jī)、編程器(或下載器)、電腦
    的頭像 發(fā)表于 07-23 11:47 ?1240次閱讀

    關(guān)于cyusb3014I2C EEPROM的問(wèn)題求解

    到I2C EEprom,并且可以寫成功,然后將模式改為1FF,系統(tǒng)偶爾可以啟動(dòng)成功,絕大多數(shù)上電沒(méi)有反應(yīng),請(qǐng)問(wèn)這是什么原因?以及解決該問(wèn)題的辦法。
    發(fā)表于 07-16 07:38

    FPGA遠(yuǎn)程bit文件和調(diào)試ILA指南

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

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

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

    迅為RK3588開發(fā)板技術(shù)分享 TF卡大于4G容量鏡像

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

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

    成后蜂鳴器提示,產(chǎn)線工人聽(tīng)到蜂鳴器鳴叫后就直接斷電重啟,進(jìn)入測(cè)試環(huán)節(jié),結(jié)果在測(cè)試中發(fā)現(xiàn)有部分產(chǎn)品啟動(dòng)就出現(xiàn)異常。客戶用解壓方式系統(tǒng)固件,解壓命令執(zhí)行完后,再運(yùn)行
    的頭像 發(fā)表于 03-07 11:34 ?831次閱讀
    Linux固件<b class='flag-5'>燒</b><b class='flag-5'>寫</b>中的陷阱:文件系統(tǒng)異步寫入引發(fā)的問(wèn)題

    【北京迅為】itop-3568 開發(fā)板openharmony鴻蒙及測(cè)試-第2章OpenHarmony v3.2-Beta4版本測(cè)試

    【北京迅為】itop-3568 開發(fā)板openharmony鴻蒙及測(cè)試-第2章OpenHarmony v3.2-Beta4版本測(cè)試
    的頭像 發(fā)表于 03-05 10:53 ?1058次閱讀
    【北京迅為】itop-3568 開發(fā)板openharmony鴻蒙<b class='flag-5'>燒</b><b class='flag-5'>寫</b>及測(cè)試-第2章OpenHarmony v3.2-Beta4版本測(cè)試

    【北京迅為】itop-3568 開發(fā)板openharmony鴻蒙及測(cè)試-第1章 體驗(yàn)OpenHarmony—鏡像

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