Linux 第一个驱动程序编写

环境

 Linux

内核升级

  • 下载标准内核源码
  • 链接选择合适的版本,我选择的是4.3.1。
  • 创建一个文件夹 放入其中,解压。进入第二层目录。
  • 执行make menuconfig,进入 Processor type and feature选项,回车进入Processor family选项,选择 Generic-x86-64保存退出。
  • make
  • make modules
  • make modules_install
  • make install
  • reboot
  • 重启后uname -r查看新内核版本。

开始编写Hello World驱动程序

hello.c

#include              /* 定义了一些相关的宏 */
#include            /* 定义了模块需要的*/

static int hello_init(void)
{
    printk(KERN_ALERT "Hello, world\n");    /* 打印hello World */
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, world\n");  /* 打印Goodbye,world */
}

module_init(hello_init);   /* 指定模块加载函数 */
module_exit(hello_exit);   /* 指定模块卸载函数 */
MODULE_LICENSE("Dual BSD/GPL");

Makefile

ifeq ($(KERNELRELEASE),)

    # Assume the source tree is where the running kernel was built
    # You should set KERNELDIR in the environment if it's elsewhere
    KERNELDIR ?= /linux-2.6.29.4/linux-2.6.29.4
    # The current directory is passed to sub-makes as argument
    PWD := $(shell pwd)

modules:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

modules_install:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

clean:
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

.PHONY: modules modules_install clean

else
    # called from kernel build system: just declare what our modules are
    obj-m := hello.o 
endif

修改下KERNELDIR 路径就可以了。

insmod加载模块

  • insmod hello.ko

以上就是全部过程了=_=

你可能感兴趣的:(Linux 第一个驱动程序编写)