网站SEO建设摘要,做跨境电商需要哪些条件,wordpress改logo不显示,细谈电商网站外链建设的策略文章目录前言一、搭建nfs服务二、ARM板的硬件连接三、putty连接四、挂载共享文件夹五、烧写驱动程序六、驱动程序示例前言
本文操作环境#xff1a;Ubuntu14.04、GEC6818
这里为似懂非懂的朋友简单叙述该文章的具体操作由来#xff0c;我们的主要目的是将写好的驱动程序烧进…
文章目录前言一、搭建nfs服务二、ARM板的硬件连接三、putty连接四、挂载共享文件夹五、烧写驱动程序六、驱动程序示例前言
本文操作环境Ubuntu14.04、GEC6818
这里为似懂非懂的朋友简单叙述该文章的具体操作由来我们的主要目的是将写好的驱动程序烧进开发板中看到我们想要的现象。
第一个我们需要让开发板和Linux平台建立联系这样我们才能让俩者进行更好的交互这个中间件网上有许多这里我以putty为例连接展示。
第二个在Linux上交叉编译好的可执行文件需要上传到中间件上运行这里需要使用nfs服务挂载到开发板上。
第三个在该ARM板上厂商已为客户写入部分内核驱动模块。 一、搭建nfs服务
在Linux下打开终端输入命令
sudo apt-get install nfs-kernel-server设置共享目录。在Linux上设置一个共享目录方便之后步骤中一些文件的存放以及使用在终端中输入命令
sudo mkdir -p /home/incipe/nfs
sudo chmod 777 /home/incipe/nfs
vim /etc/exports //(在exports下面添加如在语句)
/home/incipe/nfs (rw)重启NFS服务确保上面两步完成终端中输入命令
sudo /etc/init.d/nfs-kernel-server restart 看到有四个OK出现即为设置成功。
二、ARM板的硬件连接
所需为一块ARM板、一根串口线、一根网线、一根电源线。
三、putty连接
使用母头串口线、网线、电源线将QT6818开发板与我们电脑相连查看端口然后打开我们的Putty将端口号填写好然后比特流改成115200然后开启开发板和Putty。 至此putty连接ARM板成功
四、挂载共享文件夹
相互ping通
查看开发板、Ubuntu的IP地址修改开发板、Ubuntude IP地址。先在Ubuntu和开发板上查看其IP地址输入命令ifconfig然后我们要将Ubuntu的IP地址改成和开发板一个网段的地址。改装完之后在Ubuntu上再输入ifconfig命令查看是否改装成功。
查看IP地址命令ifconfig 更改IP地址命令ifconfig eth0 xxx.xxx.x.xxx
更改为同一网段后相互ping通ping xxx.xxx.x.xxx 交叉编译
将编译好的驱动程序复制到之前创建的共享文件夹 /home/incipe/nfs (以下是在Linux终端执行) cp /mnt/hgfs/Ubuntu14.04_share/led_test.c /home/incipe/nfs/在/home/incipe/nfs 文件中交叉编译led_test.c文件 (此前需要安装交叉编译环境)
arm-linux-gcc -o led_test led_test.c 挂载
将交叉编译生成的led_test可执行文件挂载到开发板在putty上执行如下语句实现挂载
mount -t nfs 192.168.1.180:/home/incipe/nfs /mnt/sd -o nolock其中 192.168.1.180:/home/incipe/nfs 为Linux IP地址及Linux下的共享文件夹 /mnt/sd 为挂载在开发板上地址 可见挂载成功。
五、烧写驱动程序
此前你需知道的常见驱动命令
uname命令 用于打印当前系统相关信息内核版本号、硬件架构、主机名称和操作系统类型等lsmod命令 用于显示已经加载到内核中的模块的状态信息。rmmod命令 用于从当前运行的内核中移除指定的内核模块。insmod命令 用于将给定的模块加载到内核中。dmesg命令 用于检查和控制内核的环形缓冲区。get_module命令 用于获取Linux内核模块的详细信息。 接下来我以上方已加载的led驱动模块为例烧入驱动程序 先观察烧入前板子上的 led 状态(默认状态全亮) 运行已挂载的可执行文件 ./led_test 输入数字“4”和“6”表示关闭第2个和第3个led灯观察现象 观察可知第二个和第三个led灯成功关闭。
六、驱动程序示例
#include stdio.h
#include stdlib.h
#include fcntl.h
#include unistd.h
#include sys/ioctl.h#define TEST_MAGIC x //定义幻数
#define TEST_MAX_NR 2 //定义命令的最大序数//定义LED的魔幻数
#define LED1 _IO(TEST_MAGIC, 0)
#define LED2 _IO(TEST_MAGIC, 1)
#define LED3 _IO(TEST_MAGIC, 2)
#define LED4 _IO(TEST_MAGIC, 3)/*************************************************
*主函数-实现led的控制
*************************************************/
int main(int argc, char **argv)
{int fd,val;fd open(/dev/Led,O_RDWR); //打开设备下的LED成功返回0if(fd0){perror(Can not open /dev/LED\n);return 0;}while(1){val 0;printf(**********************************************\n);printf(*please select which light to turn on *\n);printf(* 1-1:on 2 -1:off | 3 -2:on 4 -2:off *\n);printf(*------------------------------------------- *\n);printf(* 5-3:on 6 -3:off | 7 -4:on 8 -4:off *\n);printf(**********************************************\n);scanf(%d,val);while(val 0){printf(****************\n);scanf(%d,val);}//printf(***********val %d\n,val);switch(val){case 1: ioctl(fd, LED1, 0); //1灯亮break;case 2: ioctl(fd, LED1, 1); //1灯灭break;case 3: ioctl(fd, LED2, 0); //2灯亮break;case 4: ioctl(fd, LED2, 1); //2灯灭break;case 5: ioctl(fd, LED3, 0); //3灯亮break;case 6:ioctl(fd, LED3, 1); //3灯灭break;case 7: ioctl(fd, LED4, 0); //4灯亮break;case 8: ioctl(fd, LED4, 1); //4灯灭break;default: close(fd);return 0;}}close(fd);return 0;}