我的环境是Windows10+WSL2+Petalinux,不想搞一套Ubuntu的独立系统。关于如何搭建,可以参考我的另外一个笔记。
在windows开始菜单右边的搜索框里输入ubuntu或wsl,或者powershell里面输入bash,根据自己喜好选择
1,创建工程
先source petalinux的设置脚本
$source /opt/Xilinx/p201/settings.sh
以模板创建空工程,或者以BSP来创建工程。我这里用Xilinx ZCU104开发板,用104的BSP建工程。详细见UG1157
$petalinux-create -t project -s /opt/xilinx/p201/bsp/z104.bsp
- 导入硬件XSA文件,2019.1以前是HDF文件,配置一下uart,sd,ethernet
$petalinux-config –get-hw-description=../
默认以太网是打开dhcp client的,如果没有,建议打开,每退出一层菜单,需要连续按两次ESC键,配置完,退出最后菜单时候,提示保存配置,选YES
配置rootfs,这里我们把python选上
$petalinux-config -c rootfs
配置内核
记得提前打开Xlaunch,因为配置内核的时候会调用gnome-terminal打开窗口
$petalinux-config -c kernel
$petalinux-build
由于用的是BSP创建工程,我们早期修改安装目录的petalinuxbsp.conf里面的DL_DIR,SSTATE_DIR不会被传递过来,这个国内网络有时可能要个把小时不止,马上终止掉,修改本工程目录下的petalinuxbsp.conf
重新再来,发现快多了!重点检查一下网络接口配置,默认是选上的。
Build工程
可以发现,WSL2用全了主机的线程,我的计算机是4核8线程的APU.
$petalinux-build
5, 下载上板测试
由于WSL2目前还不支持串口,USB,所以没法直接通过JTAG下载,如果你是跑的VM或者实体ubuntu,那可以用如下命令下载UBOOT或KERNEL
$peatlinux-boot –jtag –uboot
$petalinux-boot –jtag –kernel
6,打包boot.bin
所有生成的最终文件都在images/linux目录下,工具也会自动拷贝一份到/tftpboot下
$petalinux-package --boot --fsbl images/linux/zynqmp_fsbl.elf --pmufw images/linux/pmufw.elf --fpga images/linux/system.bit --u-boot
UG1157关于package有如下例子:
可以看到,我们package了fsbl,pmufw,bl131,dtb,u-boot,当然也可以加—kernel把内核也打包进来。
7,分区SD卡
用Windows10自带磁盘管理比较难实现ubuntu里面的fdisk功能,但是Windows还带有命令行的分区工具diskpart,运行它。
输入help可以查看有哪些命令可用
先list一下磁盘,我这里SD卡是磁盘6,大家一定要小心,选错盘,数据丢了是很难找回来的啊!先把SD分区全清掉
创建2个主分区,一个4GB,一个32GB
激活分区一
退出diskpart, 格式化,Petalinux需要boot分区是FAT32格式
把刚才生成的BOOT.BIN文件跟image.ub拷贝到SD卡,插卡到板上,设置好ZCU104的配置开关为SD启动,打开Hyperterminal,设置好串口
U-BOOT起来后,网络正常的话,那以后调试就很方便了。
打开TFTP软件,这个软件是可以开DHCP SERVER服务的,都设置好。
bootp image.ub 从tftpboot目录传内核文件到内存,bootp会自动去获取ip地址
在超级终端上,输入bootm,从内存启动(刚才load进来的image.ub)。关于uboot的命令,可以自行网络搜索一下。
如果要更新SD卡的BOOT.BIN文件,也可以在UBOOT下操作,先通过TFTP获取BOOT.BIN文件,记得要先把BOOT.BIN拷贝到tftpboot目录。
tftpboot BOOT.BIN 或 bootp BOOT.BIN
记住tftp最开始会显示拷贝到内存的地址,比如0x8000000,结束的时候会显示文件长度,比如98105462 (5D8 F876 HEX)
输入命令,把BOOT.BIN写入SD卡分区1
fatwrite mmc 0 0x8000000 BOOT.BIN 0x5D8F876
成功后会显示写入长度(十进制)