`
zn108zn
  • 浏览: 14667 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Linux设备驱动开发入门――Hello world

 
阅读更多

Linux设备驱动开发入门――Hello world
2011年06月20日
  近期做的工作主要有两个,一是将dvsdk_4中的video_copy项目移植到自己的板子上,在参考资料极其匮乏的情况下,本人继续发扬艰苦奋斗的作风和打不死的小强精神,终于将Omap3530中的DSP成功地跑起来了。另一个工作就是开始学习Linux设备驱动开发,为编写新设备的驱动做准备。dvsdk的内容比较庞杂,所做的工作还在整理之中,后面我会发出来。Linux设备驱动开发的资料很多,我只是将我自己所做的工作记录下来,供和我一样的初学者参考,以后再回来查看的时候也方便一些。文中不足之处还请大家多多指点~~
  Linux内核源码有一半是由驱动组成的,驱动在Linux完成其强大功能中扮演重要角色,而在开发自己的系统时,有时会发现无法再现成代码中找到支持特定的硬件的驱动,这是就需要自己动手,才能"丰衣足食"了。^_^
  自古以来,学习一门新编程语言的第一步就是写一个打印"hello world"的程序,在本文中,我们将用同样的方式学习编写一个简单的内核模块设备驱动程序。
  首先,新建一个hello.c文件:
  #include 
  #include 
  MODULE_LICENSE("Dual BSD/GPL");
  static int hello_init(void)
  {
  printk(KERN_ALERT "Hello, world\n");
  }
  static void hello_exit(void)
  {
  printk(KERN_ALERT "Goodbye, cruel world\n");
  }
  module_init(hello_init);
  module_exit(hello_exit);
  这个模块定义了两个函数,一个在模块加载到内核时被调用(hello_init),一个在模块去除时被调用(hello_exit)。module_init和module_exit这几行使用了特别的内核宏来之处这连个函数的角色。另一个特别的宏(MODULE_LICENSE)是用来告知内核,该模块带有一个自由的许可证,没有这样的说明,在模块加载时内核会报错。
  printk函数在Linux内核中定义并且对模块可用,它与标准C库函数printf的行为相似。内核需要它自己的打印函数,因为没有C库的支持。字串KERN_ALERT是消息的优先级。在此模块中指定了一个高优先级,因为使用默认优先级的消息可能不会直接显示,这依赖于运行的内核版本、klogd守护进程的版本以及配置。
  为了编译模块文件,可以创建一个Makefile文件,对本例来说,非常简单,只需一行即可,命令如下:
  obj-m := hello.o
  obj-m之处将要编译成的内核模块列表。*.o 格式文件会自动地由相应的 *.c 文件生成(不需要显式地罗列所有源代码文件)
  如果要把上述程序编译为一个运行时加载和删除的模块,则编译命令如下所示。
  make -C /usr/src/kernels/2.6.25-14.fc9.i686 M=$PWD modules
  这个命令首先是改变目录到用 -C 选项指定的位置(即内核源代码目录,这个参数要根据自己的情况而定)。这个 M= 选项使Makefile在构造modules目标前,返回到模块源码目录。然后,modules目标指向obj-m变量中设定的模块。这里的编译规则的意思是:在包含内核源代码位置的地方进行make,然后再编译 $PWD (当前)目录下的modules。这里允许我们使用所有定义在内核源代码树下的所有规则来编译我们的内核模块。
  编译完毕之后,就会在源代码目录下生成hello.ko文件,这就是内核驱动模块了。我们使用下面的命令来加载hello模块。
  insmod hello.ko
  下列命令完成相反的过程,即卸载hello模块。
  rmmod hello
  这时,你会发现终端里什么输出也没有,不用急,因为printk是内核输出函数,要查看的话,还要执行下列指令。
  dmesg | tail
  这时,在终端里就会打印出内核信息了,如下图所示。
  
  至此,一个最简单的内核模块驱动程序就完成了。^_^
分享到:
评论

相关推荐

    Linux驱动开发之旅(一)--helloworld

    linux驱动开发入门的helloworld,包括代码和解析及参考资料

    编译hello world嵌入式设备驱动程序详细过程.rar

    本文档是最基本的Linux设备驱动程序hello world的技术文档,hello world很简单,但如果没有高手指导,或者你的开发板提供的资料做得不够好,那是足够让你花上一个星期也不一定能够搞出来的。本文档是针对Linux设备...

    linux 第一个HelloWorld驱动带测试源码.rar

    linux 第一个HelloWorld驱动带测试源码,帮助大家入门。

    linux驱动学习去开发入门

    Linux设备驱动程序学习(0)-Hello, world!模块 Linux设备驱动程序学习(0) -Hello, world!模块 一个学习Linux设备驱动程序都会碰到的第一个例程: #include <linux/init.h> #include <linux/module.h> ...

    华清远见嵌入式linux应用程序开发技术详解下载(内部资料).rar

    第11章 嵌入式Linux设备驱动开发   11.1 设备驱动概述  11.2 字符设备驱动编写   11.3 LCD驱动编写实例  11.4 块设备驱动编写  11.5 中断编程   11.6 键盘驱动实现   11.7 实验内容——skull驱动...

    嵌入式Linux应用程序开发标准教程(第2版全)

    接着系统地讲解了嵌入式Linux的环境搭建,以及嵌入式Linux的I/O与文件系统的开发、进程控制开发、进程间通信开发、网络应用开发、基于中断的开发、设备驱动程序的开发以及嵌入式图形界面的开发等,并且还安排了丰富...

    嵌入式Linux应用程序开发详解

    第11章 嵌入式Linux设备驱动开发 353 11.1 设备驱动概述 353 11.1.1 设备驱动简介及驱动模块 353 11.1.2 设备文件分类 354 11.1.3 设备号 355 11.1.4 驱动层次结构 355 11.1.5 设备驱动程序与...

    Linux编程从入门到精通

    第1章 Hello, World 145 1.1 内核模块的Makefiles文件 146 1.2 多重文件内核模块 147 第2章 字符设备文件 149 第3章 /proc文件系统 158 第4章 把/proc用于输入 162 第5章 把设备文件用于输入 170 第6章 启动参数 182...

    Linux编程从入门到精通.rar

    第1章 Hello, World 第2章 字符设备文件 第3章 /proc文件系统 158 第4章 把/proc用于输入 162 第5章 把设备文件用于输入 170 第6章 启动参数 182 第7章 系统调用 185 第8章 阻塞处理 190 第9章 替换printk 199 第10...

    LINUX_HELLO_WORLD_DEVICE_DRIVER

    本程序是Linux字符驱动程序的一个很好的入门程序。在其中有源代码和我写这个程序时候的体会,希望和大家一起共勉。谢谢

    Android驱动开发热门资料.zip

    《Android核心技术与实例详解》PPT Android HAL实例解析 ...Android入门之HelloWorld.pdf Android系统开发--HAL层开发基础(1).doc Android硬件驱动开发关键技术和HAL移植要领.pdf HAL_sensor模型分析.doc

    [14本经典Android开发教程]-8-Linux内核阅读心得体会

    读核感悟 Linux内核启动 从hello world说起 3 读核感悟 Linux内核启动 BIOS 5 读核感悟 Linux内核启动 setup辅助程序 6 读核感悟 Linux内核启动 内核解压缩 8 读核感悟 Linux内核启动 开启页面映射 9 读核感悟 Linux...

    [14本经典Android开发教程]-7-Android编程入门教程

    [14本经典Android开发教程]-6-Android驱动开发入门及手机案例开发分析教程 http://download.csdn.net/detail/cleopard/8388019 剩余8本稍后上传!@或直接从这里寻找@ http://download.csdn.net/user/cleopard/album...

    ARM Cortex-A8和Android 4.x联动报警系统

    第46节:Android 4.x设备驱动开发HelloWorld演示.zip 第47节:Android 4.x字符设备驱动程序.zip 第48节:Android 4.x重要内核数据结构.zip 第49节:Android 4.x字符设备驱动程序示例.zip 第50节:另一种简单的字符...

    firefly-3399开发板入门笔记.zip

    总共8篇笔记,包括u-boot制作、开发环境搭建及内核编译、HelloWorld程序编写及编入内核驱动等。有助于快速入手linux开发。

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    我们这里的工程名为helloworld。 6.这时软件自动添加基本的头文件,因为这个程序我们不需要其他的功能,所以 直接点击Next。 7.我们将base class 选为QDialog 对话框类。然后点击Next。 8.点击Finish,完成工程的...

    新版Android开发教程.rar

    Android Android Android Android 开发入门 System System System System Requirements Requirements Requirements Requirements The sections below describe the system and software requirements for developing...

    SLAM导航机器人零基础实战系列-全部PDF文档整理.zip

    4.如何编写ROS的第一个程序hello_world 5.编写简单的消息发布器和订阅器 6.编写简单的service和client 7.理解tf的原理 8.理解roslaunch在大型项目中的作用 9.熟练使用rviz 10.在实际机器人上运行ROS高级功能...

Global site tag (gtag.js) - Google Analytics