基于Linux_ARM板的驱动烧写及连接、挂载详细过程(附带驱动程序)

这篇具有很好参考价值的文章主要介绍了基于Linux_ARM板的驱动烧写及连接、挂载详细过程(附带驱动程序)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

本文操作环境:Ubuntu14.04、GEC6818

这里为似懂非懂的朋友简单叙述该文章的具体操作由来,我们的主要目的是将写好的驱动程序烧进开发板中,看到我们想要的现象。

第一个,我们需要让开发板和Linux平台建立联系,这样我们才能让俩者进行更好的交互,这个中间件网上有许多,这里我以putty为例连接展示。

第二个,在Linux上交叉编译好的可执行文件需要上传到中间件上运行,这里需要使用nfs服务挂载到开发板上。

第三个,在该ARM板上,厂商已为客户写入部分内核驱动模块。


一、搭建nfs服务

  1. 在Linux下打开终端,输入命令:
sudo apt-get install nfs-kernel-server
  1. 设置共享目录。在Linux上设置一个共享目录,方便之后步骤中一些文件的存放以及使用,在终端中输入命令:
sudo  mkdir -p /home/incipe/nfs
sudo chmod 777 /home/incipe/nfs
vim /etc/exports //(在exports下面添加如在语句)
/home/incipe/nfs (rw)
  1. 重启NFS服务,确保上面两步完成,终端中输入命令:
sudo /etc/init.d/nfs-kernel-server restart 

看到有四个OK出现即为设置成功。

二、ARM板的硬件连接

所需为一块ARM板、一根串口线、一根网线、一根电源线。
arm烧写文件,Linux C应用编程,linux,arm开发,运维

三、putty连接

使用母头串口线、网线、电源线将QT6818开发板与我们电脑相连,查看端口,然后打开我们的Putty,将端口号填写好,然后比特流改成115200,然后开启开发板和Putty。
arm烧写文件,Linux C应用编程,linux,arm开发,运维
arm烧写文件,Linux C应用编程,linux,arm开发,运维
至此,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

arm烧写文件,Linux C应用编程,linux,arm开发,运维

  • 交叉编译

将编译好的驱动程序复制到之前创建的共享文件夹 /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 为挂载在开发板上地址
arm烧写文件,Linux C应用编程,linux,arm开发,运维
可见,挂载成功。

五、烧写驱动程序

此前,你需知道的常见驱动命令:

  • uname命令
    用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)
  • lsmod命令
    用于显示已经加载到内核中的模块的状态信息。
  • rmmod命令
    用于从当前运行的内核中移除指定的内核模块。
  • insmod命令
    用于将给定的模块加载到内核中。
  • dmesg命令
    用于检查和控制内核的环形缓冲区。
  • get_module命令
    用于获取Linux内核模块的详细信息。

arm烧写文件,Linux C应用编程,linux,arm开发,运维
接下来,我以上方已加载的led驱动模块为例,烧入驱动程序
先观察烧入前板子上的 led 状态(默认状态全亮)
arm烧写文件,Linux C应用编程,linux,arm开发,运维
运行已挂载的可执行文件: ./led_test
arm烧写文件,Linux C应用编程,linux,arm开发,运维
输入数字“4”和“6”表示关闭第2个和第3个led灯,观察现象:
arm烧写文件,Linux C应用编程,linux,arm开发,运维
观察可知,第二个和第三个led灯成功关闭。文章来源地址https://www.toymoban.com/news/detail-781178.html

六、驱动程序示例

#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,成功返回0
	if(fd<0)
	{
		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;
 }

到了这里,关于基于Linux_ARM板的驱动烧写及连接、挂载详细过程(附带驱动程序)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【IMX6ULL驱动开发学习】02.IMX6ULL烧写Linux系统

    由于我买的是正点原子的IMX6ULL阿尔法开发板,但是我是看韦东山老师视频学习的驱动 所以这里我烧录的方法是按照韦东山老师的课程来的 这里给出烧写Linux系统用到的工具 链接:https://pan.baidu.com/s/1bD-xxn3K8xQAVkJSaJmTzQ 提取码:af6w 下载解压后,可以看到烧写工具 烧写Linux系统

    2024年02月13日
    浏览(43)
  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第五天-ARM Linux编程之字符设备驱动(物联技术666)

    链接:https://pan.baidu.com/s/1V0E9IHSoLbpiWJsncmFgdA?pwd=1688 提取码:1688 教学内容: 1 、内核模块的简单框架: __init __exit 执行完后就释放空间 简单框架:包含三个部分 1)模块初始化和模块退出函数 2)注册模块函数 3)模块许可 //*************************************************** #include linux

    2024年02月21日
    浏览(34)
  • ARM & Linux 基础学习 / 配置交叉编译工具链 / 编译 Linux 应用和驱动 / 编译内核

    编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料(如 百问网的《嵌入式Linux应用开发完全手册》,在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO:开发板资料》或《2.2 全系列Linux教程:在线视频与配套资料》里面可以下载到),还有参考 菜

    2024年02月04日
    浏览(37)
  • 在qml中的ShaderEffect在arm板的3568的系统上是用GPU渲染的吗

    在QML中的ShaderEffect 通常是利用GPU进行渲染的 。 ShaderEffect 是 Qt Quick 提供的一个功能强大的组件,它允许开发者在 QML 层面实现像素级别的操作。这个组件的设计目的就是为了 充分利用 GPU 的强大计算能力来进行图形渲染 。因此,当你在 QML 中使用 ShaderEffect 时,它 通常会通过

    2024年02月22日
    浏览(23)
  • L298N电机驱动板的使用说明

    目录 一、为什么要用L298N驱动板来驱动电机 二、L298N引脚功能图 三、供电方式 1、接入5V电源 2、接入7~12V电源 3、接入大于12V电源 四、L298N的驱动方式 你可能有这个疑惑,电机是4-6V供电的,单片机的输出也是5V输出,为什么不直接用单片机来供电驱动电机呢?这是因为单片机

    2024年02月02日
    浏览(23)
  • ARM-Linux驱动内核(S3C2440)

    Linux启动流程 驱动(程序) : 驱使设备行动的程序 1. 启动bootloader---引导操作系统启动的(裸机)程序,为操作系统启动准备环境,并引导操作系统启动 2. 启动kernel---操作系统核心 (俗称的操作系统) 3. 加载根文件系统---一堆文件的集合(根目录下的文件)   存储分类 RAM(随机存储

    2024年01月23日
    浏览(32)
  • STM32烧写程序:ST-Link驱动下载和安装

    在进行STM32微控制器的烧写程序之前,我们需要先安装ST-Link驱动程序,并确保其能够正确连接到目标设备。本文将提供详细的步骤说明,以帮助您下载和安装ST-Link驱动程序。 步骤1:下载ST-Link驱动程序 首先,我们需要从STMicroelectronics官方网站下载ST-Link驱动程序。请按照以下

    2024年01月15日
    浏览(58)
  • 嵌入式Linux:ARM驱动+QT应用+OpenCV人脸识别项目实现

            这个项目主要分为两部分,客户端(ARM板端)负责利用OpenCV采集人脸数据,利用TCP将人脸数据发送给服务器,然后服务器根据人脸数据进行人脸识别,将识别后的结果返还给客户端,客户端对人脸数据进行解析,得到正确的人脸数据后,打开门锁。门锁涉及硬件操作

    2024年02月10日
    浏览(35)
  • 驱动开发,stm32mp157a开发板的led灯控制实验

            编写LED灯的驱动,在应用程序中编写控制LED灯亮灭的代码逻辑实现LED灯功能的控制; LED1-PE10 LED1亮灭: RCC寄存器[4]-1 0X50000A28 GPIOE_MODER[21:20]-01 (输出) 0X50006000 GPIOE_ODR[10]-1(输出高电平) 0(输出低电平)0X50006014 LED2-PF10 LED2亮灭: RCC寄存器[5]-1 0X50000A28 GPIOE_MODER[21:20]

    2024年02月09日
    浏览(34)
  • ARM开发之基于IIC协议的TM1650驱动实现(模拟IIC实现)

    目录 一、内存映射 1、什么是内存映射?为什么要内存映射? 2、gec6818如何进行内存映射?(相关的函数) 3、内存映射代码 : 二、模拟IIC的底层代码实现 1、配置输入输出方向 2、拉高拉低引脚 3、获得总线传回的数据 4、协议的实现 三、TM1650的使用 1、TM1650简介 2、TM1650怎

    2024年02月12日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包