娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

tiny6410 燒寫uboot

發布者:知識智慧最新更新時間:2024-09-25 來源: cnblogs關鍵字:tiny6410  燒寫uboot 手機看文章 掃描二維碼
隨時隨地手機看文章

#燒錄 參考: 03- Tiny6410刷機指南.pdf


假設拿到的Tiny6410開發板沒有提前下載任何程序,包括Bootloader.


##Bootloader - Superboot


Superboot是FriendlyARM公司提供的Bootloader(非開源),提供USB下載功能。

只要燒寫了Superboot, 就可以通過USB下載內核、文件系統到板子的Flash中。


因為Nand Flash現在還沒有內容,現在只有通過SD卡啟動。


完全空白的 SD 卡是不能直接啟動 6410 開發板的,必須先在 PC 上使用特殊的燒寫軟 件把 BIOS(也可以稱為 bootloader)寫入 SD 卡才可以,并且寫入的這個 BIOS 是無法在電腦上直接看到的。


一般市場上買到的 SD 卡為全盤 FAT32 格式,如果卡中存放了很多數據,強制燒寫就可能會不知不覺中破壞這些數據;

基于此原因考慮, FriendlyARM在 Vista/Winows7 中,先把 SD 卡自動分割為普通的 FAT32 格式區(自動命名卷標為'FriendlyARM')和無格式區(占 130M) 兩部分,燒寫軟件將會依據卷標名稱作為標志,把 bootloader 燒寫到無格式區,這樣就不會 破壞普通 FAT32 格式區中的數據了。


Windows 7,使用FriendlyARM提供的SD卡燒錄工具SD-Flasher.exe:


SD卡連接Window 7(提前備份SD卡數據,下面的操作會格式化SD卡)


以管理員身份運行SD-Flasher.exe


點擊'Scan'按鈕,選擇找到的SD卡(非管理員權限,無法掃描到SD卡)


點擊'ReLayout!'按鈕,對SD卡進行分區(小容量SD卡無法分區,應更換大容量SD卡)


FAT32

無格式區, SD卡最后的130M空間;

例如一個8G的SDHC卡, 7.4 GiB, 7948206080 bytes, 15523840 sectors(2048-15523839,前2048個扇區被保留):


FAT32, (第2048扇區~15259647扇區),共15257600扇區。

無格式區, (第15259648扇區 ~ 15523840扇區),共有264193扇區(約129M)

除了FAT32分區以外,其他扇區總數共266240個扇區。

而前2048個扇區,為FAT32的保留扇區。作為“第一分區”,存放主啟動記錄(MBR)和分區表,占512字節,其中最后兩個字節為信號字'0x55','0xaa': % sudo dd if=/dev/sdc bs=1 skip=510 count=2 | od -t x1c


分區完成后,重新'Scan',此時SD卡的'Available'欄目信息變為'Yes'。


選擇Image File,這里選擇Bootloader文件(superboot-20111114.bin)


點擊'Fuse'按鈕,燒錄Bootloader到SD卡


將SD卡插入Tiny6410開發板卡槽,選擇SDBOOT啟動模式,連接串口,上電,會看到串口輸出消息:


 

##### FriendlyARM Superboot for 6410 #####

 

[f] Format the nand flash

 

[p] Download superboot

 

[v] Download uboot.bin

 

[k] Download Linux/Android kernel

 

[y] Download root yaffs2 image

 

[u] Download root ubifs image

 

[a] Download Absolute User Application

 

[n] Download Nboot.nb0 for WinCE

 

[l] Download WinCE bootlogo

 

[w] Download WinCE NK.bin

 

[b] Boot the system

 

[s] Set the boot parameter of Linux

 

[d] Download and Run an Absolute User Application

 

[i] Version: 1144, RAM 1024 MiB, NAND(SLC) 1GiB

 

Please enter your Selection:

要使用Superboot的USB下載功能,需要:


Windows XP / Window 7

USB驅動-tiny6410 適用于win7 64bit的dnw 的USB下載驅動

解壓得到win7-64-FriendlyArm/, 解壓secbulk64.zip

運行dseo13b.exe, Enable Test Mode

Sign a System File, 選擇secbulk64/inf64/secbulk.sys

USB線連接FriendlyARM Tiny6410 & PC, 選擇驅動位置為secbulk64/inf64, 安裝驅動;

DWN下載軟件-DWN.exe

下載步驟(通過SD卡的Superboot下載Superboot/Kernel/File System到Nand Flash):


連接串口至電腦用于查看串口輸出,連接USB線至電腦用于傳輸數據。


啟動ARM開發板,進入Superboot。


Nand Flash下的Superboot, 會自動引導Linux內核。因此需要按住按鈕再上電。

SD卡的Superboot, 可以直接上電。

選擇[p]選項,燒錄Superboot.bin到Nand Flash; 以后就可以脫離SD卡。


選擇[k]選項,燒錄zImage(Linux內核文件)到Nand Flash;


選擇[y]/[u]選項,燒錄不同格式的文件系統到Nand Flash;


選擇[b]選項,啟動Nand Flash內的Linux內核。


另外,還可以通過[d]選項,直接下載程序(例如之前交叉編譯好的leds.bin, key.bin等)到內存起始地址,并開始運行程序。


例子: 交叉編譯ARM-Tiny6410/no-os/led/1.leds_s/,得到led.bin,通過dwn.exe下載到板子并運行;


##Bootloader - U-boot


使用Tekkaman Ninja移植的U-boot-2011.06.


SD卡燒錄U-Boot.bin:


no-os/sd-no-os/u-boot


SDBOOT啟動U-Boot,通過fatload燒錄U-Boot到NAND Flash:


判斷mmc設備號


 

MINI6410 # mmc dev

 

mmc0 is current device

查看SD卡的文件


 

MINI6410 # fatls mmc 0

 

270336 superboot-20111114.bin

 

255576 u-boot.bin

 

4096 u-boot-spl-16k.bin

 

259672 u-boot-nand.bin

 

 

 

4 file(s), 0 dir(s)

需要事先拷貝u-boot-nand.bin到SD卡。


讀取u-boot-nand.bin到SDRAM


 

MINI6410 # fatload mmc 0 50008000 u-boot-nand.bin

 

reading u-boot-nand.bin

 

 

 

259672 bytes read

將內存中的u-boot-nand.bin寫入到Nand Flash的Bootloader區域.


這里的Bootloader為0 ~ 0x80000(512K)


 

MINI6410 # nand erase 0 0x80000

 

NAND erase: device 0 offset 0x0, size 0x80000

 

Erasing at 0x60000 -- 100% complete.

 

OK

 

 

 

MINI6410 # nand write 50008000 0 80000

 

NAND write: device 0 offset 0x0, size 0x80000

 

524288 bytes written: OK

切換為NAND啟動,上電,會看到Nand Flash上的U-Boot啟動。


SDBOOT啟動U-Boot,通過NFS燒錄U-Boot到NAND Flash:


搭建NFS服務器,目錄: 10.42.1.100:/var/nfsroot/arm/


SDBOOT啟動U-Boot


 

MINI6410 # nfs 50008000 10.42.1.100:/var/nfsroot/arm/u-boot-nand.bin

 

dm9000 i/o: 0x18000300, id: 0x90000a46

 

DM9000: running in 16 bit mode

 

MAC: 08:08:10:12:10:27

 

operating at 100M full duplex mode

 

Using dm9000 device

 

File transfer via NFS from server 10.42.1.100; our IP address is 10.42.1.70

 

Filename '/var/nfsroot/arm/u-boot-nand.bin'.

 

Load address: 0x50008000

 

Loading: ###################################################

 

doen

 

Bytes transferred = 259672 (3f658 hex)

燒寫進Nand Flash


 

MINI6410 # nand erase 0x0 0x80000

 

NAND erase: device 0 offset 0x0, size 0x80000

 

Erasing at 0x60000 -- 100% complete.

 

OK

 

 

 

MINI6410 # nand write 50008000 0 0x80000

 

NAND write: device 0 offset 0x0, size 0x80000

 

524288 bytes written: OK

SDBOOT啟動U-Boot,通過NFS燒錄linux kernel到NAND Flash:


注意:不要用U-boot引導FriendlyARM官方給的zImage,不同bootloader對內核的引導略有不同,最好利用U-Boot的mkimage重新生成uImage. 使用U-boot引導zImage,會導致'Error: unrecognized/unsupported machine ID'的問題。


Linux Kernel: 使用FriendlyARM提供的linux-2.6.38-20140106.tgz。


交叉編譯linux內核,得到vmlinux


使用mkimage(u-boot-2011.06-for-MINI6410/tools/mkimage), 生成U-Boot格式的映像文件uImage.


 

arm-linux-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin

 

gzip -9 linux.bin

 

./mkimage -A arm -O linux -T kernel -C gzip -a 0x50008000 -e 0x50008000 -n 'Linux Kernel Image' -d linux.bin.gz uImage

輸出:


 

Image Name: Linux Kernel Image

 

Created: Fri Nov 6 11:11:04 2015

 

Image Type: ARM Linux Kernel Image (gzip compressed)

 

Data Size: 3742549 Bytes = 3654.83 kB = 3.57 MB

 

Load Address: 50008000

 

Entry Point: 50008000

對于ARM linux內核映象用法:


-A arm , 架構是arm

-O linux , 操作系統是linux

-T kernel , 類型是kernel

-C none/bzip/gzip , 壓縮類型

-a 50008000 , image的載入地址(hex),通常為0xX00008000

-e 500080XX , 內核的入口地址(hex),XX為0x40或者0x00

-n linux-XXX , image的名字,任意

-d nameXXX , 無頭信息的image文件名,你的源內核文件

uImageXXX , 加了頭信息之后的image文件名,任意取

-a和-e后面跟的分別是image的載入地址(Load Address)和內核的入口地址(Enter Point),兩者可以一樣,也可以不一樣,依情況而定:


當-a后面指定的地址和bootm xxxx后面的地址一樣時(此時u-boot不需要搬運映像文件uImage),則-e后面的地址必須要比-a后面的地址多0x40,也就是映像頭的大小64個字節。


當-a后面指定的地址和bootm xxxx后面的地址不一樣時(u-boot會將bootm xxxx地址處的映像搬運到-a指定的地址處),此時,-e和-a必須要一樣,因為映像頭并沒有搬運過去,載入地址就應該是內核的入口地址。需要注意的是,因為uboot要重新搬運內核映像,所以要注意bootm xxxx的地址和-a之間的地址不要導致復制時的覆蓋。

例如:

Load Address: 0x0000000 u-boot: bootm 0x00010000 地址不同,需要搬運uImage, 不搬運頭部64字節。但是uImage在搬運過程中,會覆蓋到舊的uImage, 導致錯誤:


 

Uncompressing Kernel Image ... Error: inflate() returned ?3

 

GUNZIP ERROR ? must RESET board to recover

通過NFS燒錄(U-Boot Command Line):


 

nfs 0x50008000 10.42.1.100:/var/nfsroot/arm/uImage

 

nand erase 0x80000 0x500000

 

nand write 0x50008000 0x80000 0x500000

配置U-Boot參數bootcmd


 

MINI6410 # setenv bootcmd 'nand read 0x51008000 0x80000 0x500000; bootm 0x51008000'

 

MINI6410 # saveenv

從Nand Flash的0x80000處,讀取5M數據,存放到SDRAM的0x51008000處,然后調用bootm函數。0x51008000處存放著uImage, 其頭部描述Load Address為0x50008000,與bootm的參數(0x51008000)不同,則拷貝0x51008000處的uImage到0x50008000, 不拷貝頭部。然后進入Entry Point(0x50008000), 內核啟動成功。


##File System - 文件系統


制作文件系統


參考: 韋東山 - 17章節

參考: 一步一步制作yaffs/yaffs2根文件系統

NFS掛載

制作好根文件系統,先別著急制作成yaffs2格式的映像,別著急下載到Nand Flash,先通過NFS掛載文件系統,測試文件系統是否正常。


 

setenv bootargs 'root=/dev/nfs rw noinitrd console=ttySAC0,115200n8 mem=256M init=/linuxrc nfsroot=10.42.1.100:/var/nfsroot/rootfs ip=10.42.1.70:10.42.1.100:10.42.1.254:255.255.255.0:tiny6410:eth0:off'

 

saveenv

 

boot

Linux內核在啟動的時候,能接收某些命令行選項或啟動時參數。

內核啟動參數詳解:


root=/dev/nfs rw,采用NFS設備啟動文件系統,rw可讀可寫。

noinitrd,非ramdisk啟動方式。

console=ttySAC0,115200n8,串口ttySAC0作為控制臺,波特率為115200,8bit數據位。

mem=256M,內存為256M.

init=/linuxrc,設置內核啟動后執行的第一個腳本為/linuxrc。如果該項沒有設置,內核會按順序嘗試/etc/init,/bin/init,/sbin/init,/bin/sh,如果所有的都沒找到,內核會拋出 kernel panic的錯誤。

nfsroot=10.42.1.100:/var/nfsroot/rootfs,設置文件系統所在的NFS目錄。

ip=10.42.1.70:10.42.1.100:10.42.1.254:255.255.255.0:tiny6410:eth0:off

命令格式為ip=ip_addr:server_ip_addr:gateway:netmask:name:which_netcard:off

第一項(ip_addr)為目標板的IP地址,這里為10.42.1.70;

第二項(server_ip_addr)為rootserver,這里為10.42.1.100;

第三項(gateway)為網關,這里為10.42.1.254;

第四項(netmask)為子網掩碼, 這里為255.255.255.0;

第五項(name)為開發板名稱,任意;

第六項(which_netcard)為網卡設備名稱;

off;

掛載文件以后以后,可以在內核輸出消息處看到:


 

IP-Config: Complete:

 

device=eth0, addr=10.42.1.70, mask=255.255.255.0, gw=10.42.1.254,

 

host=tiny6410, domain=, nis-domain=(none),

 

bootserver=10.42.1.100, rootserver=10.42.1.100, rootpath=

 

 

 

Please press Enter to activate this console.

使用mkyaffs2image-128生成yaffs2映像,燒寫到板子上進行測試


mkyaffs2image(適合64M)

mkyaffs2image-128(適合128M以上)

注:由于FriendlyARM提供的mkyaffs2image-128代碼有改動,使用該工具制作的yaffs2映像,在引導時可能存在以下問題:


 

/init: line 103: can't open /r/dev/console: no such file

 

Kernel panic - not syncing: Attempted to kill init!

雖然網上遇到這種問題的解決辦法是:


在根文件系統/dev/目錄下,創建console節點:


 sudo mknod console c 5 1

但這里的問題并不是這個。 Google Search :


 site:arm9home.net /r/dev/console

用自己編譯的內核加上友善的yaffs2文件系統,友善的內核加自己的文件系統,自己的內核加自己的文件系統全都會出現上述提示。只有用友善的內核和文件系統才不會報錯。


/r, 這是系統啟動時先會mount 命令行參數指定的rootfs到 /r 目錄, 準備好后再切換/r 為根目錄 如果mount失敗, 或燒寫的文件系統有問題等等, 那么都會出現這個錯誤。


使用SuperBoot-6410與zImage不存在此問題,NFS引導不存在此問題(其他網友存在此問題)。


關鍵字:tiny6410  燒寫uboot 引用地址:tiny6410 燒寫uboot

上一篇:記錄ok6410 jlink 命令行調試uboot
下一篇:記錄tiny6410 使用linux-2.6.28.6內核遇到starting kernel...的問題

0
添点儿料...
无论热点新闻、行业分析、技术干货……
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 郓城县| 桃园市| 丰都县| 习水县| 松桃| 宜章县| 九江市| 松江区| 呼和浩特市| 呈贡县| 文化| 怀来县| 渑池县| 南充市| 富宁县| 东乌| 孟村| 毕节市| 中江县| 佛坪县| 福泉市| 灌阳县| 云南省| 海城市| 定襄县| 阿瓦提县| 敦煌市| 赤水市| 苏尼特右旗| 浙江省| 元氏县| 阿克苏市| 宣恩县| 淅川县| 安西县| 乃东县| 清远市| 黎平县| 岳阳县| 东港市| 舞钢市|