Linux驱动开发学习笔记(1):LINUX驱动版本的hello world

简介:
1、关于目录
    /lib/modules/2.6.9-42.ELsmp/build/   这个是内核源码所在的目录
    一般使用这样的命令进入这个目录:cd /lib/modules/$(uname -r)/build/
   这个目录实际上指向了:/usr/src/kernels/2.6.9-42.EL-smp-i686

2、编译驱动所使用的makefile
    实际上编译驱动的时候是使用预先提供的一个makefile的,位置在:
/lib/modules/$(uname -r)/build/Makefile
    注意:M是大写的

3、网上抄录的Linux驱动Hello world的源码:
// 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");
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_ALERT "goodbye!\n");
}

module_init(hello_init);
module_exit(hello_exit);

4、写个makefile来编译这个驱动:(版本一,最简单的)
#下面这行是文件Makefile的内容,注意M是大写的
obj-m := hello.o

把hello.c和Makefile保存在同一目录,然后执行:
make -C /lib/modules/`uname -r`/build SUBDIRS=$PWD modules
这样驱动就编译好了,成果是hello.ko文件。
注意:makefile一定要写成Makefile,如果写成makefile就编译不过。(折腾啊,就这一步耗了N多时间)

5、再写另一种Makefile:(版本二:最省事的)
#以下是Makefile文件的内容
obj-m := hello.o
KERNEL_DIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
    make -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules
clean:
    rm *.o *.ko

然后执行:make就编译成功了,命令行不再加参数,很省事。
注意:all: 和clean:下面的行,前面是一个TAB键

6、加载驱动:
执行
insmod ./hello.ko
屏幕上没反应。(因为我是在WINDOWS上用远程终端连上去的嘛)
OK,先让时光倒流,回到加载驱动以前,先另开一个窗口,执行:
tail -f /var/log/message
然后在原来的窗口里执行:
insmod ./hello.ko
哈哈,/var/log/message文件里面看见了盼望已久的hello world!

7、查看驱动:
lsmod   看见 hello这个驱动在其中

8、卸载驱动:
rmmod hello 

看见/var/log/message里显示了goodbye



本文转自einyboy博客园博客,原文链接:http://www.cnblogs.com/einyboy/p/3324225.html,如需转载请自行联系原作者。



目录
相关文章
|
12天前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
12天前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
2月前
|
Java Linux API
Linux设备驱动开发详解2
Linux设备驱动开发详解
33 6
|
2月前
|
消息中间件 算法 Unix
Linux设备驱动开发详解1
Linux设备驱动开发详解
33 5
|
2月前
|
Ubuntu NoSQL Linux
Linux内核和驱动
Linux内核和驱动
19 2
|
2月前
|
数据采集 Linux
Linux源码阅读笔记20-PCI设备驱动详解
Linux源码阅读笔记20-PCI设备驱动详解
|
3月前
|
存储 JSON Linux
|
1月前
|
Linux API
Linux里的高精度时间计时器(HPET)驱动 【ChatGPT】
Linux里的高精度时间计时器(HPET)驱动 【ChatGPT】
|
3月前
|
Oracle 关系型数据库 Linux
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
通过这一连串的步骤,可以专业且有效地在Linux下为Qt编译Oracle驱动库 `libqsqloci.so`,使得Qt应用能够通过OCI与Oracle数据库进行交互。这些步骤适用于具备一定Linux和Qt经验的开发者,并且能够为需要使用Qt开发数据库应用的专业人士提供指导。
104 1
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
|
2月前
|
Linux
【linux】【驱动】<specifier>-map-pass-thru讲解
【linux】【驱动】<specifier>-map-pass-thru讲解
17 0