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 ...
随机推荐
- 使用Python多线程犯的错误总结
在使用Python多线程的时候,在使用多线程编程的时候,由于对于变量作用域和多线程不是很熟悉,导致在使用多线程的时候,犯了低级的错误. 第一个错误: 在多线程中使用全局变量,导致多个线程修改全局变量. ...
- arrowTip 提示
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 实现水电气一卡通 IC卡扇区分配
现在市面上我们接触到的IC卡大部分都是分为16个扇区,分别标注为0-15区.而实现一卡通的秘密就在这16个扇区之中,一个,或者一类功能用途读取这一个扇区,除了一般默认0扇区不用外,其他扇区可以被分别加 ...
- 5路数字量输入Di,5路大电流继电器输出,可电脑控制,支持modbus协议工业模块,支持和DCS,PLC无缝对接。
数字量输入输出模块MRD-5060具有5路DI,5路继电器输出,1路485接口(支持Modbus RTU),能实现5路DI(干接点输入)转485的采集,也可以通过485控制5路继电器(5A30VDC, ...
- API 设计: RAML、Swagger、Blueprint三者的比较
API设计工具中常常会拿RAML.Swagger.Blueprint这三种工具进行讨论比较,它们都是用来描述和辅助API开发的,只是它们之间的侧重有所不同. RAML RAML(RESTful API ...
- JavaScript实现定点圆周运动
目是这样的:假设有一定点(400px,300px),通过JavaScript使一个直径20px的圆点以 r=180px 为半径围绕该点做匀速圆周运动. 这个问题的整体实现思想应该是这样的,看到“半径” ...
- Mirantis Fuel fundations
Mirantis Nailgun is the most important service a RESTful application written in Python that contains ...
- 将Dictionary序列化为json数据 、json数据反序列化为Dictionary
需要引用System.Web.Extensions dll类库 /// <summary> /// 将json数据反序列化为Dictionary /// </summary> ...
- 元数据(meta-data)
本章所介绍的元数据的知识,可能在定制系统时会用到.因为那是后需要修改底层框架的一些内容 一.元数据的定义 在AndroidManifest.xml中如下书写: <activity android ...
- Android 弹出通知Toast的使用
//官方帮助文档:http://wear.techbrood.com/guide/topics/ui/notifiers/toasts.html <LinearLayout xmlns:andr ...