xilinx linux 4.14移植到zc702平台,usb rndis驱动

1、编译uboot,可以参考http://www.wiki.xilinx.com/Build%20U-Boot

2、编译linux内核
首先获取linux内核源码:git clone https://github.com/Xilinx/linux-xlnx.git
然后进到下载目录下的linux-xlnx,设置交叉编译环境变量,该变量可以设置在Makefile文件里面:
例如:CROSS_COMPILE=CROSS_COMPILE=/home/rl/Codesourcery/bin/arm-xilinx-linux-gnueabi-
接下来开始编译内核
1、make ARCH=arm xilinx_zynq_defconfig

2、make ARCH=arm menuconfig
需要设置usb gadget support如图所示
xilinx linux 4.14移植到zc702平台,usb rndis驱动
3、编译内核 sudo make ARCH=arm uImage modules UIMAGE_LOADADDR=0x00008000
xilinx linux 4.14移植到zc702平台,usb rndis驱动
如图所示:arch/arm/boot/uImage是生成的内核文件,需要copy到SD卡上。
以下驱动也需要copy到sd卡上
drivers/usb/gadget/function/u_ether.ko
drivers/usb/gadget/function/usb_f_rndis.ko
drivers/usb/gadget/libcomposite.ko
4、编译dtb文件
首先需要修改devicetree,在arch/arm/boot/dts文件下,本文采用了zc702平台
修改arch/arm/boot/dts/zynq-zc702.dts
xilinx linux 4.14移植到zc702平台,usb rndis驱动
dr_mode由host改为peripheral
然后编译dtb文件,回到linux-xlnx文件,sudo make ARCH=arm dtbs
然后在arch/arm/boot/dts文件下生成zynq-zc702.dtb,copyzynq-zc702.dtb到sd卡,命名为devicetree.dtb

5、uramdisk.image.gz用的从xilinx wiki上下载的,若要编译,参考xilinx wiki
sd卡上最后有如下文件
xilinx linux 4.14移植到zc702平台,usb rndis驱动

6、将sd卡从插入zc702卡槽,linux就起来了。
mount /dev/mmcblk0p1 /mnt
执行如下脚本
xilinx linux 4.14移植到zc702平台,usb rndis驱动
本文整理成usb_ehter_boot.sh,
#!/bin/sh
insmod /mnt/libcomposite.ko
insmod /mnt/u_ether.ko
insmod /mnt/usb_f_rndis.ko
mount -t configfs none /sys/kernel/config
cd /sys/kernel/config/usb_gadget
mkdir g1
cd g1
echo "64" > bMaxPacketSize0
echo "0x200" > bcdUSB
echo "0x100" > bcdDevice
echo "0x03FD" > idVendor
echo "0x0500" > idProduct
mkdir functions/rndis.rn0
mkdir configs/c1.1
ln -s functions/rndis.rn0 configs/c1.1/
echo "ci_hdrc.0" > UDC
ifconfig usb0 192.168.1.200
ifconfig usb0 up
~

本例将zc702 ip设置为192.168.1.200,在host pc上 设置主机ip为192.168.1.100如图所示
xilinx linux 4.14移植到zc702平台,usb rndis驱动
接下来可以互ping
xilinx linux 4.14移植到zc702平台,usb rndis驱动
zc702和host pc间usb 网络就通了。
主机可以通ftp访问zc702.如ftp 192.168.1.200
xilinx linux 4.14移植到zc702平台,usb rndis驱动

接下来开发其他应用。