在linux内核中添加驱动 不使用模块化加入的方式

来源:互联网 发布:泰勒吉他代购 知乎 编辑:程序博客网 时间:2024/06/05 15:00
最近一直在搞linux方面的开发  在添加驱动的时候碰到一点点小麻烦 ,就是模块化添加驱动**.ko和直接把驱动编译进内核这两点  其实我感觉还是把驱动直接编译进内核比较方便。当然根据不同的需求需要的方式也不尽相同  
编写驱动的基本格式:

#include

#include

#include  

static int hello_init(void){

         printk("hello world\n");

         return 0;

} 

static void hello_exit(void)

{

         printk("bye hello world\n");

}

module_init(hello_init);

module_exit(hello_exit);

 

MODULE_LICENSE("GPL");

MODULE_AUTHOR("LJL");

Makle 的编写

obj-m := hello.o


KERNELBUILD :=/usr/src/linux-headers-3.2.0-24-generic-pae


default:

       make -C $(KERNELBUILD) M=$(shell pwd) modules

clean:

 

       rm -rf *.o  *.ko *.mod.c .*.cmd .tmp_versions *.order *.symvers

记住不是顶行写的一定要空一格TAB键值 也就是四个字符间隔

编译后生成hello.ko  拷贝到文件系统中insmod hello.ko  /rmmod hello.ko

可以试一下

方法二:直接编译进内核

还是以上边那个模板举例子  ,我要写的是字符设备驱动  然后把程序保存在kernel/driver/char/hello.c 。

然后在Makefile中添加变量以及编译路径

例如我再kernel/driver/char/下面的Makefile中的首行添加如下:

OBJ-$(CONFIG-HELLO) += hello.o

然后在/kernel/driver/char/下边的Kconfig 中添加如下语句:(Kconfig的作用大家肯定知道 不在此缀述。)

config HELLO

bool "HELLO DRV"

现在就可以的回到kernel根目录下make menuconfig -》driver》char》就可以选择了选中后直接编译内核就可以了

0 0
原创粉丝点击