字符设备驱动基础2——用开发板来调试驱动的步骤

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

步骤1:获取编译后的内核源码与镜像

描述

该内核源码主要用来编译驱动源码。该内核源码必须与开发板运行的内核源码的版本一致,否则编译后的驱动程序在开发版上运行时,会遇到不匹配的问题。

操作

(1)将x210kernel.tar.bz2解压至合适的目录

我这里解压至目录:~/iot/embedded_basic/kernel/x210_kernel。

(2)配置与编译,得到内核源码与镜像

操作步骤见:内核编译初体验_天糊土的博客-CSDN博客

得到的内核镜像在arch/arm/boot目录中,镜像名是zImage。

 步骤2:将内核镜像下载至开发板

描述

可以利用fastboot或者tftp,将此内核镜像下载至开发板,且能正常运行。

操作

操作步骤见:利用tftp将镜像下载到开发板_天糊土的博客-CSDN博客

步骤3:驱动源代码的编写与编译

描述

(1)此步骤主要是完成驱动源代码的编写、Makefile文件的编写。

(2)驱动源代码的例子,见:简单的驱动源代码分析_天糊土的博客-CSDN博客

(3)驱动源代码的Makefile文件具有普适性。典型的Makefile文件内容如下:

#这是ubuntu提供的在本Ubuntu环境下开发驱动的内核源码树,
#因此如果想在此Ubuntu中开发驱动,则内核源码树目录就是它
#KERN_VER = $(shell uname -r)
#KERN_DIR = /lib/modules/$(KERN_VER)/build#开发板的linux内核的源码树在ubuntu中的目录
#它表示用来编译这个模块的内核源码树的目录
#注意根据实际路径来改写此目录(kernel的Makefile所在的路径)
KERN_DIR = /home/xjh/iot/embedded_basic/kernel/x210_kernel#注意这里的文件名(module_test)要修改成你实际所取的名字
#-m表示将module_test.c文件编译成一个单独的模块;
obj-m	+= module_test.o#此命令用来编译模块
#利用make -C $(KERN_DIR)进入指定的内核源码树目录,
#然后在源码目录树下,借用内核源码中定义的模块编译规则,去编译该模块modules。
#其实就是make modules。modules是内核中的一个目标。
#中间的是参数,表明到某个目录下进行编译,编译完后回到当前目录。
#使用make driver和直接make,都是执行这个规则
driver:make -C $(KERN_DIR) M=`pwd` modules #此命令用来编译应用层程序
#注意是利用交叉编译工具链来编译,而非ubuntu的gcc
#另外注意这里名字确定为app.c,注意修改
#其实这么短的命令,直接在ubuntu中调用arm-linux-gcc来编译就好
#写在这里,是为了说明要使用交叉编译工具链来编译应用层程序
app:arm-linux-gcc app.c -o app#用来清除编译痕迹
.PHONY: clean
clean:make -C $(KERN_DIR) M=`pwd` modules clean

操作

(1)编写驱动源码、Makefile文件

比如在/home/xjh/iot/embedded_basic/rootfs/tmp目录中编写驱动源码module_test.c,其内容见上面描述中的链接。然后在同路径编写Makefile文件,其内容见上面描述中的内容。

(2)进行编译

即执行make命令,得到module_test.ko这个驱动文件。

(3)将驱动文件转移到开发板系统目录

将ubuntu的/home/xjh/iot/embedded_basic/rootfs/tmp目录挂载到开发板系统的/mnt。在ubuntu的这个tmp目录中更新驱动程序时,通过开发板系统的/mnt目录可以获取这个驱动文件。一般我们将这个驱动文件复制到开发板系统的/tmp目录中再进行操作。

附:实现挂载的方法

在(ubuntu中将被下载的根文件系统中的)etc/profile文件中添加下面代码:

mount -t nfs -o nolock 192.168.1.141:/home/xjh/iot/embedded_basic/rootfs/tmp /mnt

然后在ubuntu系统中的/etc/exports文件中添加下面代码:

/home/xjh/iot/embedded_basic/rootfs/tmp *(rw,sync,no_root_squash,no_subtree_check)

然后重启NFS服务:

sudo /etc/init.d/nfs-kernel-server restart 

步骤4:利用NFS下载根文件系统至开发版

描述

可以利用NFS下载根文件系统至开发版。

操作

操作步骤见:以NFS方式挂载rootfs的设置方法_天糊土的博客-CSDN博客

步骤5:测试

描述

开发板的系统完全启动后,在SCRT上使用insmod命令来装载模块,然后测试,测试完毕使用rmmod命令卸载模块。

操作

[root@xjh tmp]# rmmod module_test.ko 
[  501.367827] chrdev_exit helloworld exit
[root@xjh tmp]# lsmodNot tainted
[root@xjh tmp]# insmod module_test.ko 
[  520.115699] chrdev_init helloworld init
[  520.118058] register_chrdev success...
[root@xjh tmp]# lsmod Not tainted
module_test 1059 0 - Live 0xbf00c000
[root@xjh tmp]# rmmod module_test
[  549.628315] chrdev_exit helloworld exit
[root@xjh tmp]# lsmod Not tainted
[root@xjh tmp]]# 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语音异或运算符_C语言中的按位异或运算符有什么用处?

原标题:C语言中的按位异或运算符有什么用处?想知道C语言中的按位异、运算符有什么用处,首先C语言中^为按位异或运算符,若两个二进制位相同,则结果为0,不同为1例:#include "stdio.h"ma…

Android 开发笔记 一

参考 : http://www.cnblogs.com/nightkidzxc/archive/2011/12/14/2379010.html 1.得到 SD 卡的目录 : String SDPATH Environment.getExternalStorageDriectory() "/"; 2.Activity 相当于 From Activity 以 Dialog形式显示在 Manifest中设置 : android:theme&qu…

超短的判断IE javascript代码

首先说明该代码只能在IE 6~8中有效&#xff0c;再高级的IE已经修复这个BUG <script type’text/javascript’> var ie !-[1,]; alert(ie); //如果是ie&#xff0c;弹出true </script> 原因&#xff1a; 首先[1,]是个数组&#xff0c;由于有个逗号&#xff…

mysql命令导出数据库_MYSQL 数据库导入导出命令

在不同操作系统或MySQL版本情况下&#xff0c;直接拷贝文件的方法可能会有不兼容的情况发生。所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。MySQL命令行导出数据库1&#xff0c;进入MySQL目录下的bin文件夹&#xff1a;cd MySQL中到bin文件夹的目录如我输入的命令行&…

linux vmware 安装后无法桥接到物理网卡的解决办法

在linux下安装完vmware后&#xff0c;因为需要必须使用桥接网络&#xff0c;交接物理网卡总是显示could not connect /dev/vmnet0, 网上搜索了很多办法都无法解决&#xff0c;下面这个据说能解决&#xff0c;但还是不行&#xff0c;贴下来供大家参考&#xff1a;我安装了一下&a…

HDU2201

水&#xff5e; 分析&#xff1a;n&#xff0c;m。对于第一个人不抽到m号座位概率为&#xff08;n-1&#xff09;/n&#xff0c;第二个人为&#xff08;n-2&#xff09;/&#xff08;n-1&#xff09;.。。。第m个人为1/&#xff08;n-m1&#xff09;.。。。 相乘之后则为 1/n V…

字符设备驱动基础1——简单的驱动源代码分析

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权请告知删除。 参考博客&#xff1a;linux驱动开发&#xff08;一&#xff09; - biaohc - 博客园 一、驱动源代码示例 /********module_test.c代码*********/#include <linux/module.h> // module_init module…

mysql 数据检查_mysql数据一致性检查及修复

percona-toolkit-2.2.20-1.noarchmysql 5.6.29-logmaster:192.168.166.129slave:192.168.166.131一、创建数据库校验存放库CREATE DATABASE IF NOT EXISTS percona CHARACTER SET utf8;二、建立数据校验用户GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO checksu…

字符设备驱动基础3——使用register_chrdev()函数注册字符设备

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、系统工作原理 1、工作流程 系统的整体工作流程是&#xff1a;应用层—>API—>设备驱动—>硬件。 操作系统提供的API包括open、read、write、close等函数&#xff0c;它们只是一种操作逻…

win7在未关闭vmware情况下直接关机,导致虚拟机无法克隆

今天有点小激动啊&#xff0c;着急关机&#xff0c;结果发现重启之后的虚拟机不能进行克隆操作。系统提示如下&#xff1a;the Specific Virtual Disk Needs Repair .查询“度娘”&#xff0c;突然看到一篇文章说&#xff0c;删除这啊&#xff0c;修改那的....特别复杂&#xf…

hdu 1159(最长公共子序列)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1159 思路&#xff1a;dp[i][j]表示s1从0~i-1,s2从0~j-1的最长公共子序列&#xff1b; 递推方程为&#xff1a;dp[i][j](s1[i-1]s2[j-1])?d[i-1][j-1]1:max(dp[i-1][j],dp[i][j-1]); View Code 1 #include<…

mysql applier_MySQL推出Applier,可实时复制数据到Hadoop-阿里云开发者社区

http://labs.mysql.comMySQL复制操作可以将数据从一个MySQL服务器(主)复制到其他的一个或多个MySQL服务器(从)。试想一下&#xff0c;如果从服务器不再局限为一个MySQL服务器&#xff0c;而是其他任何数据库服务器或平台&#xff0c;并且复制事件要求实时进行&#xff0c;是否可…

字符设备驱动基础4——读写接口的操作实践

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、细节提要 1、与用户与内核数据交换有关的函数 &#xff08;1&#xff09;copy_from_user()函数 该将数据从用户空间复制到内核空间。 如果成功复制则返回0&#xff0c;如果不成功复制则返回尚未…

从 Google Code 迁移代码到 GitHub 上

从Google Code迁移代码到github上的步骤: 首先访问 https://github.com/nirvdrum/svn2git 安装svn2git工具。创建一个空白目录&#xff0c;进入该目录执行 svn2git http://xxxxx.googlecode.com/svn , 注意&#xff0c;以svn结尾&#xff0c;不要加/trunk导出完毕后&#xff0c…

LAMP架构,纯文本作品

&#xff08;一&#xff09;Apache服务的编译安装1. 查找软件包位置[rootlocalhost ~]#cd /soft/LNS/chapter05[rootlocalhost ~]#ls2.解压包到指定位置[rootlocalhost ~]#tar zxf httpd-2.2.17.tar.gz -C /usr/src/3.编译安装Apache[rootlocalhost ~]#cd /usr/src/httpd-2.2.1…

ef sqlserver切换到mysql_可以为MySql和SqlServer使用EF上下文吗?

我有两个实体框架上下文,一个用于MySql,一个用于sql.如果我运行该应用程序,则会出现以下错误The default DbConfiguration instance was used by the Entity Framework before the MySqlEFConfiguration type was discovered.但是,如果我确实通过给应用程序指定Database.SetIni…

字符设备驱动高级篇1——注册字符设备驱动的新接口

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、注册字符设备驱动的老接口 在《字符设备驱动基础》里&#xff0c;注册字符设备驱动使用的函数是register_chrdev()函数。 该函数的介绍&#xff0c;见博客字符设备驱动基础3——使用register_ch…

ural 1129 (求数据)

先记下来。在test 7wa了。如果谁有数据希望可以指点下。thx. 1 // File Name: 1129.cpp2 // Author: Missa3 // Created Time: 2013/3/12 星期二 17:31:534 5 #include<iostream>6 #include<cstdio>7 #include<cstring>8 #include<algorithm>9 #includ…

码农提高工作效率

原文链接http://www.cnblogs.com/huang0925/p/3612741.html 俗话说&#xff0c;天下武功&#xff0c;唯快不破。也就是说要练成天下高手的话&#xff0c;出招速度一定要快&#xff0c;这样才能在江湖上立足&#xff0c;不至于掉了脑袋。而程序员要在IT界混出个名堂&#xff0c;…

mysql分区表mycat_MySQL 中间件之Mycat垂直分表配置

垂直分表就是将一个库下的多个表拆分到多个MySQL实例&#xff0c;实现库压力分流。通过GTID模式复制&#xff0c;db01与db02之间不进行任何连接与复制当前环境&#xff1a;mycat --> db01与db02db01 --> db03db02 --> db04当前垂直分表架构&#xff1a;后端数据库创建…