hello world 驱动程序编写
操作系统课程设计选题 驱动程序的编写和安装。
经过一天多的努力,终于把我的第一个驱动程序模块成功编写并实现插入内核和移除,在这里把过程记录下来方便以后查看,也给其他为之困扰的朋友一个建议。
环境: windows 7 下 VMware 9.0 中装 Ubuntu12.04 内核版本为3.5.0-32-generic
搭建驱动开发环境:
相应版本的 gcc、gdb、make 。 内核源代码树。在Ubuntu 下内核源代码一般存放在 /usr/src/ 下。 我的Ubuntu /usr/src/下有两个文件夹 linux-headers-3.5.0-23 , linux-header-3.5.0-23-general 。从名字看这两个文件夹中的东西应该不是系统全部的源代码,打开看里面的东西也很少,一开始我以为这不是系统的全部源代码,没法使用。所以就到www.kernel.org上下载了linux-3.5的内核源代码,(为什么下载Linux3.5 而不是 3.5.0 ,因为网站上没找到)并编译配置。
编写hello world 模块
#include "linux/init.h"
#include "linux/module.h"
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void){
printk(KERN_ALERT "hello , world !");
return 0;
}
static void hello_exit(void){
printk(KERN_ALERT "goodbye , cruel world \n");
}
module_init(hello_init);
module_exit(hello_exit);
然后写GNU扩展的Makefile,为了简单Makefile文件中只写了一行
obj-m := hello.o
编译:
在命令行下:
make -C /usr/src/linux-header-3.5.0-23-general M=/root/Desktop modules
各个参数的意义 : -C 后面的是与当前运行的内核版本相同的内核源代码树目录。 M后面的是内核代码和Makefile所在的文件夹 。 modules 表示编译的目标文件,是必须的。 编译完成后会在当前目录下生成一个hello.ko 模块文件。
插入到内核模块:
insmod hello.ko (执行这一步时系统会输出上面定义的hello_init()函数中的内容)
移除模块:
rmmod hello.ko(执行这一条语句时系统会输出上面定义的hello_exit()函数中的内容)
可能出现的错误:
1. printk(KERN_ALERT "goodbye , cruel world \n");
注意这一串大写字符代表的是优先权的设定,后面不能有逗号。否者会出现 参数过多的错误。
2. -C 后面的参数所指定的目录一定是与当前运行系统内核版本相同的内核源代码树所在目录。我一开始用的是我下载的Linux-3.5 的内核源代码树,结果卡了老半天都是 insmod: error inserting 'hello.ko': -1 Invalid module format。的错误。最后我把这个目录改成 /usr/src/linux-header-3.5.0-23-general 就行了。这个目录是安装系统时就有的。
下面截个图秀一下:
有很多的东西我也没搞明白,正在努力学习中~~~~~
hello world 驱动程序编写的更多相关文章
- 11.ok6410之led驱动程序编写
led驱动程序编写 本文主要包含三部分,led驱动程序led.c编写,编译驱动程序的makefile的编写,以及使用驱动程序的应用程序led_app的编写 一.led.c编写 #include < ...
- 转:Linux网卡驱动程序编写
Linux网卡驱动程序编写 [摘自 LinuxAID] 工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微软垄断的强有力武器,日益受到大 ...
- LCD驱动程序编写
学习目标:编写LCD驱动程序,熟悉根据芯片手册分析时序图,配置寄存器,并测试LCD程序. 一.LCD驱动程序编写 步骤: 1)分配fb_info结构体 2)设置fb_info结构体 a. 固定参数 b ...
- 从零开始写驱动——vfd专用驱动芯片HT16514并行驱动程序编写
前言 一直看别人搞的 vfd 很漂亮,前段时间淘了个 vfd 模块来,但没有模块资料,还好芯片没有打磨的,良心商家啊.周末抽空来研究一下这个东西. 从零开始 打开外壳 测试线路 查看芯片是 HT165 ...
- 〖Linux〗OK6410a蜂鸣器的驱动程序编写全程实录
最近在看一本书,受益匪浅,作者是李宁,下边是编写本次蜂鸣器的全程实录: 1. 了解开发板中的蜂鸣器 1) 查看蜂鸣器buzzer在底板中的管脚信息 2) 查看蜂鸣器在总线中的信息 3) 翻看S3C64 ...
- DM9000C网卡驱动程序编写与测试
一般网卡驱动程序厂商会给我们提供一份模板驱动,我们的工作就是需要根据自己的需要更改这个模板驱动 1.DM9000C的硬件连接 硬件连接图如下所示:它接在S3C2440的BANK4内存控制器上,它只占用 ...
- nandflash驱动程序编写
NAND FLASH是一个存储芯片 那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A" 问1. 原理图上NAND FLASH和S3C2440之间只有数据线, 怎么传输地 ...
- linuxlcd驱动程序编写 mini2440(w35)
先说lcd驱动的框架吧! lcd驱动也有自己的框架,如果没有框架,要我们自己完成所有lcd驱动的代码编写那将是很痛苦的一件事. lcd驱动主要依赖于一个文件,fbmem.c 其实它还依赖几个文件 不 ...
- Linux中断处理驱动程序编写【转】
转自:http://blog.163.com/baosongliang@126/blog/static/1949357020132585316912/ 本章节我们一起来探讨一下Linux中的中断 中断 ...
随机推荐
- iOS 中添加lib型target库的依赖问题
今天在编码时遇到一个问题,总提示我找不到系统库文件. 我的项目结构类似下图 在TestLib中有引用CoreLocation库的类.但是CoreLocation库需要加在PhotoInfoDemo对象 ...
- python文件取MD5
import hashlib def md5sum(filename, blocksize=65536): hash = hashlib.md5() with open(filename, " ...
- 解决ubuntu14.04下Qt 5.3.1下的QtCreator fcitx,ibus不能输入中文
http://my.oschina.net/u/219482/blog/341452 感谢作者 ubuntu 14.04从Qt官网下载的最新版qt,安装过程很顺利,但却发现没办法输入中文(我用的是 f ...
- Struts2标签库
一. 写jsp页面的时候,在struts2中,用的是s标记,先引入标记: <%@ taglib prefix="s" uri="/struts-tags" ...
- Android读书笔记0-从零开始
可以有千万个理由,但是结果就在这里,我开始对Android产生兴趣,于是决定学点啥.啥都不说,单刀入正题. 开发环境 啥都不说,直接上图. 只说Windows平台上,下载完直接解压即可.比起VS安装过 ...
- poj 2635 千进制
转自:http://www.cnblogs.com/kuangbin/archive/2012/04/01/2429463.html 大致题意: 给定一个大数K,K是两个大素数的乘积的值. 再给定一个 ...
- org.apache.log4j与org.apache.commons.logging这两个包有什么区别
apache common logging是一种log的框架接口,它本身并不实现log记录的功能,而是在运行时动态查找目前存在的日志库,调用相关的日志函数,从而隐藏具体的日志实现log4j是具体的日志 ...
- SQL Server连接数据库失败,可能的问题!
SQL Server Configuration Manager中启动服务 SQL Server外围应用配置器中,打开远程IP连接属性 别的应该没什么问题了!
- loadrunner关联的感悟:
首先用URL模式录制脚本: 切换到树模式下: 很容易查看到关联的位置,由此知道产生动态值得请求为nav.pl 但是在html中我们怎么查看关联值在哪里呢: 今天无意中意识到这个问题: 先看树视图脚本:
- Selenium测试规划
开源工具经过近几年的发展,已经出现了一大批成熟的可应用到实际项目中的产品,其中,在WEB自动化测试领域,Selenium支持广泛的浏览器和脚本开发语言,高效的执行效率,获得广泛的应用. 本课程结合Se ...