JZ2440在U-boot中通過網路方式燒錄映象的幾種方法
進入uboot
u-boot相當於我們PC機的BIOS,,在PC上廠商為我們做好了圖形介面,操作起來非常便利。雖然在2440中u-boot並沒有介面,但是百問網製作好的uboot中有目錄選單,比較常用的操作都列了出來,開發板上電後,在倒數計時結束之前按下任意鍵進入uboot後就可以看到下面的選單及說明:
##### 100ask Bootloader for OpenJTAG #####
[n] Download u-boot to Nand Flash
[c] Re-scan Nor Flash
[u] Copy bootloader from nand to nor
[v] Copy bootloader from nor to nand
[k] Download Linux kernel uImage
[j] Download root_jffs2 image
[y] Download root_yaffs image
[d] Download to SDRAM & Run
[z] Download zImage into RAM
[g] Boot linux from RAM
[f] Format the Nand Flash
[s] Set the boot parameters
[b] Boot the system
[r] Reboot u-boot
[q] Quit from menu
Enter your selection:
獲取幫助資訊
在選單中輸入對應的字元就可以進行相應的操作的,這些是幫我們整合好的簡單操作指令,如果要使用高階的命令,就需要輸入 q退出選單後,輸入對應的指令對其進行操作,那麼我們該怎麼指導輸入哪些指令呢?常見簡單,在使用uboot時,我們輸入 help就可獲得所有的幫助資訊:
Enter your selection: q
OpenJTAG> help
? - alias for 'help'
autoscr - run script from memory
base - print or set address offset
bdinfo - print Board Info structure
boot - boot default, i.e., run 'bootcmd'
bootd - boot default, i.e., run 'bootcmd'
bootelf - Boot from an ELF image in memory
bootm - boot application image from memory
bootp - boot image via network using BootP/TFTP protocol
bootvx - Boot vxWorks from an ELF image
chpart - change active partition
cmp - memory compare
coninfo - print console devices and information
cp - memory copy
crc32 - checksum calculation
date - get/set/reset date & time
dcache - enable or disable data cache
echo - echo args to console
erase - erase FLASH memory
flinfo - print FLASH memory information
fsinfo - print information about filesystems
fsload - load binary file from a filesystem image
go - start application at address 'addr'
help - print online help
icache - enable or disable instruction cache
iminfo - print header information for application image
imls - list all images found in flash
itest - return true/false on integer compare
loadb - load binary file over serial line (kermit mode)
loads - load S-Record file over serial line
loadx - load binary file over serial line (xmodem mode)
loady - load binary file over serial line (ymodemmode)
loop - infinite loop on address range
ls - list files in a directory (default /)
md - memory display
menu - display a menu, to select the items to do something
mm - memory modify (auto-incrementing)
mtdparts- define flash/nand partitions
mtest - simple RAM test
mw - memory write (fill)
nand - NAND sub-system
nboot - boot from NAND device
nfs - boot image via network using NFS protocol
nm - memory modify (constant address)
ping - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
protect - enable or disable FLASH write protection
rarpboot- boot image via network using RARP/TFTP protocol
reset - Perform RESET of the CPU
run - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv - set environment variables
sleep - delay execution for some time
suspend - suspend the board
tftpboot- boot image via network using TFTP protocol
usbslave - get file from host(PC)
version - print monitor version
OpenJTAG>
上面列出了很多命令,但是我們還需要指導每個命令的具體用法,如引數選項才能進行操作呀!所有我們需要更深入一步瞭解每個命令的用法才能操作,非常簡單,輸入 help <命令> 就可以了,比如我想要知道 nand的用法有哪些,示例操作:
OpenJTAG> help nand
nand info - show available NAND devices
nand device [dev] - show or set current device
nand read[.jffs2] - addr off|partition size
nand write[.jffs2] - addr off|partiton size - read/write `size' bytes starting
at offset `off' to/from memory address `addr'
nand read.yaffs addr off size - read the `size' byte yaffs image starting
at offset `off' to memory address `addr'
nand write.yaffs addr off size - write the `size' byte yaffs image starting
at offset `off' from memory address `addr'
nand read.raw addr off size - read the `size' bytes starting
at offset `off' to memory address `addr',without oob and ecc
nand write.raw addr off size - write the `size' bytes starting
at offset `off' from memory address `addr',without oob and ecc
nand erase [clean] [off size] - erase `size' bytes from
offset `off' (entire device if not specified)
nand bad - show bad blocks
nand dump[.oob] off - dump page
nand scrub - really clean
NAND erasing bad blocks (UNSAFE)
nand markbad off - mark bad block at offset (UNSAFE)
nand biterr off - make a bit error at offset (UNSAFE)
nand lock [tight] [status] - bring nand to lock state or display locked pages
nand unlock [offset] [size] - unlock section
OpenJTAG>
檢視並設定uboot環境變數資訊
知道怎麼在uboot中獲取幫助後我們就可以進行操作了,如在我們想通過tftp方式下載並燒錄映象檔案或者啟動映象檔案,配置nfs方式啟動也都可以了。
磨刀不誤砍柴工,在配置之前我們第一步就是配置環境變數,目的是對接好我們PC,使用 print命令檢視當前 uboot 的環境資訊:
OpenJTAG> print
bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc
console=ttySAC0,115200
bootcmd=nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0
bootdelay=2
baudrate=115200
ethaddr=08:00:3e:26:0a:5b
ipaddr=192.168.0.17
serverip=192.168.0.11
netmask=255.255.255.0
stdin=serial
stdout=serial
stderr=serial
mtdids=nand0=nandflash0
mtdparts=mtdparts=nandflash0:256k@0(bootloader),128k(params),2m(kernel),-(root)
partition=nand0,0
mtddevnum=0
mtddevname=bootloader
Environment size: 450/131068 bytes
OpenJTAG>
要進行tftp的方式下載映象檔案,我們最關心的就是,ip地址、伺服器的ip地址、閘道器、子網掩碼,那麼用哪個命令進行修改呢?剛剛獲取到的幫助資訊當中有 setenv命令,我們 help setenv 獲取它的幫助資訊瞭解一下:
OpenJTAG> help setenv
setenv name value ...
- set environment variable 'name' to 'value ...'
setenv name
- delete environment variable 'name'
OpenJTAG>
非常簡單,我們說明按照格式進行修改就可以了,因此修改它們的方式如下
setenv ipaddr 192.168.0.17 #設定開發板IP
setenv serverip 192.168.0.11 #設定伺服器ip(Windows)
setenv gatewayip 192.168.0.1 #設定閘道器-
setenv netmask 255.255.255.0 #設定子網掩碼
saveenv
修改完之後還需要執行 saveenv儲存我們剛才的修改,否則下次啟動就會保持未修改之前的狀態。
saveenv - save environment variables to persistent storage
清除某個變數
要清除uboot中的某個環境變數非常簡單,只要我們寫入空的引數就可以了,示例操作:
setenv ipaddr
setenv serverip
這樣 ipaddr 和 serverip 的引數就為空了。
操作示例-使用tftp下載並燒錄映象
前提條件
1.開發板可和PC之間能ping通,配置參考:http://wiki.100ask.org/VMwareAndUbuntuNetworkSetupGuide
2.開發板中有可執行的 uboot
3.PC端有可執行的tftp32.exe 程式
通過tftp燒寫uImage到nand Flash步驟:
開啟 tftpd32.exe軟體, 將 uImage 拷貝至工作目錄
在串列埠終端中依次輸入:
tftp 0x30008000 uImage_4.3
nand erase kernel
nand write 0x30008000 kernel
燒寫YAFFS至NandFlash
開啟 tftpd32.exe軟體, 將 fs_mini.yaffs2 拷貝至工作目錄
在串列埠終端中依次輸入:
tftp 0x30008000 fs_mini.yaffs2
nand erase root
nand write.yaffs 0x30008000 root $(filesize) # $(filesize) 是 fs_mini.yaffs2 的大小
燒寫JFFS至NandFlash
開啟 tftpd32.exe軟體,將 fs_mini.jffs2 拷貝至工作目錄
在串列埠終端中依次輸入:
tftp 0x30008000 fs_mini.jffs2
nand erase root
nand write.jffs2 0x30008000 root $(filesize) #$(filesieze) 是 fs_mini.yaffs2 的大小
使用 jffs2 檔案系統啟動時記得修改 bootargs 新增 rootfstype=jffs2
Yaffs2:
setenv bootargs console=ttySAC0,115200 root=/dev/mtdblock3
Jffs2:
setenv bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
最後執行儲存更改、重啟開發板就可進入新燒錄的系統了
saveenv reset
操作示例-使用NFS下載並燒錄映象
前提條件
1.開發板可和Ubuntu之間能ping通,配置參考:http://wiki.100ask.org/VMwareAndUbuntuNetworkSetupGuide
2.Ubuntu搭建好NFS服務,配置並開啟了NFS服務,配置參考:https://zhuanlan.zhihu.com/p/28556875
3.開發板中有可執行的 uboot
操作步驟
開發板網路配置
假設ubuntu的IP地址為 192.168.0.20
開發板uboot的ip地址、閘道器、子網掩碼的配置資訊如下:
setenv ipaddr 192.168.0.17 #設定開發板IP
setenv gatewayip 192.168.0.1 #設定閘道器-
setenv netmask 255.255.255.0 #設定子網掩碼
saveenv
修改完之後還需要執行 saveenv儲存我們剛才的修改,否則下次啟動就會保持未修改之前的狀態。
saveenv - save environment variables to persistent storage
通過nfs下載映象檔案並燒錄
下載u-boot:
nfs 0x30008000 192.168.0.20:/work/nfs_root/u-boot.bin #將uboot.bin 下載到sdram 0x30008000
燒錄u-boot:
nand erase bootloader #擦除bootloader區域
nand write 0x30008000 bootloader #將0x30008000的內容燒寫到bootloader
下載uImage:
nfs 0x30008000 192.168.0.20:/work/nfs_root/uImage #將uImage下載到sdram 0x30008000
燒錄uImage:
nand erase kernel #擦除kernel區域
nand write 0x30008000 kernel #將0x30008000的內容燒寫到bootloader
下載YAFFS檔案系統
nfs 0x30008000 192.168.0.20:/work/nfs_root/fs_mini.yaffs2 #將根檔案系統下載到sdram 0x30008000
燒寫yaffs至NandFlash
nand erase root #擦除root區域
nand write.yaffs 0x30008000 root $(filesize) #將從0x30008000開始的內容燒寫到root,檔案大小是$(filesize)
下載JFFS檔案系統
nfs 0x30008000 192.168.0.20:/work/nfs_root/fs_mini.jffs2 #將根檔案系統下載到sdram 0x30008000
燒寫JFFS至NandFlash
nand erase root #擦除root區域
nand write.jffs2 0x30008000 root $(filesize) #將從0x30008000開始的內容燒寫到root,檔案大小是$(filesize)
下載核心後不燒錄到開發板直接啟動
我們通過網路下載核心到 SDRAM 中後,不想燒錄到開發板,只想像nfs啟動那樣可以嗎?
可以的,在上面的操作中,我們將核心下載到了 0x30008000 的位置上了,只要我們使用 bootm 命令就可以從那個地址開始啟動核心了。
bootm 0x30008000
NFS掛載方式啟動核心、根檔案系統
參考:https://zhuanlan.zhihu.com/p/28556875
參考文章說明了如何配置Ubuntu的NFS服務,開發板的引數設定,最後成功啟動根檔案系統。
如果我們的核心和根檔案系統也想通過nfs的方式啟動改怎麼做呢?
其實在上文中已經給出了方法:我們下載好核心後再 bootm 從下載的位置啟動就可以了,所以我們只需要配置一下uboot的啟動引數。
假設ubuntu的IP地址為 192.168.0.20,開發板的ip為 192.168.0.17,uboot的啟動引數設定如下:
setenv bootcmd 'nfs 30000000 192.168.0.20:/work/nfs_root/uImage_alsa; bootm 30000000' #由於是兩條指令,因此需要用''引起來
setenv bootargs noinitrd
root=/dev/nfs rw nfsroot=192.168.0.20:/home/book/nfs_rootfs ip=192.168.0.17:192.168.0.20:10.0.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
saveenv
reset
百問網技術論壇:
http://bbs.100ask.net/
線上教學網站:
https://www.100ask.net/index
百問網開發板:
https://weidongshan.tmall.com/
技術交流群(鴻蒙開發/Linux/嵌入式/驅動/資料下載)
QQ群:869222007
微控制器-嵌入式Linux交流群:
QQ群:536785813
相關文章
- 映象燒錄【通過HarmonyOS IDE工具DevEco】IDEdev
- VMware連線網路的幾種方式
- 怎麼通過Python掙外快,通過Python掙外快的幾種方式!Python
- 模擬與燒錄程式有哪幾種方式?(包含常用工具與使用方式)
- 程式間的幾種通訊方式
- 在 .NET 中建立物件的幾種方式的對比物件
- 網路安全中常用的幾種加密方式都有哪些?加密
- Spring在程式碼中獲取bean的幾種方式SpringBean
- 幾種常見網路抓包方式介紹
- 伺服器網路測試的幾種方法伺服器
- 手機通訊錄怎麼備份?手機通訊錄的幾種備份方法
- 分享幾種 Java8 中通過 Stream 對列表進行去重的方法Java
- ISP方式燒錄韌體
- 在 PowerShell 中,可以透過一些命令和指令碼來統計網路流量。以下是幾種常見的方法:指令碼
- vue3 常用的幾種元件通訊方式Vue元件
- 在Qt中,可以透過以下幾種常見方式來啟動執行緒QT執行緒
- Billboards 技術在Unity 中的幾種使用方法Unity
- 幾種刪除Linux目錄的方法Linux
- Java(SpringBoot)專案打包(構建)成`Docker`映象的幾種方式JavaSpring BootDocker
- sed中變數引用的幾種方式變數
- js 中斷迴圈的幾種方式JS
- JS中建立函式的幾種方式JS函式
- docker學習(常用命令,映象燒錄,定製映象)Docker
- Springboot呼叫Oracle儲存過程的幾種方式Spring BootOracle儲存過程
- python 通過 Web3.py 連線以太坊區塊鏈的幾種方式PythonWeb區塊鏈
- 幾種集合的幾種方法
- Docker打包映象的兩種方式Docker
- Docker幾種網路模式Docker模式
- kubernetes pod內抓包,telnet檢查網路連線的幾種方式
- 通過“表白”的方式,讓我們快速瞭解網路協議協議
- 在短視訊時代怎樣通過“優獲客”的方式進行網路營銷
- Python中清空list的幾種方法Python
- JavaScript中遍歷的幾種方法JavaScript
- MFA並非100%有效 網路犯罪分子可透過這幾種方式輕鬆破壞
- 【基礎】這15種CSS居中的方式,你都用過哪幾種?CSS
- MySql避免重複插入記錄的幾種方法MySql
- Unity反射的幾種方式Unity反射
- css引入的幾種方式CSS