赞
踩
在vm虚拟机12.0上建立Ubuntu的虚拟机,配置为单核单cpu,1G内存,下载ubuntu14.4的安装镜像文件.
开启方法为:
Root用户登录后点击虚拟机工具栏的安装Vmware Tools菜单,并在虚拟机中拷贝安装光盘中的VMwareTools-10.0.0-2977863.tar.gz文件到桌面路径,并在终端进入桌面路径,输入以下命令解压该压缩包:
tar -xvzf VMwareTools-10.0.0-2977863.tar.gz;
解压完成后,进入解压路径,并执行安装脚本进行安装 .
root用户登录后,拷贝petalinux-v2016.2-final-installer.run安装包到/opt目录,并在终端进入opt目录,输入:
./ petalinux-v2016.2-final-installer.run /opt
开始安装petalinux开发包.
安装过程中提示几个协议,输入Enter后开始阅读,之后输入q退出,并输入y同意条款.
安装过程中提示缺少一些工具库等,需要查阅UG1144文档的第9和10页,查到完整名称后,输入以下命令进行安装:
” apt-get install 工具库名称” .注意: 该安装必须联网
a) 安装
$ sudo apt-get install xinetd tftpd tftp #需联网
b) 建立目录
$ sudo mkdir /tftpboot # 这是建立tftp传输目录,一般放在根目录。
$ sudo chmod 0777 /tftpboot
c) 配置
$ sudo vi /etc/xinetd.d/tftp 创建并编辑该文件内容如下:
service tftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = /tftpboot
disable = no
}
d) 启动tftp服务
$ sudo service xinetd restart # 启动服务
e) 测试
$ tftp 127.0.0.1 //连接
tftp>get test.txt //获取远端tftp目录下的一个文件到当前路径
tftp>put test1.txt//弹出当前路径下的文件到远端tftp目录
tftp>q //退出
默认情况下Ubuntu的shell是dash,可通过以下命令查看: ls -al /bin/sh,如需切换回bash,可通过以下操作实现: sudo dpkg-reconfigure dash,提示选择时,选择No,再次查看,确保默认shell设置为bash,ug1144文档中15页也提供了修改方法,但未测试。(dash 比 bash 更轻,更快。但 bash 却更常用。如果一些命令、脚本等总不能正常执行,有可能是 dash 的原因。比如编译 Android 源代码的时候,如果使用 dash,则有可能编译出错,或者编译的系统不能启动)
输入以下命令配置PetaLinux工作环境:source /settings.sh。
检查环境是否配置成功:
echo $PETALINUX
/opt/petalinux-v2016.2-final #显示这个表示配置成功。
需要准备 vivado导出的hdf硬件描述文件和根据此文件生产的fsbl.
在工程根目录下执行petalinux-create --type project --template zynq --name xxx7z020
指定硬件描述文件路径,并导入,需要进入工程目录:
petalinux-config --get-hw-description=/opt/pjt_dir/xxx7z020/hw-description/
执行以上操作后自动打开配置界面,如需要重新配置,输入: petalinux-config
以下3条命令分别用来单独配置u-boot/内核/文件系统,配置项更详细.
petalinux-config -c u-boot
petalinux-config -c kernel
petalinux-config -c rootfs
petalinux-config -c Device tree
取消fsbl部分:linux Components Selection —> [ ] First Stage Bootloader
修改flash启动配置参数:
-*- Subsystem AUTO Hardware Settings ---> Advanced bootable images storage Settings ---> boot image settings ---> image storage media (primary flash) kernel image settings ---> image storage media (primary flash) jffs2 rootfs image settings ---> (rootfs.cpio) image name dtb image settings ---> image storage media (primary flash) Flash Settings ---> *** partition 0 *** (boot) name (0x470000) size *** partition 1 *** (bootenv) name (0x20000) size *** partition 2 *** (kernel) name (0x5E0000) size *** partition 3 *** (dtb) name (0x4000) size *** partition 4 *** (jffs2) name (0x520000) size *** partition 5 *** (spare) name (0x0) size *** partition 6 *** () name
petalinux-build //编译所有文件
petalinux-build -c u-boot //只编译uboot
根据上节配置并生成uboot、内核、文件系统、设备树。另外fsbl需要在SDK中生成,根据以下bif文件指定地址生成烧写文件boot.bin:
//arch = zynq; split = false; format = BIN
the_ROM_image:
{
[bootloader]C:\Users\penguin\Desktop\work_vivado\h_zynq7020\h_zynq7020.sdk\fsbl\Debug\fsbl.elf
C:\Users\penguin\Desktop\work_vivado\h_zynq7020\h_zynq7020.runs\impl_1\zynq7020_design_1_wrapper.bit
C:\Users\penguin\Desktop\work_vivado\h_zynq7020\h_zynq7020.sdk\output\u-boot.elf
[offset = 0x490000, startup = 0]C:\Users\penguin\Desktop\work_vivado\h_zynq7020\h_zynq7020.sdk\output\image.ub
[offset = 0xA70000, startup = 0]C:\Users\penguin\Desktop\work_vivado\h_zynq7020\h_zynq7020.sdk\output\system.dtb
[offset = 0xA74000, startup = 0]C:\Users\penguin\Desktop\work_vivado\h_zynq7020\h_zynq7020.sdk\output\rootfs.cpio
}
注意:对于带linux操作系统的项目必须将逻辑编译后一并打包,否则可能启动异常。
最后,在sdk中连接仿真器,执行flash烧写命令,如烧写失败,可能是7020启动模式配置不是jtag模式,更改启动模式重新烧写,或按复位键后,马上点击下载按钮,也可正常烧写。
系统启动成功后输入用户名:root密码:root,输入fdisk –l 观察是否识别emmc,例如:
root@PPeta:/mnt# fdisk -l
Disk /dev/mmcblk0: 3783 MB, 3783262208 bytes
之后对emmc进行分区创建第一个分区128MByte
“fdisk /dev/ mmcblk0”—运行分区命令
“ n”----新建分区
“ p”----选择分区类型为主分区
“ 1”----选择新建第1个分区
分区1起始扇区号采用默认值
分区1结束扇区号输入:+128M,即表示创建128M大小的分区
“ w”-----保存分区表
创建第二个分区约3GByte
“fdisk /dev/ mmcblk0” —运行分区命令
“ n” ----新建分区
“ p” ----选择分区类型为主分区
“ 2” ----选择新建第2个分区
分区2起始扇区号采用默认值
分区2结束扇区号采用默认值,分配所有剩余空间
“ w” -----保存分区表
格式化分区1为FAT32分区格式
“mkdosfs /dev/mmcblk0p1”
格式化分区2为ext4分区格式
“mkfs.ext4 /dev/ mmcblk0p2”
检查是否分区成功
“fdisk -l /dev/ mmcblk0”
注意:首次烧写的文件系统比较精简,可能不带有mkfs.ext4的分区工具,具体处理方法为:
连接上位机与板卡网络接口,检查板卡ip地址:
Ifconfig
推荐使用FlashFXP进行连接
增加mkfs.ext4命令:
在Petalinux工程目录下查找到Project_dir/build/linux/rootfs/targetroot/sbin/mkfs.ext4(如果不存在,可能文件系统未配置,需对文件系统进行配置,并重新编译),通过FTP工具拷贝到板卡文件系统的/sbin目录,板卡默认FTP文件存放路径为”/var/ftp/”。另外依赖库需要将Project_dir/build/linux/rootfs/targetroot/lib目录下除了文件夹以外的文件打包为一个压缩包:lib.tar.gz(打包命令为:”tar cvf lib.tar.gz *”),大小约为1.8M,将该压缩包通过FTP拷贝到板卡文件系统的/lib目录,并在/lib目录运行:tar xvf lib.tar.gz命令,解压所有库文件。
注意:如拷贝后mkfs.ext4仍不能正常运行,则需要在/sbin目录运行”chmod 777 *”增加执行权限
◆前提: 成功安装并配置好tftp服务.
◆petalinux-config进入配置菜单Subsystem AUTO Hardware Settings —> Ethernet Settings —> [ ] Obtain IP address automatically//手动配置ip地址:
(192.168.1.105) Static IP address//确保与虚拟机地址在同一网段
(255.255.255.0) Static IP netmask
(192.168.1.1) Static IP gateway
◆返回主配置菜单: u-boot Configuration —> (192.168.1.129) TFTP Server IP address配置tftp服务器IP地址.
◆重新编译并下载uboot
◆连接网线,uboot启动后输入run netboot 就从tftp端加载内核和文件系统等启动所需文件.
由于QSPI FLASH容量受限,因此只能烧写精简版的操作系统,且不方便修改,因此推荐采用QSPI(fsbl+bit stream+uboot)+EMMC(内核+设备树+文件系统)的启动加载方式。具体配置如下:
◆ 取消fsbl部分:linux Components Selection —> [ ] First Stage Bootloader
修改flash启动配置参数:
-*- Subsystem AUTO Hardware Settings ---> Advanced bootable images storage Settings ---> boot image settings ---> image storage media (primary flash) kernel image settings ---> image storage media (primary sd) jffs2 rootfs image settings ---> (manual) dtb image settings ---> image storage media (primary sd) Flash Settings ---> *** partition 0 *** (boot) name (0x500000) size *** partition 1 *** (bootenv) name (0x20000) size *** partition 2 *** (spare) name (0x0) size *** partition 3 *** () name Image Packaging Configuration ---> Root filesystem type (SD card) (/dev/mmcblk0p2) Device node of SD device
◆ 编译工程
◆ 按上文介绍的分区方法对EMMC进行分区,并将编译生成的文件:
image.ub(内核在pjt_dir/ images/linux/)
system.dtb(设备树在pjt_dir/ images/linux/)
拷贝到EMMC的第一个128M的FAT32分区,完成后输入“sync”命令进行同步
◆ 在虚拟机命令行进入:/pjt_dir/build/linux/rootfs/targetroot目录,使用命令“tar cvf rootfs.tar.gz *”打包该文件系统。并通过ftp拷贝到板卡EMMC第二个linux分区(需格式化为ext2/ext3/ext4分区格式),通过命令“tar xvf rootfs.tar.gz”解包,解包完成后输入“sync”命令进行同步。
注意:petalinux启动后默认对emmc所有分区进行自动挂载,通过命令“df”,可查看当前所有挂载设备路径,如未自动挂载可进行手动挂载(eg: “mount /dev/mmcblk0p2”)
格式化操作,需先对目标分区进行卸载(eg: “umount /dev/mmcblk0p2”)
◆ 将以下文件按顺序打包成BOOT.BIN烧写文件,并烧写入QSPI Flash:
①fsbl(sdk生成)、
②比特流(vivao生成,对于带linux操作系统的项目必须将逻辑编译后一并打包,否则可能启动异常。)、
③uboot.elf(编译生成的路径在pjt_dir/ images/linux/)
注意:如系统启动异常将不能正常连接仿真器,可断电重启,并在uboot启动时不断敲回车键,让系统进行uboot命令行,再进行烧写。
◆ 烧写完成后重新启动。
◆ 打开pjt_dir/subsystems/linux/configs/u-boot/目录.
◆ 拷贝platform-auto.h文件中的CONFIG_EXTRA_ENV_SETTINGS块到platform-top.h文件
◆ 在platform-top.h文件中添加以下标黄的语句:
/* Extra U-Boot Env settings */ #define CONFIG_EXTRA_ENV_SETTINGS \ SERIAL_MULTI \ CONSOLE_ARG \ PSSERIAL0 \ "loadbit_addr=0x100000\0" \ "bitstream_image=system.bit.bin\0" \ "mmc_loadbit_fat=echo Loading bitstream from media to RAM..; && mmcinfo && fatload mmc 0 ${loadbit_addr} ${bitstream_image} && fpga load 0 ${loadbit_addr} ${filesize}\0" \ "nc=setenv stdout nc;setenv stdin nc;\0" \ "ethaddr=00:0a:35:00:1e:53\0" \ "sdboot=echo boot Petalinux; mmcinfo && run mmc_loadbit_fat && fatload mmc 0 ${netstart} ${kernel_img} && bootm \0" \ "autoload=no\0" \ "clobstart=0x10000000\0" \ "netstart=0x10000000\0" \ "dtbnetstart=0x11800000\0" \ "loadaddr=0x10000000\0" \ "bootsize=0x500000\0" \ "bootstart=0x0\0" \ "boot_img=BOOT.BIN\0" \ "load_boot=tftpboot ${clobstart} ${boot_img}\0" \ "update_boot=setenv img boot; setenv psize ${bootsize}; setenv installcmd \"install_boot\"; run load_boot test_img; setenv img; setenv psize; setenv installcmd\0" \ "sd_update_boot=echo Updating boot from SD; mmcinfo && fatload mmc 0:1 ${clobstart} ${boot_img} && run install_boot\0" \ "install_boot=sf probe 0 && sf erase ${bootstart} ${bootsize} && " \ "sf write ${clobstart} ${bootstart} ${filesize}\0" \ "bootenvsize=0x20000\0" \ "bootenvstart=0x500000\0" \ "eraseenv=sf probe 0 && sf erase ${bootenvstart} ${bootenvsize}\0" \ "kernel_img=image.ub\0" \ "load_kernel=tftpboot ${clobstart} ${kernel_img}\0" \ "update_kernel=setenv img kernel; setenv psize ${kernelsize}; setenv installcmd \"install_kernel\"; run load_kernel ${installcmd}; setenv img; setenv psize; setenv installcmd\0" \ "install_kernel=mmcinfo && fatwrite mmc 0 ${clobstart} ${kernel_img} ${filesize}\0" \ "cp_kernel2ram=mmcinfo && fatload mmc 0 ${netstart} ${kernel_img}\0" \ "dtb_img=system.dtb\0" \ "load_dtb=tftpboot ${clobstart} ${dtb_img}\0" \ "update_dtb=setenv img dtb; setenv psize ${dtbsize}; setenv installcmd \"install_dtb\"; run load_dtb ${installcmd}; setenv img; setenv psize; setenv installcmd\0" \ "install_dtb=mmcinfo && fatwrite mmc 0 ${clobstart} ${dtb_img} ${filesize}\0" \ "cp_dtb2ram=mmcinfo && fatload mmc 0:1 ${dtbnetstart} ${dtb_img}\0" \ "fault=echo ${img} image size is greater than allocated place - partition ${img} is NOT UPDATED\0" \ "test_crc=if imi ${clobstart}; then run test_img; else echo ${img} Bad CRC - ${img} is NOT UPDATED; fi\0" \ "test_img=setenv var \"if test ${filesize} -gt ${psize}\\; then run fault\\; else run ${installcmd}\\; fi\"; run var; setenv var\0" \ "netboot=tftpboot ${netstart} ${kernel_img} && bootm\0" \ "default_bootcmd=run sdboot\0" \ ""
◆ 在工程目录执行:petalinux-build -c u-boot编译uboot。
◆ 在sdk下打包并生成boot.bin flash烧写文件,只包含fsbl和uboot
◆ 在vivado命令窗口执行命令,生成uboot可加载的bit流格式。注意文件路径为反斜杠:
write_cfgmem -format bin -interface spix1 -loadbit “up 0x0 “ -file -force
eg:
write_cfgmem -format bin -interface spix1 -loadbit “up 0x0 <C:\Users\xxx\Desktop\PenguinPeta\PenguinPeta.runs\impl_1\penguin_peta_wrapper.bit> -file <C:\Users\xxx\Desktop\PenguinPeta\PenguinPeta.runs\impl_1\system.bit.bin> -force
◆ 在串口终端输入:tftp -gr system.bit.bin 192.168.1.129命令,从tftp服务器获取bit文件,并拷贝到emmc第一个fat32分区。
◆ 烧写QSPI FLASH并重新启动。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。