【Linux 驱动】驱动开发第一步

一,环境搭建步骤

1)下载Linux源码
1> ~#apt-cache search linux-source
出现:linux-source - Linux kernel source with Ubuntu patches
linux-source-3.0.0 - Linux kernel source for version 3.0.0 with Ubuntu patches
2>~#apt-get   install linux-source-3.0.0
下载完成后,在/usr/src/下会出现一个linux-source-3.0.0.tar.bz2。解压:      tar  jxvf   linux-source-3.0.0.tar.bz2
3>然后在Linux内核源码目录/usr/src/linux-source-2.6.32目录下面用老的方法配置好Linux内核:
~#make oldconfig
4>编译内核:~#make     //大概需要一个小时
5>编译模块:~#make modules
6>安装模块:~#make modules_install

以上步骤完成后,会在/lib/modules 目录下生成一个文件夹3.0.0-12-generic

二,hello.c

#include <linux/init.h>   #include <linux/module.h>   MODULE_LICENSE("Dual BSD/GPL");      static int hello_init(void)   {      printk(KERN_ALERT "Hello, world\n");  //printk 跟printf 类似,只是printk运行在内核态      return 0;   }   static void hello_exit(void)   {      printk(KERN_ALERT "Goodbye, cruel world\n");   }      module_init(hello_init);   module_exit(hello_exit);  

三,Makefile

ifneq ($(KERNELRELEASE),)     obj-m :=hello.o     else     KERNELDIR ?= /lib/modules/$(shell uname -r)/build     PWD := $(shell pwd)     default:         $(MAKE) -C $(KERNELDIR) M=$(PWD) modules     endif   

四,~#make   //生成文件如下

hello.c   hello.ko     hello.mod.o  Makefile   modules.order
hello.c~  hello.mod.c  hello.o      Makefile~  Module.symvers

1>装载目标模块:~#insmod  ./hello.ko

     ~#lsmod  //查看目前安装的驱动模块,有hello

2>模块装载触发hello.c的init()方法,输出hello world,如果没有的话,是因为其将输出放到/var/log/syslog中去了。打开便可以看见你的结果!

卸载目标模块命令是:~#rmmod ./hello.ko


 总结:从此我们迈出了Linux驱动开发的第一步


代码深度解析:

1)查找文件位置:

#include <linux/init.h>//这个头文件包含了你的模块初始化与清除的函数   #include <linux/module.h>//包含了许多符号与函数的定义,这些符号与函数多与加载模块有关  

     find / -name  module.h

     我的文件位置在:/usr/src/linux-source-3.0.0/include/linux/module.h   //其余的位置也有好多,但是这个文件位置才是正解

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://127.0.0.1/wyyxdp.html