目录

嵌入式系统开发与应用嵌入式-Linux-调试环境搭建

嵌入式系统开发与应用——嵌入式 Linux 调试环境搭建

一、 实验目的

1、掌握VMware中设置共享文件夹的方法,为后续实验做准备;

2、熟悉 Linux TFTP 配置,为后续 Linux 底层开发做准备(后面会用 tftp 从宿主机传输镜像到 FS_4412开发板);

3、通过实验熟悉 Linux NFS 文件系统的配置过程,为后续 Linux 底层开发实验做准备;

4、熟悉嵌入式 Linux 交叉开发环境的搭建与使用。

二、 实验仪器设备

PC机、华清远见开发环境、FS4412 开发板。

三、 实验原理

使用 tftp 的方式下载内核,运行到开发板上;使用 nfs 方式挂载文件系统,在开发板与宿主机的Ubuntu中共享文件操作。

四、 实验内容及注意事项

1、完成VMware中设置共享文件夹;

2、通过Linux TFTP传送文件;

3、完成Linux NFS 文件系统的搭建;

4、完成Linux 交叉开发环境的搭建与使用。

五、 实验组织运行

根据本实验指导书,学生自主训练为主。

六、 实验步骤及实验报告

(一)VMware中设置共享文件夹

在VMware虚拟机中可以设置Windows与Linux系统的文件共享,以实现在本机的两个不同的系统中进行文件的交换,具体操作方式如下。

1、VMware虚拟机中正确安装好VMware Tools。因实验中所使用的华清远见开发环境中已进行了安装,故可不再安装。具体安装过程可参见网络文档。

2、先在主机创建一个文件夹,如在D盘下创建share文件夹,用于虚拟机与主机的文件共享。

https://i-blog.csdnimg.cn/blog_migrate/0b8606b85ec7ae1a0cc844c67b59087e.png

3、选择"虚拟机"—>“设置”,在出现的对话框中进行如下操作:

https://i-blog.csdnimg.cn/blog_migrate/8b6b2f433e26d3c4f502c2d12c0eb169.png

https://i-blog.csdnimg.cn/blog_migrate/ae4010eca1915d41a9cf97a3741affdf.png

https://i-blog.csdnimg.cn/blog_migrate/ffdfe0653ebced2e936fe4a14ab28a63.png

https://i-blog.csdnimg.cn/blog_migrate/992609bb00f756a6ac66b8ca93832bf1.png

https://i-blog.csdnimg.cn/blog_migrate/340e36391797b46c85ba79f723315af5.png

至此完成共享文件夹的设置。

4、在Ubuntu中查看共享文件夹。共享文件夹位于/mnt/hgfs/目录下,可以用命令行状态查看,也可在桌面图形下查看。

https://i-blog.csdnimg.cn/blog_migrate/172cdbe800fba4e5d07c825a5cfbb644.png

(二)Linux 系统 TFTP 实验

TFTP(Trivial File Transfer Protocol, 简单文件传输协议)是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,常被用于开发测试使用。

TFTP 协议基于 UDP 协议,没有文件管理、用户控制功能。 TFTP 分为服务器端程序和客户端程序,在主机上通常同时配置有 TFTP 服务端和客户端。

华清远见开发环境中已经包含 tftp 服务,不必进行安装操作(安装操作可参阅相关网络介绍文章),直接进行此实验的测试部分。

1、启动tftp 服务器

华清远见Ubuntu中默认已开启了tftp 服务器,但为保险,请运行以下命令重启服务:

# service  tftpd-hpa  restart

https://i-blog.csdnimg.cn/blog_migrate/6a737f51a91ce8f342dc776873bf8e18.png

注:运行此命令时请切换至root用户。

2、tftp 服务器默认的根目录为 “/tftpboot”,切换至该目录,可见其中有一test文件,显示其内容为“This is a test file”(也可自建其它内容文件)。

https://i-blog.csdnimg.cn/blog_migrate/7bb1660efba87009e6e9a4e16c95b740.png

注:tftp 服务器的相关设置在“/etc/default/tftpd-hpa”文件中,如下图示。

https://i-blog.csdnimg.cn/blog_migrate/54f33fc0c2d7aa95f4483e0cdc5fc5ac.png

3、返回至用户目录,查看其中是否有test文件,如有,则删除之。

https://i-blog.csdnimg.cn/blog_migrate/4988870b6666c2d6666532aea42ea809.png

4、执行tftp客户端程序,从tftp服务器下载文件。

注:为测试方便,下面是从本机上进行测试的。

#tftp 127.0.0.1
> get test
>quit

https://i-blog.csdnimg.cn/blog_migrate/30a74e9212b0e31c744c22b989b8e446.png

可见 test 文件已经从 tftp 服务器中下载。显示其内容,并抓图如下:

https://i-blog.csdnimg.cn/blog_migrate/aa646e8fe39544392bb32d87d017b3b2.png

(三)Linux 系统配置 NFS 实验

NFS(Network File System) 方式类似于 windows 中的文件共享服务,是开发板通过 NFS 挂载放在主机(PC)上的根文件系统。此时在主机在文件系统中进行的操作同步反映在开发板上;反之,在开发板上进行的操作同步反映在主机中的根文件系统上。

https://i-blog.csdnimg.cn/blog_migrate/cae63fc65606dc91bfe85a5d8521f3de.png

主机需要配置两方面内容:设置 NFS 服务,允许“指定的 NFS 用户”使用。

具体操作步骤如下:

1、配置/etc/exports

命令:vi /etc/exports

NFS 允许挂载的目录及权限在文件/etc/exports 中进行了定义。例如,我们要将/source/rootfs 目录共享出来,那么我们需要在/etc/exports 文件末尾添加如下一行:

/source/rootfs *(rw,sync,no_root_squash,no_subtree_check)

特别提示:华清远见的开发环境中,该文件 12 行与上面的内容基本相同,但目录为“/source/nfs/rootfs”,请务必将 nfs 删除!!!否则会影响后面的操作!!删除后文件如下:

https://i-blog.csdnimg.cn/blog_migrate/f43a215c9aae0ef372f415d4cf4bb1ac.png

其中:/source/rootfs 是要共享的目录,*代表允许所有的网络段访问,rw 是可读写权限,sync 是资料同步写入内存和硬盘,no_root_squash 是 NFS 客户端分享目录使用者的权限,如果客户端使用的是 root 用户,那么对于该共享目录而言,该客户端就具有 root 权限。

2、重启服务:

# /etc/init.d/nfs-kernel-server restart

https://i-blog.csdnimg.cn/blog_migrate/f1bf5d09895ac3063026c0f7e5cca96d.png

(四)交叉开发环境搭建

所谓交叉开发是指先在一台通用 PC 上进行软件的编辑、编译与连接,然后下载到嵌入式设备中运行调试的开发过程。通用 PC 成为宿主机,嵌入式设备成为目标机。

1、配置开发环境网络

虚拟机网络方式为桥接模式,此状态下虚拟机下的操作系统和主机操作系统为平级状态。

https://i-blog.csdnimg.cn/blog_migrate/59185cdcad84ac85cea64f98a7947698.png

为了调试方便,我们可以给虚拟机下的 Ubuntu 一个静态的 IP 地址。

假设我们使用的网络地址为 192.168.100.x 段的,本实验中给 Ubuntu 分配一个静态 IP 为 192.168.100.192,配置过程如下所示。

(1)切换至 root,配置虚拟机网络环境。执行命令:

#sudo –s 
#vim /etc/network/interfaces

(2)修改文件如下图所示。保存退出。

https://i-blog.csdnimg.cn/blog_migrate/0b51dc7b79edcc33de78248ecae9d2ff.png

(3)应用网络修改:

# /etc/init.d/networking restart

https://i-blog.csdnimg.cn/blog_migrate/3de9e123e046bbef80c825bb06ee58d3.png

如上图所示表明 IP 修改成功。使用【ifconfig】命令查看我们修改的结果。如果没有修改成功,重复上述步骤,或者重新启动虚拟机 Ubuntu 系统即可。

(4)请将使用【ifconfig】命令查看结果抓图如下:

https://i-blog.csdnimg.cn/blog_migrate/70a50cdddeffe76d19e193cb9d06e130.png

2、配置交叉工具链

华清远见开发环境包含了 3 个版本的交叉工具链,路径在/usr/local/toolchain/下。系统已完成配置,可直接使用。

工具链的测试:在命令行输入以下命令进行测试:

# arm-linux-gcc -v

运行结果如下:

https://i-blog.csdnimg.cn/blog_migrate/0521b7a3cf292ca8c5658e4f8ac2bd27.png

3、拷贝相关文件

复制“D:\华清远见-嵌入式实验箱\开发平台 1\实验代码\2、Linux 移植驱动及应用\2、Linux 系统移植\实验代码\第一天\镜像”中的所有文件拷贝到共享目录 D:\share 下。通过共享目录将文件拷入 Ubuntu 系统。

https://i-blog.csdnimg.cn/blog_migrate/00ba01c5dfe7eb2bd2d25c52cd3da4d9.png

4、将共享目录中需要下载的文件拷贝到 tftp 目录中

拷贝 u-boot-fs4412.bin、uImage、exynos4412-fs4412.dtb 文件到虚拟机 Ubuntu 下的/tftpboot 目录下。

https://i-blog.csdnimg.cn/blog_migrate/74eb9dd9d996cbba2e558c563bf56d79.png

5、解压 nfs 文件系统

(1)拷贝 rootfs.tar.xz 文件到虚拟机 Ubuntu 下的/source 目录下。

# cp /mnt/hgfs/share/rootfs.tar.xz /source/

https://i-blog.csdnimg.cn/blog_migrate/9b8d2ca5d4cf8faf692743a26f201361.png

(2)解压该文件。

# cd /source 
# tar xvf rootfs.tar.xz 

https://i-blog.csdnimg.cn/blog_migrate/62b6b0d01f9aa6a960b27c39095edcfb.png

https://i-blog.csdnimg.cn/blog_migrate/251f0a5726b96d93fb337f57deecb759.png

6、连接开发板

https://i-blog.csdnimg.cn/blog_migrate/0ab85d2ee6bd99b3f269a761097cd0af.png

注意:串口连接的是串口 2。网线为实验箱自带的交叉线,连接时需将计算机上的网线拨掉。

7、设置串口调试工具

打开【D:\华清远见\开发平台 1\工具软件\Windows\串口调试工具\putty.exe】文件。

https://i-blog.csdnimg.cn/blog_migrate/09f9c785919aa105f07d35b74c90d36d.png

(1)选择串口(Serial)连接方式:

https://i-blog.csdnimg.cn/blog_migrate/612c2cd2456cdd37754cff022d3dc6a5.png

选中第一步方框内的 Serial,再点击第二步中的 Serial,进入串口设置的对话框:

(注:串口端口的设置,如 COM3,必须与系统中显示一致。下面的速度必须设为 115200)

https://i-blog.csdnimg.cn/blog_migrate/e574f44c0b89fa74c64b917fedfb40af.png

(2)点击 open 打开串口。

https://i-blog.csdnimg.cn/blog_migrate/c97f54ed42f3b42a8b9c839f7d1e5400.png

注:后面对开发板的命令,均在此窗口中输入。

8、启动开发板

开发板拨码开关拨至 0110,即采用 EMMC 方式启动,如下图所示。

https://i-blog.csdnimg.cn/blog_migrate/b005e49b367571142a3e7663ff2e8038.png

(1)启动开发板,在 putty 窗口中显示的倒计时结束前,按任意键停止在 Uboot 处,串口终端显示图下图所示。

https://i-blog.csdnimg.cn/blog_migrate/dd8d2eecec451f5bff7479a2b0243cd3.png

(2)键入命令,修改开发板环境变量(注:以下命令中,命令框内开头为【#】一般是需要在串口终端 putty 中对开发进行的操作,【$】一般是在虚拟机下对 Ubuntu 进行的操作,下面省略此说明。命令可以逐条复制到 putty 窗口中执行)。

# setenv serverip 192.168.100.192 //主机的 IP 地址,与上面设置的 Ubuntu IP 地址一致 
# setenv ipaddr 192.168.100.191 //板子的 IP,不要和 Windows 或 Ubuntu 冲突 
# saveenv //保存环境变量

使用【print】命令查看修改后的环境变量。

https://i-blog.csdnimg.cn/blog_migrate/11f875b901ce85bec017bcd94c6e90b7.png

(3)使用 ping 命令尝试 ping 一下 Ubuntu 主机,如下图所示,表示网络已经联通。

# ping 192.168.100.192

https://i-blog.csdnimg.cn/blog_migrate/4ea34a618a674934bf9dd09b5d33ca00.png

注:如果显示“not alive”,请按以下步骤重新设置:

(1)禁止虚拟机中 ubantu 的网络连接,操作如下:

https://i-blog.csdnimg.cn/blog_migrate/3026fe3e3681ca7292e330f603c63531.png

(2)重启网络

# /etc/init.d/networking restart 

(3)使用【ifconfig】命令查看结果本机地址是否正确(应为 192.168.100.192)。

(4)再次使用 ping 命令尝试 ping 一下 Ubuntu 主机。

# ping 192.168.100.192

9、制作 SD 卡启动盘

(1)复制文件

将“D:\华清远见-嵌入式\开发平台 1\烧写镜像\SD 卡启动制作工具”目录下的“sdfuse_q”拷贝到虚拟机 Ubuntu 的共享目录下。

https://i-blog.csdnimg.cn/blog_migrate/9b85d0a25b89c1653b389337fb7e4e91.png

(2)转至用户目录,将该文件夹复制到用户目录中。

命令为:cp /mnt/hgfs/share/sdfuse_q/ ~ -a

https://i-blog.csdnimg.cn/blog_migrate/88d65f5b62b95988c9fa883bbd33a874.png

(3)进入 sdfuse_q 目录

$ cd sdfuse_q //进入 sdfuse_q 目录
$ make //执行编译命令
$ chmod 777 *.sh

https://i-blog.csdnimg.cn/blog_migrate/1c8edfa72726b07e7e8f27c744bb90da.png

(4)用读卡器将 SD 卡插入电脑,虚拟机识别到 SD 读卡器。

https://i-blog.csdnimg.cn/blog_migrate/990fc8a69f77a3e4502fa5ba1d953f7f.png

右键点击图标,选择【连接】:

https://i-blog.csdnimg.cn/blog_migrate/e563c96d974355fa70c9316b4b2e01e4.png

注:也可用 fdisk –l 命令查看。

(6)将 uboot 烧写到 sd 卡中

$ sudo ./mkuboot.sh /dev/sdb1  
// uboot 烧写到 sd 卡中

https://i-blog.csdnimg.cn/blog_migrate/738c3b0c2de75499626049273fee4d00.png

(7)重新插入 SD 卡,在 SD 卡目录下创建目录 sdupdate,并将共享目录下 u-boot-fs4412.bin 拷贝到 sdupdate 目录下,这个操作在 windows 下或 Linux 下做都可以。

https://i-blog.csdnimg.cn/blog_migrate/acbd950ca01cad59b4ef6848eca88280.png

(8)将 SD 卡插入开发板 SD 卡槽内,拨码拨至 1000,连接开发板后,按照前节设置串口调试助手,设置完毕启动开发板。

https://i-blog.csdnimg.cn/blog_migrate/8f20b9c1864ca128f7e6c1883fd31880.png

(9)在倒计时时按任意键即可看到下图所示,即为 SD 卡启动成功。

https://i-blog.csdnimg.cn/blog_migrate/0d3513b313bb4f8eabcb8ecfc3ac5054.png

(10)在 uboot 命令行下,执行命令:

# sdfuse flashall 

https://i-blog.csdnimg.cn/blog_migrate/7dfae2c085d60485c9770177253359dc.png

(11)将拨码开关拨至 0110,重启开发板,如下图所示。

https://i-blog.csdnimg.cn/blog_migrate/5750a6afcc013d2fd82f49a9d8abc1b2.png

10、烧写 uboot

(1)在 uboot 命令行下,执行命令:(请将以下命令逐步复制到 putty 窗口执行)

# setenv serverip 192.168.100.192 //主机的 IP 地址,与前设置的 Ubuntu IP 地址一致 
# setenv ipaddr 192.168.100.191 //板子的 IP,不要和 Windows 或 Ubuntu 冲突 
# saveenv //保存环境变量
# ping 192.168.100.192 //请确保与主机联机正常
# tftp 40008000 u-boot-fs4412.bin 
# movi write u-boot 40008000 

https://i-blog.csdnimg.cn/blog_migrate/2d36c57ad92c620725b8dab0023f5968.png

(2)重启开发板,如下图所示。

https://i-blog.csdnimg.cn/blog_migrate/b9cdeabb584e806418a061d2faaa73a3.png

11、设置 nfs 挂载方式启动

(1)修改开发板环境变量(请将以下命令逐步复制到 putty 窗口执行)

# setenv gatewayip 192.168.100.1 
# setenv bootcmd tftp 41000000 uImage\; tftp 42000000 exynos4412-fs4412.dtb\; bootm 41000000 - 42000000 //此处和上文是一行内容,避免复制遗漏,结果参见下图
# setenv bootargs root=/dev/nfs nfsroot=192.168.100.192:/source/rootfs rw ip=192.168.100.191 init=/linuxrc console=ttySAC2,115200 //此处和上文是一行内容,避免复制遗漏 
#setenv fileaddr 41000000
#setenv filesize 80B00
# saveenv

https://i-blog.csdnimg.cn/blog_migrate/35e4fe36c65de7f178c2f43ae9231b1b.png

(2)重启开发板,如下图启动,表明内核从主机的/tftpboot 处下载,文件系统为 nfs 网络文件系统,位置为主机的/source/rootfs/处。

https://i-blog.csdnimg.cn/blog_migrate/5c290741744040047aa2b90999bf731b.png

https://i-blog.csdnimg.cn/blog_migrate/3122fa756eae2fbd0665cf4647a1fe2b.png

(3)在 Ubuntu 中,进入/source/rootfs 目录,比较其与开发板根目录中的文件,查看是否完全一致。

https://i-blog.csdnimg.cn/blog_migrate/5762b4fd808a9ca1a3de3991581355d8.png

(4)在 Ubuntu 的/source/rootfs 目录中,创建一个 hello.c 文件,用 arm-linux-gcc 进行编译,生成可执行文件。在开发板中运行,查看程序运行结果。

(5)在开发板中,使用“tftp 192.168.100.192 -gl test ”命令,从 Ubuntu 中下载文件

https://i-blog.csdnimg.cn/blog_migrate/bcb6444bacf5692f4ca657e941a24a4f.png

U-Boot 还提供了更加详细的命令帮助,可以通过”?”显示支持的命令列表,通过 help [CommandName]命令还可以查看每个命令的参数说明。

1、bootm

bootm [addr [arg …]]

  • boot application image stored in memory

passing arguments ‘arg …’; when booting a Linux kernel,

‘arg’ can be the address of an initrd image

bootm 命令可以引导启动存储在内存中的程序映像。这些内存包括 RAM 和可以永久保存的 Flash。

第 1 个参数 addr 是程序映像的地址,这个程序映像必须转换成 U-Boot 的格式。

第 2 个参数对于引导 Linux 内核有用,通常作为 U-Boot 格式的 RAMDISK 映像存储地址;也可以是传递给 Linux 内核的参数(缺省情况下传递 bootargs 环境变量给内核)。

附加说明: 要求二进制代码为制定格式的。通常为 mkimage 处理过的二进制文件。起动 UBOOT TOOLS 制作的压缩 LINUX 内核, bootm 3200000

2、bootp

bootp [loadAddress] [bootfilename]

bootp 命令通过 bootp 请求,要求 DHCP 服务器分配 IP 地址,然后通过 TFTP 协议下载指定的文件到内存。

第 1 个参数是下载文件存放的内存地址。

第 2 个参数是要下载的文件名称,这个文件应该在开发主机上准备好。

附加说明: 通过网络启动,需要提前设置好硬件地址 bdinfo 打印 ARM 相关信息

3、cmp

cmp [.b, .w, .l] addr1 addr2 count

  • compare memory

cmp 命令可以比较 2 块内存中的内容。.b 以字节为单位;.w 以字为单位;.l 以长字为单位。注意:cmp.b 中间不能保留空格,需要连续敲入命令。

第 1 个参数 addr1 是第一块内存的起始地址。

第 2 个参数 addr2 是第二块内存的起始地址。

第 3 个参数 count 是要比较的数目,单位按照字节、字或者长字。

4、cp

cp [.b, .w, .l] source target count

  • copy memory

cp 命令可以在内存中复制数据块,包括对 Flash 的读写操作。

第 1 个参数 source 是要复制的数据块起始地址。

第 2 个参数 target 是数据块要复制到的地址。这个地址如果在 Flash 中,那么会直接调用写 Flash 的函数操作。所以 U-Boot 写 Flash 就使用这个命令,当然需要先把对应 Flash 区域擦净。

第 3 个参数 count 是要复制的数目,根据 cp.b cp.w cp.l 分别以字节、字、长字为单位。

5、crc32

crc32 address count [addr]

  • compute CRC32 checksum [save at addr]

crc32 命令可以计算存储数据的校验和。

第 1 个参数 address 是需要校验的数据起始地址。

第 2 个参数 count 是要校验的数据字节数。

第 3 个参数 addr 用来指定保存结果的地址。

6、echo

echo [args…]

  • echo args to console; c suppresses newline

echo 命令回显参数。

用法:echo $( bootcmd)

7、erase

erase start end

  • erase FLASH from addr ‘start’ to addr ‘end’

erase N:SF[-SL]

  • erase sectors SF-SL in FLASH bank # N

erase bank N

  • erase FLASH bank # N

erase all

  • erase all FLASH banks

erase 命令可以擦 Flash。

参数必须指定 Flash 擦除的范围。

按照起始地址和结束地址,start 必须是擦除块的起始地址;end 必须是擦除末尾块的结束地址。这种方式最常用。举例说明:擦除 0x20000 – 0x3ffff 区域命令为 erase 20000 3ffff。

按照组和扇区,N 表示 Flash 的组号,SF 表示擦除起始扇区号,SL 表示擦除结束扇区号。另外,还可以擦除整个组,擦除组号为 N 的整个 Flash 组。擦除全部 Flash 只要给出一个 all 的参数即可。

用法:

写入数据之前必须先执行该命令

用法: erase 0xc******* +0xYYYYYYYY

说明: 擦除从 0xc******* 开始的 0xYYYYYYYY 字节(字节必须块对齐)

例:

Z228 # erase 0xc4040000 +0x180000

… done

Erased 24 sectors

附加: erase 1:0-2(就是对每一块 FLASH 的 0-2 扇区进行删除)

h. cp.b

拷贝数据,从指定源地址到目标地址,地址可以是 ram,也可以是 nor flash

用法: cp.b 0x******** 0x######## 0xYYYYYYYY

说明: 拷贝源 0x********到目标 0x########,共拷贝 0xYYYYYYY 字节

例:

Z228 # cp.b 0x200000 0xc4040000 0x180000

Copy to Flash… done

8、flinfo

flinfo

  • print information for all FLASH memory banks

flinfo N

  • print information for FLASH memory bank # N

flinfo 命令打印全部 Flash 组的信息,也可以只打印其中某个组。一般嵌入式系统的 Flash 只有一个组。

9、go

go addr [arg …]

  • start application at address ‘addr’

passing ‘arg’ as arguments

go 命令可以执行应用程序。

第 1 个参数是要执行程序的入口地址。

第 2 个可选参数是传递给程序的参数,可以不用。

10、iminfo

iminfo addr [addr …]

  • print header information for application image starting at

address ‘addr’ in memory; this includes verification of the

image contents (magic number, header and payload checksums)

iminfo 可以打印程序映像的开头信息,包含了映像内容的校验(序列号、头和校验和)。

第 1 个参数指定映像的起始地址。

可选的参数是指定更多的映像地址。

11、loadb

loadb [ off ] [ baud ]

  • load binary file over serial line with offset ‘off’ and baudrate ‘baud’

dKNLinux 联盟 loadb 命令可以通过串口 Kermit 协议下载二进制数据。

12、loads

loads [ off ]

  • load S-Record file over serial line with offset ‘off’

loads 命令可以通过串口线下载 S-Record 格式文件。

13、mw

mw [.b, .w, .l] address value [count]

  • write memory

dKNLinux 联盟 mw 命令可以按照字节、字、长字写内存,.b .w .l 的用法与 cp 命令相同。

第 1 个参数 address 是要写的内存地址。

第 2 个参数 value 是要写的值。

第 3 个可选参数 count 是要写单位值的数目。

用法: mw 32000000 ff 10000(把内存 0x32000000 开始的 0x10000 字节设为 0xFF)

14、nm

nm [.b, .w, .l] address

  • memory modify, read and keep address

nm 命令可以修改内存,可以按照字节、字、长字操作。

参数 address 是要读出并且修改的内存地址。

15、Md

显示内存区的内容。

16、Mm

读或修改内存,地址自动递增。

mm 内存地址 回车

此时进入内存查看 直接按回车 保持原内容不变,若要改变,在问号后面输入数值然后回车 按 . 此符号退出

17、nfs

nfs [loadAddress] [host ip addr:bootfilename]

nfs 命令可以使用 NFS 网络协议通过网络启动映像。

用法:

nfs 32000000 192.168.0.2:aa.txt

把 192.168.0.2(LINUX 的 NFS 文件系统)中的 NFS 文件系统中的 aa.txt 读入内存 0x32000000 处。

18、printenv

printenv

  • print values of all environment variables

printenv name …

  • print value of environment variable ‘name’

printenv 命令打印环境变量。

可以打印全部环境变量,也可以只打印参数中列出的环境变量。

19、protect

protect on start end

  • protect Flash from addr ‘start’ to addr ‘end’

protect on N:SF[-SL]

  • protect sectors SF-SL in Flash bank # N

protect on bank N

  • protect Flash bank # N

protect on all

  • protect all Flash banks

protect off start end

  • make Flash from addr ‘start’ to addr ‘end’ writable

protect off N:SF[-SL]

  • make sectors SF-SL writable in Flash bank # N

protect off bank N

  • make Flash bank # N writable

protect off all

  • make all Flash banks writable

protect 命令是对 Flash 写保护的操作,可以使能和解除写保护。

第 1 个参数 on 代表使能写保护;off 代表解除写保护。

第 2、3 参数是指定 Flash 写保护操作范围,跟擦除的方式相同。

用法:

protect on 1:0-3(就是对第一块 FLASH 的 0-3 扇区进行保护)

protect off 1:0-3 取消写保护

protect off bank 1 解除/使能 第 N 块 FLASH 的写保护

20、rarpboot

rarpboot [loadAddress] [bootfilename]

rarboot 命令可以使用 TFTP 协议通过网络启动映像。也就是把指定的文件下载到指定地址,然后执行。

第 1 个参数是映像文件下载到的内存地址。

第 2 个参数是要下载执行的映像文件。

21、run

run var […]

  • run the commands in the environment variable(s) ‘var’

run 命令可以执行环境变量中的命令,后面参数可以跟几个环境变量名。

用法:

Uboot> setenv flashit tftp 20000000 mycode.bin; erase 10020000 1002FFFF;

cp.b 20000000 10020000 8000

Uboot> saveenv

Uboot> run flashit

22、setenv

setenv name value …

  • set environment variable ‘name’ to ‘value …’

setenv name

  • delete environment variable ‘name’

setenv 命令可以设置环境变量。

第 1 个参数是环境变量的名称。

第 2 个参数是要设置的值,如果没有第 2 个参数,表示删除这个环境变量。

用法:

Uboot> setenv myboard AT91RM9200DK

Uboot> printenv

baudrate=115200

ipaddr=192.168.1.1

ethaddr=12:34:56:78:9A:BC

serverip=192.168.1.5

myboard=AT91RM9200DK

Environment size: 102/8188 bytes

23、Saveenv

保存环境变量

命令将当前定义的所有的变量及其值存入 flash 中。用来存储变量及其值的空间只有 8k 字节,应不要超过。

24、sleep

sleep N

  • delay execution for N seconds (N is decimal !!!)

sleep 命令可以延迟 N 秒钟执行,N 为十进制数。

25、tftpboot

tftpboot [loadAddress] [bootfilename]

tftpboot 命令可以使用 TFTP 协议通过网络下载文件。按照二进制文件格式下载。另外使用这个命令,必须配置好相关的环境变量。例如 serverip 和 ipaddr。

第 1 个参数 loadAddress 是下载到的内存地址。

第 2 个参数是要下载的文件名称,必须放在 TFTP 服务器相应的目录下。

26、ping

注:只能开发板 PING 别的机器

27、usb

usb start: 起动 usb 功能

usb info: 列出设备

usb scan: 扫描 usb storage(u 盘)设备

28、kgo

起动没有压缩的 linux 内核

kgo 32000000

29、fatls

列出 DOS FAT 文件系统

fatls usb 0 列出第一块 U 盘中的文件

30、fatload

读入 FAT 中的一个文件

fatload usb 0:0 32000000 aa.txt 把 USB 中的 aa.txt 读到物理内存 0x32000000 处!