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中修改环境变量及生效方法
- linux撰写策略路由
- 嵌入式Linux开发之Bootloader(Boot-XSBase27024)原理简介
- Linux 下ffmpeg视频转码实战一安装
- 嵌入式linux下的QT的环境变量
- CentOS 安装配置 Fail2Ban
- Linux下配置nerdTree
- centos7 创建本地yum
- Linux strace命令的妙用
- 近 100 个 Linux 常用命令大全
- linux工作队列
- linux修改时区不用重启的方法 [
- Notepad++远程连接Linux系统
- ***阿里云linux 下怎么配置虚拟主机
- linux anaconda 和 jupyter配置
- mac上制作linux系统U盘安装盘
- linux二进制分发软件包的安装和卸载
- linux下怎么找到jdk的安装路径
- 修改linux文件权限命令:chmod
- 在Linux下运行C语言程序