Linux驱动开发之ubuntu下的驱动编译

Linux驱动开发之ubuntu下的驱动编译

Linux驱动开发也是一直在路上,之前一直多是单板上进行实验,今天尝试下在ubuntu下编译一个简单的驱动,一些驱动实验自然也可以在ubuntu上进行,同时也可以减少学习成本,只需要一台PC就行了。
Linux驱动自然和内核版本密切相关,可通过下面的命令来查看下当前使用的内核版本

uneme -r

我使用的是ubuntu12.04它使用的内核版本为3.8.0-29-generic,同时这一点也能通过cd到/usr/src目录下查看下得到证实,/usr/src目录下存在一个linux-headers-3.8.0-29-generic的文件夹,通过名字含义也可得知它是为我们编译内核相关程序提供头文件的位置。
在网上问google大多说编译ubuntu下的驱动先要编译内核,后面发现只要你是为本机编译驱动的话这一步不是必须的,ubuntu安装时自然内核时编译好的,在/usr/src目录下我们也看到了这一点。所以下面可以直接进行驱动的编写,这里先来个最简单的驱动“hello world”。

/* hello.c */
#include 
#include 
MODULE_LICENSE("leo BSD/GPL");
static int hello_init(void)
{
    printk(KERN_ALERT "Hello, world\n");
    return 0;
}
static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, Hello world\n");
}
module_init(hello_init);
module_exit(hello_exit);

接下来我们还需要一个Makefile来编译我们的驱动如下:

obj-m += hello.o
    CURRENT_PATH:=$(shell pwd)
    LINUX_KERNEL_PATH:=/lib/modules/$(shell uname -r)/build
all:
    $(MAKE) -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
    rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions

准备好之前我们只需要执行make之后就能得到我们想要的.ko文件了,我们通过insmod命令来安装我们的驱动到系统,然后通过lsmod命令来查看我们安装的驱动,之后可通过rmmod命令来卸载我们的驱动。
奇怪驱动中安排的打印信息去哪里呢,原来是它们是属于了内核日志被存储到系统日志文件里了,我们可以通过查看这个文件/var/log/syslog来看下我们安排的打印信息如下:

cat /var/log/syslog | grep Hello

到此在ubuntu下的驱动编译工作就可以顺利进行了,下面就是尽情发挥的时候了。

你可能感兴趣的:(ubuntu)