ubuntu 14.04 64位hello world驱动

一、环境及版本

主机:vmware虚拟 ubuntu 14.04 64bit

内核版本:3.16.0-30-generic

二、思路介绍

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

三、实现步骤

a、构造内核源码树

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

1.查看本机版本

$uname -r

2.下载相应内核源码包

$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核心游记】

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值