专栏首页韦东山嵌入式JZ2440在U-boot中通过网络方式烧录镜像的几种方法

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • dnw驱动更新,支持全系统(xp,win7,win8/win10)

    前言: 本文用于解决win7以上系统使用dnw难装驱动问题,使用新驱动: zadig-2.3.exe,支持xp,win7/win8/win10系统,安装方便...

    韦东山
  • U-boot常用命令汇总

    我们经常使用uboot命令,虽然资料光盘->常见问题目录有U-boot常用命令汇总文档,但从大家的反馈来看,并没有很多人注意到这个文档,所以把它挪到这里。如此全...

    韦东山
  • 制作Linux嵌入式系统开机LOGO(图片)

    内核:linux-2.6.22.6 ubuntu:Ubuntu 9.10 开发板: JZ2440(方法通用,不局限于JZ2440)

    韦东山
  • 树莓派安装raspbian并配置开发环境

    首先准备好我们要烧录的raspbian系统,可以在树莓派官网中下载https://www.raspberrypi.org/downloads/

    墨文
  • easyopenjtag使用教程(最新版)

    op或者eop支持将代码烧写到Nor flash或nand flash,而市面上的jlink只能将代码烧写到nor flash中。    

    韦东山
  • 【教程】从零制作文件系统到jz2440,使其支持telnet , ftp 和tftp

    开发板:jz2440 主机linux:ubuntu 9.10(资料光盘那个) 内核:linux2.6.22.6 交叉编译器:arm-linux-gc...

    韦东山
  • 在 RK3399 上部署最新的 Linux 5.4 和 U-Boot v2020 .01

    可能很多玩 Linux 的同学都听过 mainline 或者 upstream 这两个词,但是又搞不清他们到底指的是什么。

    HackforFun
  • JZ2440开发板直连电脑实现三者互PING

    Ubuntu:资料光盘Ubuntu 9.10 连接方式:JZ2440用网线直接连接电脑 要解决的问题

    韦东山
  • Kali之U盘启动加密与持久化存储制作流程

    描述:最近在家开始将原来所学的一些渗透知识以及渗透工具重新整理了一边,加之个人对Kali OS是非常的喜欢,在渗透测试中可谓是一把利器同时也是做安全人员必不可少...

    WeiyiGeek
  • BeagleBone Black 固件升级

    以前以为自己把自己的BeagleBone Black(简称 BBB)板子玩坏了,然后项目上又给了一个 BBB 板子,后来发现上面的 Linux 系统是不全的,连...

    剑影啸清寒
  • 构建一个适合stm32mp157系列开发板的嵌入式Linux系统

    Linux平台上有许多开源的嵌入式linux系统构建框架(框架的意思就是工具),这些框架极大的方便了开发者进行嵌入式系统的定制化构建,目前比较常见的有OpenW...

    韦东山
  • Ventoy:一种更便捷的OS引导盘制作方式

    通过对比,可以发现Ventor简化了烧录流程,使U盘可多环境重复使用,大大提高了OS安装前准备工作的效率。

    PedroQin
  • Linux——OTG方式烧写镜像文件步骤总结

    在使用开发板开发时,时常需要把编译好的镜像文件烧写至开发板,通常我们使用OTG在线烧写方式,开发阶段调试效率很高,也可以使用TF卡烧录,就需要先把TF卡做成类似...

    Winter_world
  • i.MX6ULL嵌入式Linux开发1——uboot移植初探

    本系列教程以「i.MX6ULL」处理器的ARM开发板为实验基础,学习记录嵌入式Linux开发的各种知识与经验,主要内容包括嵌入式Linux移植,嵌入式Linux...

    xxpcb
  • 嵌入式Linux系统移植的四大步骤(详细长文,慎入!)

    最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们的开发环...

    刘盼
  • 第015课 NOR Flash操作原理及裸机程序分析

    #第001节_Nor Flash原理及硬件操作 # Nor Flash的连接线有地址线,数据线,片选信号读写信号等,Nor Flash的接口属于内存类接口,N...

    韦东山
  • 超详细分析Bootloader(Uboot)到内核的启动流程(万字长文!)

      Bootloader的启动过程可以分为单阶段、多阶段两种。通常多阶段的 Bootloader能提供更为复杂的功能以及更好的可移植性。从固态存储设备上启动的 ...

    嵌入式与Linux那些事
  • 第四课:u-boot对设备树的支持

    转载请注明文章地址 http://wiki.100ask.org/Linux_devicetree

    韦东山
  • 树莓派基本配置与Docker的安装

    https://www.raspberrypi.org/downloads/raspbian/

    緣來

扫码关注云+社区

领取腾讯云代金券