91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開(kāi)發(fā)>總結(jié)分析:ARM的啟動(dòng),系統(tǒng)升級(jí),燒寫(xiě)過(guò)程和文件系統(tǒng)

總結(jié)分析:ARM的啟動(dòng),系統(tǒng)升級(jí),燒寫(xiě)過(guò)程和文件系統(tǒng)

2021-01-21 | pdf | 107.07KB | 次下載 | 3積分

資料介紹

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

談到ARM以及啟動(dòng)和燒寫(xiě)等方面,首先我們要明確一下幾個(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盤(pán)等
② 大致原理是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等命令燒寫(xiě)到存儲(chǔ)介質(zhì)如NAND,最后設(shè)定啟動(dòng)參數(shù),然后引導(dǎo)系統(tǒng)啟動(dòng);
⑤ 一般調(diào)試流程,介紹2種:
- 使用NAS從主機(jī)直接加載文件系統(tǒng),直接在線(xiàn)調(diào)試,快捷方便
- 設(shè)定從SD卡啟動(dòng),從SD卡加載kernel和文件系統(tǒng)調(diào)試

CMDLINE:

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

② 主要2個(gè)參數(shù):
第一,指定console設(shè)備,用于打印輸出及做控制臺(tái)用
第二,指定rootfs掛載分區(qū)和類(lèi)型

③ 看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):寫(xiě)入前需要先擦除,有壽命且不長(zhǎng),而且容易產(chǎn)生壞塊

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

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

文件系統(tǒng):

① FAT:windows常用文件系統(tǒng),一般U盤(pán),sd卡即為fat格式
② ext2/3/4,Linux常用文件系統(tǒng),一般用于FTL Device,即只有讀和寫(xiě)
③ 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"

燒寫(xiě)過(guò)程:
① 一般從SD卡等外部方式啟動(dòng),在Uboot中,使用flash命令及UBI命令分別燒寫(xiě)uboot,dtb,kernel,rootfs到對(duì)應(yīng)的分區(qū)即可
② 第二使用芯片廠(chǎng)家的燒寫(xiě)工具,如nxp的 mfgtoos,在pc上通過(guò)usb燒寫(xiě)文件
③ 如已有uboot,在uboot中從sd卡,U盤(pán)等讀取文件燒寫(xiě);或tftp從pc下載文件燒寫(xiě)

升級(jí)過(guò)程:
① 此升級(jí)指的是Uboot OK的前提下做Uboot,kernel,rootfs等升級(jí)
② 通過(guò)SD卡升級(jí),一般是首先在PC上制作SD卡啟動(dòng)分區(qū),通過(guò)官方的工具燒寫(xiě)升級(jí)文件到SD卡即可;此處的升級(jí)文件分兩個(gè)方面:

  • 最小升級(jí)內(nèi)核,并且包含升級(jí)腳本,此腳本會(huì)將目標(biāo)文件燒寫(xiě)到存儲(chǔ)介質(zhì)中
  • 目標(biāo)升級(jí)文件,即要燒寫(xiě)到比如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命令燒寫(xiě)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命令燒寫(xiě)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命令燒寫(xiě)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
 
燒寫(xiě)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

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1TC358743XBG評(píng)估板參考手冊(cè)
  2. 1.36 MB  |  330次下載  |  免費(fèi)
  3. 2開(kāi)關(guān)電源基礎(chǔ)知識(shí)
  4. 5.73 MB  |  6次下載  |  免費(fèi)
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設(shè)計(jì)
  8. 0.60 MB  |  3次下載  |  免費(fèi)
  9. 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費(fèi)
  11. 6基于FPGA的C8051F單片機(jī)開(kāi)發(fā)板設(shè)計(jì)
  12. 0.70 MB  |  2次下載  |  免費(fèi)
  13. 751單片機(jī)窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費(fèi)
  15. 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21548次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6653次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191185次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183278次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)
主站蜘蛛池模板: 91av视频在线 | 婷婷激情小说 | 色香首页| yy4080一级毛片免费观看 | 人人看人人看人做人人模 | 亚洲精品美女久久久aaa | ass日本69| 欧美黄色三级视频 | 男人女人的免费视频网站 | 黄色在线观看网站 | 色五月婷婷成人网 | 日本黄色的视频 | 美女淫| 天天操狠狠操夜夜操 | 5g国产精品影院天天5g天天爽 | 国产精品三级在线 | 色爱区综合激月婷婷激情五月 | 伊人精品网| 午夜三级网 | 中文字幕777 | 免费能看的黄色网址 | 日本黄色片在线观看 | 播播开心激情网 | 色噜噜亚洲男人的天堂 | 日本一区二区不卡在线 | 一级特级女人18毛片免费视频 | 天天摸天天碰天天碰 | 手机看片1024精品日韩 | 影音先锋五月天 | 黄色免费大全 | 日韩三级免费观看 | 国产69精品久久久久9999 | 久久噜国产精品拍拍拍拍 | 欧美一区二区三区在线 | 亚洲一区二区综合 | 无遮挡很爽很污很黄在线网站 | 免费一级片在线 | 一级毛片一级毛片一级毛片 | 六月丁香婷婷综合 | 手机看片国产在线 | 色老头久久久久久久久久 |