您的位置:首页 > 运维架构 > Linux

ubuntu 14.04 64位hello world驱动

2016-04-11 10:37 435 查看

一、环境及版本

主机:vmware虚拟 ubuntu 14.04 64bit

内核版本:3.16.0-30-generic

二、思路介绍

linux下驱动以模块的方式挂载,进而让程序调用。本文也就是一步步生成这个被挂载的模块。此模块以.ko结尾。

三、实现步骤

a、构造内核源码树

先得查看本机的内核版本号,然后下载对应版本的源代码,构造源码树,否则模块无法挂载

1.查看本机版本

$uname -r2.下载相应内核源码包

$sudo apt-get install linux-source-3.13.0

上图左侧两个为系统原有文件夹,*.tar.bz2为下载后的源码包
3.解压源码包

$tar jxvf linux-source-3.13.0.tar.bz2解压完成后将生成上图中/usr/src/linux-source-3.13.0目录
4.编译配置

$sudo make oldconfig中间选项随意,反正本次hello world都是用不上的
5.编译生成

$ sudo make bzImage执行后,应有文件
6.生成module【可不执行】

$ sudo make modules
7. 生成module_install【可不执行】

$ sudo make modules_install

至此源码树构建完成

b、编写驱动文件

8.hello.c

可以在本用户目录下创建文件,位置无关

$ vim hello.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT"Goodbye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);

c、编写Makefile

9.Makefile

在与hello.c同目录下创建Makefile

$ vim Makefile
obj-m := hello.o
#KERNELDIR := /lib/modules/3.13.11-ckt36/build
KERNELDIR := /lib/modules/3.16.0-30-generic/build
PWD := $(shell pwd)

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

d、测试

10.生成模块

在hello.c目录下执行

$ sudo make

同目录下应有如下文件

11.挂载模块

$ sudo insmod ./hello.ko无返回信息输出则说明正常
12.查看模块

$ lsmod |grep hello
$ cat /var/log/syslog | grep world
将返回相关结果

13.卸载模块
$ sudo rmmod hello此时再使用lsmod | grep hello将不再有返回
日志中将记录hello模块退出信息

到此hello world全程完成

四、参考文章

基于linux2.6【http://blog.csdn.net/xiao229404041/article/details/6956099

基于linux3.13 【http://blog.csdn.net/damotiansheng/article/details/44463193

相关原理介绍【http://blog.chinaunix.net/uid-26833883-id-4366882.html

五、相关书籍

1.【Linux设备驱动开发详解-宋宝华】

2.【跟我一起写Makefile】

3.【Linux1.0核心游记】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux生成ko文件