本文转自迅为:http://www.topeetboard.com

大家好,本章节我们将向大家讲解如何在 linux 下实现以模块的方式加载内核驱动。我们以内核里面蜂鸣器的

驱动为例来讲解。

1)首先打开内核的源码,如下图所示:

2)使用命令“cd drivers/char/” ,进入到蜂鸣器驱动所在的目录,如下图所示:

3)然后使用命令“vi Kconfig”打开当前目录下的内核配置文件,如下图所示:

4)然后找到“config BUZZER_CTL”所在的位置,如下图所示:

5)然后把“bool "Enable BUZZER config"“一行改成”tristate "Enable BUZZER config"“,如下图所示:

6)然后保存并退出,如下图所示:

7)然后回到内核源码的根目录下,如下图所示:

8)然后输入命令”make menuconfig“配置内核,如下图所示:

9)选择” Device Drivers “->"Character devices"->"Enable BUZZER config",如下图所示:

10)然后把” Enable BUZZER config “左边的”*“改成”M“,如下图所示:

11)然后保存并退出配置界面,如下图:

12)然后使用命令” vi arch/arm/mach-exynos/mach-itop4412.c“打开 mach-itop4412.c,如下图所示:

13)然后找到” struct platform_device s3c_device_buzzer_ctl “一行,如下图所示:

14)把这一行前面的” #ifdef CONFIG_BUZZER_CTL“改成”#if defined(CONFIG_BUZZER_CTL) ||

defined(CONFIG_BUZZER_CTL_MODULE) “,如下图所示:

15)然后找到” &s3c_device_buzzer_ctl“一行,如下图所示:

16)把这一行前面的” #ifdef CONFIG_BUZZER_CTL“改成”#if defined(CONFIG_BUZZER_CTL) ||

defined(CONFIG_BUZZER_CTL_MODULE) “,如下图所示:

17)然后保存并退出,返回到 linux 内核源码的根目录下,如下图所示:

18)然后输入命令”make“,开始编译内核,如下图所示:

19)编译完成后会在内核的” arch/arm/boot“目录下生成镜像文件”zImage“,如下图所示:

20)在内核的” drivers/char“目录下生成了蜂鸣器的驱动模块” itop4412_buzzer.ko“,如下图所示:

21)下一步我们烧写生成的 zImage 到开发板上,然后开发板启动进入到 android 系统。

22)然后通过 adb 把蜂鸣器的驱动模块传到开发板的"/data"目录下,如下图所示:

23)然后再串口输入命令”cd /data“,进入到开发板的"/data"目录,如下图所示:

24)然后输入”ls“命令,可以看到通过 adb 传过来的蜂鸣器驱动模块” itop4412_buzzer.ko “,如下图

所示:

25)接着在串口输入命令” insmod itop4412_buzzer.ko “,加载蜂鸣器的驱动,如下图所示:

26)通过上图可以看到蜂鸣器的驱动已经加载到内核里面了,接着输入命令“cd /dev” ,如下图所示:

27) 通过上面的图片, 可以看到生成了“ buzzer_ctl” 蜂鸣器的节点了 ,我们需要输入“ chmod 777 buzzer_ctl”

命令来修改下 buzzer_ctl 的权限,如下图所示:

28)然后我们可以使用 android 自带的蜂鸣器小程序来控制蜂鸣器了,至此以模块的方式加载驱动就完成了。

上面我们的驱动是放在了内核源码的目录下来实现的编译成驱动模块,很多时候我们都是拿到一个驱动源码,

不需要把他放到内核源码里面,而是直接把他编译成驱动模块,下面我们来讲下实现方法,我们还是以蜂鸣器

的驱动为例来讲解。

1) 因为开发板带的内核默认是把蜂鸣器直接编译到内核里面了, 所以我们要重复前边的步骤 “1” 到步骤 “19” ,

完成这些步骤以后,把生成的镜像“zImage”烧写到开发板。

2)然后在虚拟机的目录下用命令 mkdir 建立文件夹“module” ,如下图所示:

3)然后用命令 cd 进入到建立的“module”文件夹,如下图所示:

4)拷贝内核里面的蜂鸣器驱动到 module 文件夹,如下图所示:

5)然后在 module 文件夹建立文件“Makefile” ,如下图所示:

6)然后在"Makefile"文件输入下面的信息:

obj-m += itop4412_buzzer.o

KDIR := /home/broswer/iTop4412_Kernel_3.0

PWD = $(shell pwd)

all:

make -C $(KDIR) M=$(PWD) modules

clean:

rm -rf *.o

其中的“KDIR := /home/broswer/iTop4412_Kernel_3.0"是指定我们内核源码所在的目录,我这里内核源码

是放在了” /home/broswer/“目录下面,需要根据自己的存放位置来修改这个地方

7)然后保存并退出 Makefile,在终端输入”make“命令,编译蜂鸣器驱动,如下图所示:

8)编译完成后,可以看下在”module“文件夹下面生成了” itop4412_buzzer.ko“,如下图所示:

9)然后可以参照前面的步骤”22“来测试我们编译的蜂鸣器驱动了。

[嵌入式开发板]iTOP-4412以模块的方式编译驱动的更多相关文章

  1. 【4412嵌入式开发板学习笔记】认识uboot

    转自迅为讨论群:http://www.topeetboard.com 重要说明:这份笔记不是4412开发配套的,是我在网上看视频的时候下载上课老师的笔记后修改的.所以我试了一下笔记上的uboot命令, ...

  2. ARM嵌入式开发板

    iTOP-4412 ARM嵌入式开发板----主要特点 iTOP-4412开发平台是北京迅为电子研发设计的嵌入式开发板平台,核心板配备64位双通道2GB DDR3,16GBEMMC存储,三星原厂S5M ...

  3. 嵌入式开发板iTOP4412学习开发板

    网站:http://www.topeetboard.com 淘宝:https://item.taobao.com/item.htm?_u=okcahs0f42a&id=38712193806 ...

  4. 学习嵌入式开发板的Android平台体系结构和源码结构

    本文转自迅为论坛资料:http://www.topeetboard.com 推荐学习嵌入式开发板平台:iTOP-4412开发板 下面这张图出自Google官方,展示了Android系统的主要组成部分. ...

  5. 嵌入式开发板使用网口和nfs进行文件共享

    如果你的开发板有网口,类似于这玩意. 那么,你可以去买根网线,类似于这玩意. 然后你就可以将你的电脑和开发板用网线连起来,通过nfs(网络文件系统)来进行文件夹共享,文件夹共享就相当于挂载,nfs是利 ...

  6. CLion远程调试嵌入式开发板程序

    CLion远程调试嵌入式开发板程序 目录 CLion远程调试嵌入式开发板程序 1. 目的 2. 前提条件 3. CLion设置 3.1 设置一个Deployment 3.2 上传需要的目录到目标板子 ...

  7. iTOP-4412嵌入式开发板ioremap控制GPIO寄存器

    转自迅为电子技术论坛:http://bbs.topeetboard.com GPIO 的寄存器通过 ioremap函数转换之后,可以通过直接控制虚拟地址来控制物理地址(寄存器的实际地址),这样就实现 ...

  8. [学习嵌入式开发板]iTOP-4412实现NFS网络文件系统

    本文转自迅为:http://www.topeetboard.com 学习平台:iTOP-4412开发板 本文讲解如何在 iTOP-4412 开发板上实现 NFS 网络文件系统. 我们使用的软硬件环境是 ...

  9. 【嵌入式开发板】8月终极暑促迅为Cortex-a9四核入门开发板

    核心板参数 尺寸 50mm*60mm 高度 连同连接器在内0.26cm CPU Exynos4412,四核Cortex-A9,主频为1.4GHz-1.6GHz 内存 1GB 双通道 DDR3(2GB  ...

随机推荐

  1. 最新的SqlHelper 类

    最新的SqlHelper 类 摘自:http://www.cnblogs.com/sufei/archive/2010/01/14/1648026.html using System; using S ...

  2. GridView 使用方法总结 (一)

    GridView 使用方法总结 (一) 下载全部代码 http://www.sufeinet.com/thread-431-1-1.html   原文件作者是:csdn.net的清清月儿 她的主页  ...

  3. C#方法的六种参数,值参数、引用参数、输出参数、参数数组、命名参数、可选参数

    方法的参数有六种,分别是值参数.引用参数.输出参数.参数数组.命名参数.可选参数. 值参数 值参数是方法的默认类型,通过复制实参的值到形参的方式把数据传递到方法,方法被调用时,系统作两步操作: 在栈中 ...

  4. 重新想象 Windows 8 Store Apps (40) - 剪切板: 复制/粘贴文本, html, 图片, 文件

    [源码下载] 重新想象 Windows 8 Store Apps (40) - 剪切板: 复制/粘贴文本, html, 图片, 文件 作者:webabcd 介绍重新想象 Windows 8 Store ...

  5. Urlencode and Urldecode 命令行

    由于经常使用,简单记录之 $ alias urlencode='python -c "import sys, urllib as ul; print ul.quote_plus(sys.ar ...

  6. [PHP] 自定义错误处理

    关闭掉默认的错误提示,注册自己的错误提示 Application.php <?php class Application{ public static function main(){ head ...

  7. CodeForces 149D Coloring Brackets

    Coloring Brackets time limit per test: 2 seconds memory limit per test: 256 megabytes input: standar ...

  8. 微软发布ASP.NET 5路线图

    这次随 Visual Studio 2015 发布的 ASP.NET 版本是 ASP.NET 4.6 与 ASP.NET 5 beta5.在 VS2015 发布的同时,微软也发布了 ASP.NET 5 ...

  9. [Architecture Pattern] Singleton Locator

    [Architecture Pattern] Singleton Locator 目的 组件自己提供Service Locator模式,用来降低组件的耦合度. 情景 在开发系统时,底层的Infrast ...

  10. CSS 选择器汇总

    CSS 选择器 CSS 元素选择器 CSS 选择器分组 CSS 类选择器详解 CSS ID 选择器详解 CSS 属性选择器详解 CSS 后代选择器 CSS 子元素选择器 CSS 相邻兄弟选择器 CSS ...