Linux驱动开发之开篇--HelloWorld
Linux驱动的编写,大致分为两个过程,第一个过程为测试阶段,即为某一具体的设备,添加必要的驱动模块,为了节省编译时间,需要将代码单独放在一处,在编译时,只需要要调用内核的头文件即可;第二个过程为布置阶段,即为某一具体设备,添加完整、可靠的驱动模块,即该过程将驱动模块编译到内核镜像文件中,它需要将驱动模块的代码,添加到内核源码树中,下面将逐一介绍。
阶段一
1 新建一目录,并编写测试代码
mkdir -p develop/drivers/
cd develop/drivers/
vim demo.c
//driver/demo/demo.c
#include "linux/init.h"
#include "linux/module.h" static int hello_init(void)
{
printk(KERN_ALERT"Hello World linux-driver-module\n");//注意,必须是KERN_ALEAT及以上级别,不然不会打印
return ;
} static int hello_exit(void)
{
printk(KERN_ALERT"Goodbye linux-driver-module\n");
return ;
} module_init(hello_init);
module_exit(hello_init); MODULE_LICENSE("GPL");
MODULE_AUTHOR("gjianw217@163.com");
2 添加编译文件Makefile
ARCH=arm
CROSS_COMPILE=arm-linux-gnueabihf-
APP_COMPILE=arm-linux-
#obj-m := pwm_test-drv.o
obj-m := hello-drv.o
KDIR := /path/to/kernel/linux/
PWD := $(shell pwd)
default:
make -C $(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules
app:hello-app.c
$(APP_COMPILE)gcc -o helloappe hello-app.c
clean:
$(MAKE) -C $(KDIR) M=$(PWD) clean
3 编译并加载到板上
make
Download thd demo.ko into the Development Board
arm/drivers/demo.ko
4 驱动模块的测试
cd /arm/drivers/
insmod demo.ko
lsmod demo.ko
rmmod demo.ko dmesg
阶段二
1 将驱动代码按类型放到内核源码树相应目录下(drivers/demo/demo.c)
//driver/demo/demo.c
#include "linux/init.h"
#include "linux/module.h" static int hello_init(void)
{
printk(KERN_ALERT"Hello World linux-driver-module\n");
return ;
} static int hello_exit(void)
{
printk(KERN_ALERT"Goodbye linux-driver-module\n");
return ;
} module_init(hello_init);
module_exit(hello_init); MODULE_LICENSE("GPL");
MODULE_AUTHOR("lpj");
2 在当前目录下,分别添加编译文件
driver/demo/Makefile
#driver module demo
obj-$(CONFIG_HELLODRV) += hello.o
driver/demo/Kconfig
menu USER_DEVICE_DRIVERS //4中可以看到它
config HELLODRV
tristate "Hello"
help
This is a demo driver programming.
endmenu
3 修改上层目录文件,将其添加到内核中
driver/Makefile
obj-$(CONFIG_HELLODRV)+=demo/
driver/Kconfig
source drivers/demo/Kconfig
arch/arm/Kconfig
source "drivers/demo/Kconfig"
4进行系统配置并编译
make menuconfig
make
5加载内核镜像文件到板上,使用命令检查
lsmod
dmesg
参考链接
【2】Linux内核驱动学习
Linux驱动开发之开篇--HelloWorld的更多相关文章
- 1. Linux驱动开发之开篇--Makefile
基本Makefile假设现在有3个文件,file2.h是函数声明,file2.c是函数定义,文件file1.c调用file2.c中的函数.则Makefile文件的编写如下: helloworld:fi ...
- Linux 驱动开发
linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...
- 嵌入式Linux驱动开发日记
嵌入式Linux驱动开发日记 主机硬件环境 开发机:虚拟机Ubuntu12.04 内存: 1G 硬盘:80GB 目标板硬件环境 CPU: SP5V210 (开发板:QT210) SDRAM: 512M ...
- 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)
这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...
- 【转】linux驱动开发的经典书籍
原文网址:http://www.cnblogs.com/xmphoenix/archive/2012/03/27/2420044.html Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书 ...
- Linux驱动开发 -- 打开dev_dbg()
Linux驱动开发 -- 打开dev_dbg() -- :: 分类: LINUX linux设备驱动调试,我们在内核中看到内核使用dev_dbg来控制输出信息,这个函数的实质是调用printk(KER ...
- Linux驱动开发学习的一些必要步骤
1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的makefile 4. 写一简单char驱动,makefile编译通过,可以insmod, ...
- 驱动编程思想之初体验 --------------- 嵌入式linux驱动开发之点亮LED
这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...
- Linux驱动开发必看详解神秘内核(完全转载)
Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html IT168 技术文档]在开始步入L ...
随机推荐
- 如何将你自己的Python package发布到PyPI上
零.前言 最近做了一个小工具,查询IP或者域名的归属地.做完之后想发布到PyPI上,这样大家就可以通过pip来安装了. 在发布的过程中遇到了一些问题,也学到了很多东西.记录到这篇文章中.希望对大家有所 ...
- Oracle基础 (十一)字符串函数
一.字符串函数 LENGTH(char1,char2) SELECT LENGTH('abc def gh') FROM dual; --获取字符串的长度,包含空格 结果: CONCAT(char1, ...
- mount: unknown filesystem type 'LVM2_member'解决方案
系统启动到request_module: runaway loop modprobe binfmt-464c挂起 利用U盘系统,挂载硬盘出现:mount: unknown filesystem typ ...
- Terminate program hitting CTRl+C within GDB
Q: My program is determined to stop its execution by hitting CTRL+C in command window. By now, i hav ...
- for in
1 for in 循环如果遍历的是数组 那么 i 就是数组的索引值 var x; var person=[456,"qwe",890]; for (x in person) ...
- Mac OSX系统搭建React natvie for android 开发环境
1.下载node.js https://nodejs.org/en/ 下载OSX版本 V5.6 2.安装android SDK JDK 3.安装react-native-cli 打开命令行,输 ...
- asp.net 之 GC (垃圾回收机制)
今天抽时间好好整理了下GC相关知识,看了CSDN和博客园的几篇文章,有了一定的简单了解,决定根据个人理解整合一份随笔写下来,望诸位指教. 一:基础问题 1.首先需要知道了解什么是GC? GC如其名,就 ...
- jquery 导航固定的一个实例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- OSPF路由汇总和默认路由设置
目标 掌握OSPF路由汇总的配置 掌握OSPF默认路由的配置 一.——区域间汇总 配置IP,R2四个环回口 R1(config)#inter s1/0 R1(config-if)#ip add 200 ...
- log4net自定义字段写入SqlServer数据库 ASP.net
首先申明,本示例经过本作者亲自试验通过,可以运行 第一步 编写log4net配置文件 此处为Log.xml,该文件放在与Web.config平级的位置 <?xml version="1 ...