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中的中断 中断 ...
随机推荐
- 手动创建第一个JSP应用
当按照上一篇文章所说的,配置好了tomcat服务器之后,我们就可以开发运行在tomcat上的第一个web应用了,在对tomcat的目录了解之后,我们知道webapps是存放我们编写相应应用程序的目录, ...
- 2.前端笔记之css
title: 1.前端笔记之CSS date: 2016-04-05 23:05:51 tags: 前端 categories: w3c --- 作者:刘耀 **出处:http://www.liuya ...
- DP:Multiplication Puzzle(POJ 1651)
卡片游戏 题目大意:给你一排卡片,你可以从从中抽一些卡片(但是不能抽最左和最右的卡片),每张卡片上有一个数字,当你从中抽出一张卡片后,你将得卡片的数字和卡片左右两张卡片的数字的乘积的分数,问当剩下最左 ...
- poj 2421 Constructing Roads 解题报告
题目链接:http://poj.org/problem?id=2421 实际上又是考最小生成树的内容,也是用到kruskal算法.但稍稍有点不同的是,给出一些已连接的边,要在这些边存在的情况下,拓展出 ...
- Spring MVC程序中得到静态资源文件css,js,图片
转载自:http://www.blogjava.net/fiele/archive/2014/08/24/417283.html 用 Spring MVC 开发应用程序,对于初学者有一个很头疼的问题, ...
- [] ubuntu 14.04 搜狗拼音输入法安装
1.需要现在ubuntu下安装fcitx和libssh2-1命令如下 sudo apt-get install fcitx sudo apt-get install libssh2-1 注意最好是先卸 ...
- [Android UI] Shape详解 (GradientDrawable)
转载自:http://blog.csdn.net/feng88724/article/details/6398193 在Android开发过程中,经常需要改变控件的默认样式, 那么通常会使用多个图片来 ...
- 制做RPM包
http://nmshuishui.blog.51cto.com/1850554/1583117 [root@NGM ~]# yum install pcre-devel zlib-devel ope ...
- linux 禁止ping
[root@86 sysconfig]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all #关闭ping [root@86 sysconfig] ...
- jquery easy ui 1.3.4 事件与方法的使用(3)
3.1.easyui事件 easyui事件可以在构建的时候就通过属性方式添加上去,比如在panel收缩的时候添加一个事件,在构建的时候代码如下 onCollapse: function () { al ...