ubuntu下编译内核驱动。
目的:
1. 驱动热身。网上有很多类似的文章可供参考。
2. 在操作系统中, 编写这个设备的驱动。
3. 为写qemu的watchdog驱动练手。
有朋友问make的 watchdog驱动 需要什么准备,所以写这个blog。
环境:
ubuntu 12.04.4
热身:
首先编写一个简单的 hello world驱动。
耗时(基于熟悉linux环境和操作系统的条件下):
1. 安装操作系统 30-60分钟。
2. 配置操作系统 30分钟。主要是配置中文书法。无其他特殊的配置。
3. 代码编写运行 40分钟。
查看自己的内核版本:
Search for kernel version (optional)(搜寻内核的版本)
Type the following command:
$ apt-cache search linux-headers-$(uname -r)
Install linux-header package under Debina or Ubuntu Linux(更新内核的版本)
Type the following command:
$ sudo apt-get install linux-headers-$(uname -r)
代码:
$(MAKE) -C $(KERNELDIR)M=$(PWD) modules_install
安装驱动(可能需要重启):
编译
$ make
挂载驱动
$ sudo insmod hello.ko
卸载驱动
$ sudo rmmod hello
查看驱动, 最好加上管道 |more指令 或者|grep
lsmod |grep hello
系统启动的时加载模块
文件 /etc/modules 设置加载的内核,这个文件里包含了系统启动的时候要加载的模块,每一个模块一行。
首先 hello 模块 拷贝到 /lib/modules/$(uname -r)/kernel/drivers.
建议的步骤:
(a)为 hello 模块建立一个目录
$ sudo mkdir -p /lib/modules/$(uname -r)/kernel/drivers/hello
(b)拷贝模块
$ sudo cp hello.ko /lib/modules/$(uname -r)/kernel/drivers/hello/
(c)编辑 /etc/modules 文件
$ sudo vim /etc/modules
加上下面一行
hello
(d)重启查看是否加载。
$ sudo cat /proc/modules
或者
$ sudo lsmod | less
查看程序的输出:
如果syslog没有输出, 查看 /var/log/message 里面的信息
# tail -f /var/log/message
注:
insmod的本质就是将ko文件与运行的内核进行链接的过程。类似于编译helloworld的链接过程。
链接必然需要先进行编译,以便确定所需的外部符号(EXPORT_SYMBOLS)是否存在,因为有些符号(函数或全局变量)在内核中。在驱动中如果使用到这些符号,必须预留一个位置,insmod时进一步确定这些符号的具体位置(符号绑定)。
如果内核都没有编译过,怎么知道这些符号有没有编入内核中
ubuntu下编译内核驱动。的更多相关文章
- Ubuntu下编译内核
一.下载源代码和编译软件的准备 下载内核源代码:http://www.kernel.org/ 注意,点击2.6.25内核的F版,即完整版. 如果你懒得去网站点联接,运行下列命令: 代码: $cd ~ ...
- ubuntu 下编译内核
目的: 1. 练习.网上有很多类似的文章可供参考. 2. 为写qemu的watchdog驱动练手. 有朋友问make的 watchdog驱动 需要什么准备,所以写这个blog. 环境: ubuntu ...
- linux下编译运行驱动
linux下编译运行驱动 嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发. 按照如下方 ...
- RedHat5.8 编译内核驱动 合成initrd.img
/******************************************************************* * RedHat5.8 编译内核驱动 合成initrd.img ...
- ubuntu下编译caffe
Ubuntu下编译caffe 纯粹是个人编译的记录.不用CUDA(笔记本是amd卡,万恶的nvidia):不手动编译依赖包(apt-get是用来干啥的?用来直接装二进制包,以及自动解决依赖项的) ca ...
- ubuntu下编译VLC
ubuntu下编译VLC 标签(空格分隔): ubuntu vlc 视频 编译 [TOC] 1.下载VLC源码包并解压 VLC的源码包在VLC的官网有,可以直接下载.也可以使用git来clone一个. ...
- 在Ubuntu下编译wpa_supplicant
最近在研究WiFi联盟的多屏互动协议Miracast,其中需要用到wpa_supplicant,编译中遇到了一些问题,经过一下午的折腾也都解决了,下面分享给各位. 一.编译需要用到三个库源码包,分别是 ...
- 在Ubuntu下编译Assimp库
在Ubuntu下编译Assimp库 怎样在Ubuntu下编译Assimp库?这是我曾经编译成功后做的笔记,供參考. 1.去以下的站点去下载Assimp库: http://assimp.sourcefo ...
- ubuntu下编译java程序
ubuntu下编译java程序 首先需要安装jdk,并配置好相应环境变量 下面以简单的HelloWorld为例 文件名为HelloWorld.java java代码: public class Hel ...
随机推荐
- SQLServer 2008 R2 清空日志文件
USE [master]GOALTER DATABASE FH2_SJH SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE FH2_SJH SET RE ...
- 在Linux手动把文件转码的方法,防止乱码出现
iconv -f utf-8 -t gb2312 report.html > report_test.html
- 从一个实例,看new FunctionName()的内部机制
下面的代码: function Dog(name) { this.name = name; Dog.prototype = { shout: function() { alert("I am ...
- mongodb与mysql相比的优缺点
与关系型数据库相比,MongoDB的优点:①弱一致性(最终一致),更能保证用户的访问速度:举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精确值 ...
- egret-android-support-gradle版
从3.1.3开始,Egret已经实现了Gradle构建!所以下文你爱看不看! 迟钝的Egret从3.1.3版本才开始支持Gradle,而笔者早在1.6.x版本就已经支持了,说明什么?说明Egret在某 ...
- wx.button
wx.Button A button is a control that contains a text string, and is one of the most common elements ...
- Android:实现仿 美团/淘宝 多级分类菜单效果
本例要实现的是诸如美团/淘宝/百度糯米 多级分类菜单效果.当分类数量许多时能够考虑採用两级分类.而诸如美团这样的表现方式是一个不错的选择. 首先上效果图: 主要代码: 1. PopupWin ...
- Web API核查表:设计、测试、发布API时需思考的43件事[转]
Web API核查表:设计.测试.发布API时需思考的43件事 当设计.测试或发布一个新的Web API时,你是在一个原有的复杂系统上构建新的系统.那么至少,你也要建立在HTTP上,而HTTP则是 ...
- jquery第四期:对象转换的小实例
为了更清晰的看懂jquery对象是一个数组,我们这一期来改变每一个<li>中的值,在前面加上序号. 代码如下: <!DOCTYPE html PUBLIC "-//W3C/ ...
- ASP.NET动态引用WebService接口
尊重原著作:本文转载自http://www.mhzg.net/a/20124/20124912180589.html 有经验的朋友都知道,通常我们在引用webservice的时候,是在项目中就添加了引 ...