Linux-通过网络nfs和tftp在开发板上运行linux驱动程序

一、准备工作

  1.确保使用的Ubuntu系统开启NFS和TFTP网络;

  2.确保正在使用的Linux开发板有与之匹配的uboot程序,并且复位或者上电后能进入uboot命令行模式下。

  注意:如果是EMMC启动方式,uboot程序在EMMC中;如果是SD卡启动,uboot程序在SD卡中;

  3.设置开发板uboot的环境变量

  (1)设置使用的Linux开发板网络环境,具体命令如下:

 1 /* 开发板的ip地址 */
 2 setenv ipaddr 192.168.1.50
 3 
 4 /* 开发板的MAC地址设置,如果同一个网段内有多个 设备要确保此地址不同*/
 5 setenv ethaddr 00:04:9F:04:D2:35
 6 
 7 /* 网关地址 */
 8 setenv gatewayip 192.168.1.1
 9 
10 /* 子网掩码 */
11 setenv netmask 255.255.255.0
12 
13 /* 服务器ip地址,这里是笔者使用的Ubuntu的ip地址 */
14 setenv serverip 192.168.1.110
15 
16 /* 保存环境变量 */
17 savenenv

  设置完成后可以依次输入下面命令查看设置的结果:

  同时也可以使用ping命令查看开发板是否能与Ubuntu连通,命令如下:

ping 192.168.1.110

  如果显示如下信息,表示通讯正常,可以进行后面的操作,否则需要检查通不上的原因:

  (2)设置bootcmd和bootargs环境变量的值

setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-fire-emmc.dtb; bootz 80800000 - 83000000'

  以上设置是通过tftp网络加载linux系统zImage和linux设备树文件imx6ull-fire-emmc.dtb;

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.110:/home/robot/linux/nfs/rootfs ip=192.168.1.50:192.168.1.110:192.168.1.1:255.255.255.0::eth0:off'

   以上设置是通过nfs网络加载根文件系统。

  设置完成后可输入“printenv”命令查看设置的bootcmd和bootargs环境变量的值,显示结果如下:

  限于篇幅,这里只截取部分信息,在显示的信息中可以看到设置完成的环境变量值。至此uboot的环境变量设置基本完成,复位或者重启开发板会自动从指定的网络文件中下载对应的文件完成linux系统的启动。

二、开始操作

  1.将在Ubuntu系统中编译好的.ko文件和可执行用户文件拷贝到根文件目录“/lib/modules/4.1.15”中(如果没有该目录请自行创建),命令如下:

sudo cp chrdevbase.ko chrdevbaseApp /home/robot/nfs/rootfs/lib/modules/4.1.15 -f

  拷贝完成后就可以在指定的文件目录中查看到拷贝的文件,如下图所示:

  2.加载chrdevbase.ko驱动文件

depmod  /* 加载驱动文件前需要执行一次该指令 */
modprobe chrdevbase.ko    /* 加载驱动文件 */
lsmod  /* 查看加载的驱动文件信息 */
cat /proc/devices/  /* 查看所有运行的驱动设备 */

  3.创建设备节点文件

  驱动加载成功需要在/dev目录下创建一个与之对应的设备节点文件,应用程序就是通过操作这个设备节点文件来完成对具体设备的操作。进入/dev目录,输入如下命令创建chrdevbase的设备节点文件:

mknod /dev/chrdevbase c 200 0

  结果显示如下:

  4.chrdevbase设备操作测试

  输入如下命令进行读和写操作:

/* 读操作 */
./chrdevbaseApp /dev/chrdevbase 1
/* 写操作 */
./chrdevbaseApp /dev/chrdevbase 2

  显示的结果如下图所示:

  5.卸载驱动模块

rmmod chrdevbase.ko

  具体操作和显示结果如下图所示:

end

原文地址:https://www.cnblogs.com/wenhao-Web/p/13336036.html