mini2440:最简单的嵌入式linux驱动程序模块,mini2440:最简单的嵌入式Linux驱动程序模块 解决找不到mini2440……sample...

原文:http://myswirl.blog.163.com/blog/static/5131864220109143331356/

注意:开发Arm平台的驱动,需要Arm平台的源码树;

注意:ARM平台的linux内核源码需要先编译,否则无法编译驱动;第一种方式:编译进内核,共6步

第1步:建立源码树

解压安装Linux 内核源代码在工作目录/opt/FriendlyARM/mini2440 中执行:

#cd /opt/FriendlyARM/mini2440

#tar xvzf /tmp/linux/linux-2.6.32.2-mini2440-20100106.tar.gz

将创建生成linux-2.6.32.2 目录,里面包含了完整的Linux-2.6.32.2 内核源代码说明:20100106 是我们的发行更新日期标志,请以光盘中实际日期尾缀为准。

第2步:编辑驱动源文件

mini2440_hello_module.c

该文件所在目录:/opt/FriendlyARM/mini2440/linux-2.6.32.2/drivers/char/

*********************************************************************************************

#include

#include

static int __init mini2440_hello_module_init(void)

{

printk("Hello, Mini2440 module is installed !\n");

return 0;

}

static void __exit mini2440_hello_module_cleanup(void)

{

printk("Good-bye, Mini2440 module was removed!\n");

}

module_init(mini2440_hello_module_init);

module_exit(mini2440_hello_module_cleanup);

MODULE_LICENSE("GPL");

*********************************************************************************************

第3步:编辑配置文件linux-2.6.32.2/drivers/char/Kconfig

增加如下字段,如图所示:

2384e0f0691b5d6b06c61d63d1cf5fd4.png

保存退出,这时在

linux-2.6.32.2

目录“/opt/FriendlyARM/mini2440/linux-2.6.32.2"位置运行一下

#cp config_mini2440_t35 .config     ;t35后面有个空格,然后有个“.”开头的config

#make menuconfig

就可以在Device Drivers---> Character devices 菜单中看到刚才所添加的选项了,按下空格键将会选择为,此意为要把该选项编译为模块方式;再按下空格会变为,意为要把该选项编译到内核中,在此我们选择,如图:

afe571d2fc73eba583222c1468856b5e.png 第4步:编辑linux-2.6.32.2/drivers/char/Makefile 通过上一步,我们虽然可以在配置内核的时候进行选择,但实际上此时执行编译内核还是不能把mini2440_hello_module.c 编译进去的,还需要在Makefile 中把内核配置选项和真正的源代码联系起来,打开 linux-2.6.32.2/drivers/char/Makefile,如图添加并保存退出:

6759f05d7b5de2923c9005a7ae066f46.png

第5步:编译驱动模块

这时回到linux-2.6.32.2 源代码根目录位置

/opt/FriendlyARM/mini2440/linux-2.6.32.2

#make modules

就可以生成我们所需要的内核模块文件mini2440_hello_module.ko 了,如图:

62ce0fb77292542d11522a244bfc600c.png

至此,我们已经完成了模块驱动的编译。

第6步:加载驱动模块

将把编译出的mini2440_hello_module.ko下载到板子中,并把它移动到/lib/modules/2.6.29.4-FriendlyARM目录,然后在板子中现在执行

#modprobe mini2440_hello_module

可以看到该模块已经被装载了(注意:使用modprobe 命令加载模块不需要加“ko”尾缀),再执行以下命令,可以看到该模块被卸载

#rmmod mini2440_hello_module

注意:要能够正常卸载模块,必须把模块放入开发板的/lib/modules/2.6.29.4-FriendlyARM 目录

注意:内核有时会升级更新,如果内核版本已经改变,请依照具体的内核版本重新建立一个模块存放目录,在此为/lib/modules/2.6.29.4-FriendlyARM。

第二种方式:动态加载

内核驱动模块的结构hello.c

#include#includestaticinthello_init(void){printk(KERN_ALERT"Hello, World!\n");return0;}staticvoidhello_exit(void){printk(KERN_ALERT"Goodbye, cruel world!\n");}module_init(hello_init);module_exit(hello_exit);

MODULE_LICENSE("Dual BSD/GPL");

源文件hello.c同目录下一个简单的Makefile文件:

KERNELDIR=/opt/FriendlyARM/mini2440/linux-2.6.32.2

PWD:=$(shell pwd)

INSTALLDIR =/lib/modules/2.6.29.4-FriendlyARM

CROSS_COMPILE=arm-linux-

CC=$(CROSS_COMPILE)gcc

obj-m:=hello.o

.PHONY:modules modules_install clean

modules:

$(MAKE)-C$(KERNELDIR)M=$(PWD)modules

modules_install:

cp hello.ko $(INSTALLDIR)

clean:

rm-rf*.o*~core.depend.*.cmd*.ko*.mod.c.tmp_versions

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

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

相关文章

Android之jni日志如何输出

1、写日志输出帮助文件 先看我之间的例子 http://blog.csdn.net/u011068702/article/details/71375920 Android之JNI动态注册native方法和JNI数据简单使用 然后在jni文件集里面写log_help.h文件,内容如下 // // Created by chenyu on 5/13/17. //#ifndef TEST_LOG_HEL…

机器学习-tensorflow

为什么80%的码农都做不了架构师?>>> 例子1 先从helloworld开始: tubuntu:~$ python Python 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4] on linux2 Type "help", "copyright", "credits" or "license&qu…

C# 多个异步方法的异常处理

、如果调用两个异步方法,每个都会抛出异常,该如何处理呢 ? 在下面的示例中,第一个 ThrowAfter 方法被调用,2s 后抛出异常(含消息 first)。该方法结束后,另一个 ThrowAfter 方法也被调用,1s 后也抛出异常。…

linux解pdf隐写工具,Linux版PDF解密工具PDFDecryptionTool-Deepin-amd64.deb下载

PDF解密工具PDFDecryptionTool的deb安装包提供下载了,可用在Deepin 20.2等Linux发行版中。该工具用于解除PDF文件的所有者权限的密码,解除编辑、复制等限制。另外,PDFDecryptionToolWin.py为Windows版本,针对Windows优化了下UI&am…

Mysql中explain命令查看语句执行概况

Mysql中可以使用explain命令查看查询语句的执行方式,使用方法举例:explain 查询语句 例如:explain select * from user_info 几个重要的字段说明: table:此次查询操作是关联哪张数据表 type:连接查询操作类…

Android之java.lang.UnsatisfiedLinkError(Failed to register native method ***callMethod1())解决办法

1、问题 Failed to register native method com.example.chenyu.test.JniClient.callMethod1() java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/com.example.chenyu.test-2/lib/arm/libFirstJni.so" 如下图 2、解决办法 原因:…

代码段编辑器SnippetEditor 2.1

1.选择程序版本 2.可以创建文件夹 3.新建片段 4.给片段取名 5.双击进行编辑 6.点击保存 7.直接使用 转载于:https://www.cnblogs.com/shiworkyue/p/3844993.html

HUAWEI nova 青春版闪速快充,让追剧不再断电

笔者是一个对追剧到极致要求的人,每每有好看的影剧出来,都迫不及待想要一次看个够本。但是事与愿违,手机总是很不争气,虽然电池续航能力不算太差,但是对于我们这种追剧重症患者来说是完全不够的,每次出门还…

飞信linux下载文件,OpenFetion(飞信for Linux)

这是OpenFetion(飞信for Linux),openfetion是使用GTK 编写的基于libofetion的用户界面。软件功能程序简洁轻快,界面美观,支持libofetion当前提供的所有功能。软件优势它是目前GNU/Linux平台上最优秀的飞信客户端程序,也是基于libo…

免费开源Blazor在线Ico转换工具

1. 功能效果演示 仓库地址:IcoTool[1]在线演示地址:https://tool.dotnet9.com/ico[2]演示下文件上传、转换结果:通过该工具及代码,能了解到:使用Blazor怎么上传文件到服务器(Blazor Server)。怎么从服务器下载文件。如…

Android之error: ‘const struct JNINativeInterface‘ has no member named ‘callVoidMethod‘

1、问题 error: const struct JNINativeInterface has no member named callVoidMethodobj undeclared (first use in this function) 2、原因 JNINativeInterface callVoidMethod函数写错了 obj 函数参数没有定义 3、解决办法 把callVoidMethod函数改成CallVoidMethod函数就…

UIWebView

IOS系统提供了 UIWebView 控件,从而可以方便地集成与网页相关的多种应用,该控件内置浏览器控件,可以用来浏览网页、打开文档等等。 一、UIWebView 可以加载和显示某个URL的网页,也可以显示基于HTML的本地网页或部分网页&#xff1…

数据库设计-基础-1-教务科研申报系统设计UML用例图

根据系统角色能够观察到的系统功能来画出用例图 系统角色划分参考附录 教师角色用例图科研秘书用例图科研处工作人员用例图科研系统管理员用例图校领导用例图附录: 教师:教师可以登录科研系统,查看自己所主持或参加的科研项目,并且…

【02】CC - 有意义的命名

为什么80%的码农都做不了架构师?>>> 1、提防使用不同之处较小的名称 XYZControllerForEfficientHandlingOfStrings 与 XYZControllerForEfficientStorageOfStrings 在IDE下,都有自动补全,这种细微的差别,容易补全错&a…

linux7 语言包,Centos 7中文语言包的安装及中文支持

1、修改配置文件etc/locale.confLANG"zh_CN.UTF-8"2、查看更改后的系统语言变量[root5c46832b5c01 ~]# localelocale: Cannot set LC_CTYPE to default locale: No such file or directorylocale: Cannot set LC_MESSAGES to default locale: No such file or direct…

如何在构建docker镜像时执行SonarQube扫描.NET Core应用

前言SonarQube是一款静态代码质量分析工具,它常用于检测代码中的Bug、漏洞和代码异味,并且能够集成在IDE、Jenkins、Git等服务中,方便随时查看代码质量分析报告。一般情况下,我们在Jenkins管道中配置SonarQube,在编译过…

Android之JNI DETECTED ERROR IN APPLICATION: illegal class name ‘XXX‘的错误解决方法

1、问题 JNI DETECTED ERROR IN APPLICATION: illegal class name com.example.chenyu.test.JniClient 2、原因 我在jni里面,写成这样了 (*env)->FindClass(env, "com.example.chenyu.test.JniClient");特么我把包名写成.xx.xx.xx了 3、解决办法 把…

Php与mssql数据交互

Php在5.3版本之后与mssql交互发生变化,原先的mssql函数系统不再支持,改用微软提供的sqlsrv函数,使用sqlsrv函数需要用到微软提供的动态函数库SQL Server Driver for PHP。 从微软官方网站下载函数库,然后在php.ini文件中加载函数库…

Win10系列:VC++ Direct3D模板介绍1

Visual Studio为开发Direct3D应用程序提供了便捷的模版,读者可以不必手动去新建Direct3D中所使用到的基础资源,而只需专注于图形的绘制。本小节主要为读者介绍这个模版中用于绘制图形的主要函数及其功能,为了能让读者更为清楚地了解如何使用此…

linux+arch系统下载,Linux

大小: 695MB更新时间:2021-02-04适用电脑:系统盘大于20G超过1GMHz的处理器最佳64位处理器Arch Linux是一份独立开发的、为i686优化的Linux发行,它面向高级Linux用户。它使用自行开发的包管理器pacman来为最新的应用软件提供 更新升…