06 通过USB线实现开发板与PC端的网络通信

  • Post author:
  • Post category:其他


通过USB线实现开发板与PC端的网络通信


板上的uart通过usb线接到pc上,板子可以通过uart口接收到pc端的uart口发出内容,pc端也可接收到板上发的内容。

板上的uboot会接收uart数据,并会把接收到的内容转发回去(回显)。

板上uboot通过uart接收命令,并把执行命令的结果通过uart口发出去。


linux内核的作用:统一管理软硬件的资源,而且也统一硬件设备的驱动的接口及应用程序调用的的接口。


板子没有有线网卡,但有提供otg接口,可以让我们的板子作个虚拟网卡通过usb线接到pc,在pc上就会多产生一个网络设备,然后pc就可以通过产生的网络设备与板子通信了,板子也可以通过网络挂载pc上的共享目录。


步骤:
    1.配置内核,让内核支持此功能(在内核源码根目录orangepi_sdk/source/linux-3.4.112下):
        make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

        File systems  --->
        [*] Network File Systems  --->
            [*]     NFS client support for NFS version 3
            [*]     NFS client support for NFS version 4
        Device Drivers  --->
            [*] USB support  --->
                <*>   USB Gadget Support  --->
                    <M>   USB Gadget Drivers     //修改成'M',原来是'*'
                    <M>     Ethernet Gadget (with CDC Ethernet support) 

    2.修改好后,退出保存,再编译内核(注意不用"make clean"):
        make uImage ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

    3.再编译驱动模块(也就是选'M'项):
        make modules ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

    4.更新内核镜像及文件系统:
        sudo cp arch/arm/boot/uImage  /sd卡挂载目录      //更新内核镜像
        make modules_install INSTALL_MOD_PATH=/sd卡挂载目录      //把编译生成的模块驱动.ko文件放到文件系统的分区里
        make modules_install INSTALL_MOD_PATH=/disk3/h3fs/     //也给PC上的板子文件系统更新,以防SD卡系统挂掉后可以恢复

    5.把SD卡接回板子上启动系统

    6.加载驱动文件(驱动文件就是"/lib/modules/3.4.112/kernel/drivers/usb/gadget/g_ether.ko"):
        modprobe g_ether     //加载刚才的ko驱动文件
        echo 2 > /sys/devices/platform/sunxi_usb_udc/otg_role   //让板子的otg接口作设备用
        (以上操作完成后,板子端会多usb0网络设备;接入usb线后,pc端也会多一个网络设备(名字不确定,如:enp0s29f7u1))
        (ifconfig -a:可以查看IP信息)

    7.把两端的网络设备设好IP,即可网络通信:
        ifconfig usb0 192.168.11.10   //设置板子端的IP(IP自己定,但前三个点分十进制要相同,第四个不能相同)
        ifconfig enp0s29f7u1 192.168.11.20   //设置PC端的IP(IP自己定,但前三个点分十进制要相同,第四个不能相同,之后挂载时记得写这里自己定的IP)

    8.pc端配置及启动nfs服务:
        (1)配置/etc/exports文件:
                sudo vim /etc/exports
                增加以下内容(nfs的共享目录):
                    /nfs共享目录   *(rw, sync, no_root_squash, no_subtree_check)
                    或者:/nfs共享目录   *(rw)
                注意(以下不用写到exports文件中):
                    *:允许所有的网段访问,也可以使用具体的IP
                    rw:挂接此目录的客户端对该共享目录具有读写权限
                    sync:资料同步写入内存和硬盘
                    no_root_squash:root用户具有对根目录的完全管理访问权
                    no_subtree_check:不检查父目录的权限
        (2)启动nfs(Ubuntu下):
                sudo /etc/init.d/nfs-kernel-server  start
        另外:
            重启nfs:sudo /etc/init.d/nfs-kernel-server  restart
            停止nfs:sudo /etc/init.d/nfs-kernel-server  stop

    9.ping查看板子和pc能否ping通

    10.在板子上挂载pc的nfs共享目录
        mount 192.168.11.20:/nfs共享目录 /mnt -o nolock
        或者:mount 192.168.11.20:/nfs共享目录 /mnt -o nolock,tcp

    11.为了以后使用不用经常麻烦与加载驱动文件,可以将加载驱动的命令写到系统初始化文件(/etc/init.d/rcS)里,即加上以下内容:
        modprobe g_ether
        echo 2 > /sys/devices/platform/sunxi_usb_udc/otg_role

注意:

以后可以通过挂载pc的共享目录,来运行程序。(这样就可以不用经常拔插卡了)



版权声明:本文为ForFuture_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。