ZYNQ系统移植

-----------------------------------------fsbl.elf

-----------------------------------------zynq_top.bit

-----------------------------------------uboot.elf
配置
/configs 下添加板子的配置文件 *_defconfig
/arch/arm/dts 下添加板子的设备树文件 *.dts
/board/xilinx/zynq 下添加板子的对应的文件夹,如zynq-zc704

编译
make ARCH=arm CROSS_COMPILE=arm-none-eabi- distclean
make ARCH=arm CROSS_COMPILE=arm-none-eabi- zynq_zc704_defconfig
#make ARCH=arm CROSS_COMPILE=arm-none-eabi- menuconfig
make ARCH=arm CROSS_COMPILE=arm-none-eabi- -j4 

---命令 //uboot命令中的数字都是十六进制
?/help 查看当前uboot支持的命令
---信息查询命令
1.bdinfo 查看板子信息
2.printenv 输出环境变量信息
3.version 查看uboot的版本号
---环境变量操作命令
1.setenv 命令 值   -可新建(setenv 命令 值),删除(setenv 命令)
2.saveenv
---内存操作命令
1.md 显示内存值
命令格式:md[.b,.w,.l] address [#of objects]
命令中[.b,.w,.l]对应byte、word和long,也就是分别以1个字节、2个字节、4个字节来显示内存值。addrres就是要查看的内存起始地址,[#of objects]表示要查看数据的长度,这个数据长度单位不是字节,而是跟所选择的显示格式有关。比如设置为20,如果显示格式是.b,则表示显示20个字节;如果是显示格式为.w的话就表示20个word,也就是20*2=40个字节。
例:Zynq> md.b 80000000 14
2.nm 修改指定地址的内存值
命令格式:nm[.b,.w,.l] address
例:Zynq> nm.l 8000000
    08000000: 5bfeebfd ? 12345678    //输入要修改的数据
    08000000: 12345678 ? q    //输入q退出
    Zynq>
修改完后使用md来查看一下有没有修改成功,如下:
    Zynq> md.l 8000000 1
    08000000: 12345678
    Zynq>
3.mm 修改指定地址的内存值,使用mm修改内存值的时候地址会自增,而使用命令nm的话地址不会自增。
4.mw 用于使用一个指定的数据填充一段内存
命令格式:mw[.b,.w,.l] address value [count]
mw命令同样可以以.b、.w和.l来指定操作格式,address表示要填充的内存起始地址,value为要填充的数据,count是填充的长度。比如使用.l格式将以0X8000000为起始地址的0x10个内存块(0x10 * 4=64字节)填充为0X0A0A0A0A,命令如下:
 mw.l 8000000 0A0A0A0A0A 10
5.cp 用于将DRAM中的数据从一段内存拷贝到另一段内存中
命令格式:cp[.b,.w,.l] source target count
cp命令同样可以以.b、.w和.l来指定操作格式,source为源地址,target为目的地址,count为拷贝的长度。我们使用.l格式将0x8000000处的地址拷贝到0X8000100处,长度为0x10个内存块(0x10 * 4=64个字节),命令如下所示:
 cp.l 8000000 8000100 10
6.cmp 用于比较两段内存的数据是否相等
命令格式:cmp[.b,.w,.l] addr1 addr2 count
cmp命令同样可以以.b、.w和.l来指定操作格式,addr1为第一段内存首地址,addr2为第二段内存首地址,count为要比较的长度。我们使用.l格式来比较0x8000000和0X8000100这两个地址数据是否相等,比较长度为0x10个内存块(16 * 4=64个字节),命令如下所示:
cmp.l 8000000 8000100 10
---网络操作命令
setenv ipaddr 192.168.1.155 开发板ip地址,可以不设置,使用dhcp命令来从路由器获取IP地址
setenv ethaddr 00:0a:35:00:1e:53 开发板的MAC地址,一定要设置
setenv gatewayip 192.168.1.1 网关地址
setenv netmask 255.255.255.0 子网掩码
setenv serverip 192.168.1.151 服务器IP地址,也就是Ubuntu主机地址,用于调试代码
saveenv
1.ping 开发板的网络是否能使用,是否可以和服务器进行通信
2.dhcp 用于从路由器获取IP地址,前提是开发板连接到路由器
3.nfs 网络文件系统,通过nfs可以在计算机之间通过网络来分享资源
命令格式:nfs [loadAddress] [[hostIPaddr:]bootfilename]
loadAddress是要保存的DRAM地址,[[hostIPaddr:]bootfilename]是要下载的文件地址。
 nfs 00000000 192.168.1.151:/home/zynq/linux/nfs/zImage
4.tftpboot 用于通过网络下载文件到DRAM中,只是tftpboot命令使用的时TFTP协议,Ubuntu主机作为TFTP服务器
命令格式:tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
看起来和nfs命令格式一样的,loadAddress是文件在DRAM中的存放地址,[[hostIPaddr:]bootfilename]是要从Ubuntu中下载的文件。但是和nfs命令的区别在于,tftpboot命令不需要输入文件在Ubuntu中的完整路径,只需要输入文件名即可。比如我们现在将tftpboot文件夹里面的zImage文件下载到开发板DRAM的0x00000000地址处,命令如下:
 tftpboot 00000000 zImage
---EMMC和SD卡操作命令
mmc info 输出MMC设备信息
mmc read 读取MMC中数据
mmc write 向MMC设备写入数据
mmc erase 擦除MMC中的数据
mmc recan 扫描MMC设备
mmc part 列出MMC设备分区
mmc dev 切换MMC设备
mmc list 列出当前有效的所有MMC设备
mmc hwparttion 设置MMC设备分区
mmc setdsr 设置DSR寄存器的值
---FAT格式文件系统操作命令
1.fatinfo 用于查询指定MMC指定分区的文件系统信息
命令格式:fatinfo <interface> [<dev[:part]>]
interface表示接口,比如mmc,dev是查询的设备号,part是要查询的分区。比如我们要查询SD卡分区1的文件系统信息,命令如下:
 fatinfo mmc 0:1
2.fatls 用于查询FAT格式设备的目录和文件信息
命令格式:fatls <interface> [<dev[:part]>] [directory]
interface是要查询的接口,比如mmc,dev是要查询的设备号,part是要查询的分区,directory是要查询的目录。比如查询SD卡分区1中的所有的目录和文件,输入命令:
 fatls mmc 0:1
3.fstype 用于查看MMC设备某个分区的文件系统格式
命令格式:fstype <interface> <dev>:<part>
 fstype mmc 0:1
4.fatload 用于将指定的文件读取到DRAM中
命令格式:fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]
interface为接口,比如mmc,dev是设备号,part是分区,addr是保存在DRAM中的起始地址,filename是要读取的文件名字。bytes表示读取多少字节的数据,如果bytes为0或者省略的话表示读取整个文件。pos是要读的文件相对于文件首地址的偏移,如果为0或者省略的话表示从文件首地址开始读取。我们将SD卡分区1中的BOOT.BIN文件读取到DRAM中的0X00000000地址处,命令如下:
 fatload mmc 0:1 00000000 BOOT.BIN
5.fatwrite 用于将DRAM中的数据写入到MMC设备中
命令格式:fatwrite <interface> <dev[:part]> <addr> <filename> <bytes>
interface为接口,比如mmc,dev是设备号,part是分区,addr是要写入的数据在DRAM中的起始地址,filename是写入的数据文件名字,bytes表示要写入多少字节的数据。我们可以通过fatwrite命令在uboot中更新linux镜像文件和设备树。
<1>使用命令tftpboot将image.ub镜像文件下载到DRAM的0X00000000地址处,命令如下: 
 tftpboot 00000000 image.ub 
<2>image.ub大小为4359168(0x428400)个字节,接下来使用命令fatwrite将其写入到SD卡的分区1中,文件名字为image.ub,命令如下: 
 fatwrite mmc 0:1 00000000 image.ub 0x428400
<3>完成以后使用“fatls”命令查看一下SD卡分区1里面的文件,命令如下:
 fatls mmc 0:1
---EXT格式文件系统操作命令
uboot有ext2和ext4这两种格式的文件系统的操作命令,常用的就四个命令,分别为:ext2load、ext2ls、ext4load、ext4ls和ext4write。这些命令的含义和使用与fatload、fatls和fatwrit一样,只是ext2和ext4都是针对ext文件系统的。比如ext4ls命令,SD卡的分区2就是ext4格式的,使用ext4ls就可以查询SD卡的分区2中的文件和目录,输入命令:
 ext4ls mmc 0:2
---系统引导命令
1.bootm 用于启动在内存中的用的mkimage工具处理过的内核镜像
命令格式:bootm addr
addr是内核镜像在DRAM中的首地址
2. bootz 与bootm功能类似,只是bootz命令用于启动zImage镜像文件
命令格式:bootz [addr[initrd[:size]][fdt]]
命令bootz有三个参数,addr是Linux zImage镜像文件在DRAM中的位置,initrd是initrd文件在DRAM中的地址,这个其实就是前面给大家提到的INITRAM根文件系统的在内存中的地址,如果不使用initrd的话使用‘-’代替即可,fdt就是设备树文件在DRAM中的地址。
使用tftpboot命令将zImage下载到DRAM的0x00000000地址处,然后将设备树system.dtb下载到DRAM中的0x05000000地址处,最后使用命令bootz启动,命令如下: 
tftpboot 00000000 zImage 
tftpboot 05000000 system.dtb 
bootz 00000000 - 05000000
3.boot 也是用来启动linux系统,只是boot会读取环境变量bootcmd来启动linux系统,bootcmd是一个很重要的环境变量
比如我们要想使用tftpboot命令从网络启动Linux那么就可以设置bootcmd为“tftpboot 10000000 image.ub;bootm”,然后使用saveenv将bootcmd保存起来。然后直接输入boot命令即可从网络启动Linux系统,命令如下:
setenv bootcmd ‘tftpboot 10000000 image.ub;bootm’
boot
---其他常用命令
1.reset 复位重启
2.run 用于运行环境变量中定义的命令
比如可以通过“run bootcmd”来运行bootcmd中的启动命令。我们在讲解bootm命令时就使用过“run netboot”命令以使用tftp网络协议下载linux镜像并启动。 run命令运行环境变量,那么其实就是解析环境变量,将变量的内容解析出来,如果是变量的内容是可执行的命令那么就运行此命令,所以不是什么环境变量都可以使用run来运行的,必须要求该变量的内容是可执行的命令或其它可运行的逻辑语句。 常用的逻辑语句也就是if...then...else等。
3.mtest 一个简单的内存读写测试命令
可以用来测试自己开发板上的DDR,命令格式如下: 
mtest [start [end [pattern [iterations]]]]
start是要测试的DRAM开始地址,end是结束地址,比如我们测试0X00000000~0X00001000这段内存,输入“mtest 00000000 00001000”
-----------------------------------------linux

-----------------------------------------rootfs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值