一、准备工作
1.确保使用的Ubuntu系统开启NFS和TFTP网络;
2.确保正在使用的Linux开发板有与之匹配的uboot程序,并且复位或者上电后能进入uboot命令行模式下。
注意:如果是EMMC启动方式,uboot程序在EMMC中;如果是SD卡启动,uboot程序在SD卡中;
3.设置uboot的环境变量
(1)设置使用的Linux开发板网络环境,具体命令如下:
/* 开发板的ip地址 */ setenv ipaddr 192.168.1.50
/* 开发板的MAC地址设置,如果同一个网段内有多个 设备要确保此地址不同*/ setenv ethaddr 00:04:9F:042:35
/* 网关地址 */ setenv gatewayip 192.168.1.1
/* 子网掩码 */setenv netmask 255.255.255.0
/* 服务器ip地址,这里是笔者使用的Ubuntu的ip地址 */ setenv serverip 192.168.1.110
/* 保存环境变量 */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 ff'
以上设置是通过nfs网络加载根文件系统。
设置完成后可输入“printenv”命令查看设置的bootcmd和bootargs环境变量的值,显示结果如下:
二、开始操作
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
具体操作和显示结果如下图所示: |