搭建petalinux开发环境

1. 安装Ubuntu虚拟机

在vm虚拟机12.0上建立Ubuntu的虚拟机,配置为单核单cpu,1G内存,下载ubuntu14.4的安装镜像文件.

2. 启动虚拟机进行简易安装

3. 安装完成后首先更新软件应用程序

4. 更新完成后需要开启root用户

开启方法为:

  • 终端输入sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
  • 回车了之后,部分童鞋可能会提示输入密码,需要注意的是,输入的密码并不可见,所以别输入错了,当然输错了可以再次输入的。输入密码了之后,会弹出如图示的编辑框。
  • 在弹出的编辑框里增加一行:greeter-show-manual-login=true 保存关闭。
  • 关闭之后,回到终端窗口,输入:sudo passwd root 回车;回车之后会要你输入两次密码,出现已成功更新密码字样即为成功。
  • 然后关机重启,
  • 重启完成后,可以看到原来普通用户下面多出了一个登录框,直接用户名输入root,密码输入刚刚设置的密码,既可以成功登陆

5. 安装Vmware Tools菜单

Root用户登录后点击虚拟机工具栏的安装Vmware Tools菜单,并在虚拟机中拷贝安装光盘中的VMwareTools-10.0.0-2977863.tar.gz文件到桌面路径,并在终端进入桌面路径,输入以下命令解压该压缩包:

 tar -xvzf VMwareTools-10.0.0-2977863.tar.gz;

解压完成后,进入解压路径,并执行安装脚本进行安装 .

7. 安装petalinux开发包

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 工具库名称” .注意: 该安装必须联网

8. Tftp服务器安装和配置:

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 //退出

12. 配置默认shell

默认情况下Ubuntu的shell是dash,可通过以下命令查看: ls -al /bin/sh,如需切换回bash,可通过以下操作实现: sudo dpkg-reconfigure dash,提示选择时,选择No,再次查看,确保默认shell设置为bash,ug1144文档中15页也提供了修改方法,但未测试。(dash 比 bash 更轻,更快。但 bash 却更常用。如果一些命令、脚本等总不能正常执行,有可能是 dash 的原因。比如编译 Android 源代码的时候,如果使用 dash,则有可能编译出错,或者编译的系统不能启动)

13. 配置PetaLinux工作环境

输入以下命令配置PetaLinux工作环境:source /settings.sh。
检查环境是否配置成功:

echo $PETALINUX
/opt/petalinux-v2016.2-final #显示这个表示配置成功。

14. 创建工程

需要准备 vivado导出的hdf硬件描述文件和根据此文件生产的fsbl.

创建工程:

在工程根目录下执行petalinux-create --type project --template zynq --name xxx7z020

导入硬件描述文件:

指定硬件描述文件路径,并导入,需要进入工程目录:
petalinux-config --get-hw-description=/opt/pjt_dir/xxx7z020/hw-description/

15. 配置工程

执行以上操作后自动打开配置界面,如需要重新配置,输入: petalinux-config
以下3条命令分别用来单独配置u-boot/内核/文件系统,配置项更详细.

petalinux-config -c u-boot
petalinux-config -c kernel
petalinux-config -c rootfs
petalinux-config -c Device tree

16. Flash启动方式配置:

取消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		

17. 编译:

petalinux-build //编译所有文件
petalinux-build -c u-boot //只编译uboot

18. Flash方式启动烧写文件生成:

根据上节配置并生成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模式,更改启动模式重新烧写,或按复位键后,马上点击下载按钮,也可正常烧写。

19. EMMC分区格式化

系统启动成功后输入用户名: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

20. 通过ftp浏览器连接板卡:

推荐使用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 *”增加执行权限

21. 网络引导方式配置

◆前提: 成功安装并配置好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端加载内核和文件系统等启动所需文件.

22. QSPI+EMMC启动方式配置:

由于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命令行,再进行烧写。
◆ 烧写完成后重新启动。

23. QSPI+EMMC启动方式下将bit流放在emmc第一个分区加载的配置:

◆ 打开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并重新启动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值