• [driver]简单地hello驱动加载


    转自:http://blog.chinaunix.net/uid-24264134-id-98061.html

    Linux设备驱动会以内核模块的方式出现,因此,内核模块也成了我们编写驱动的入门知识,这是一个最简单的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, This is my module! ");
        return 0;
    }

    static void hello_exit (void)
    {
        printk (KERN_ALERT "Bye, This is my module! ");
    }

    module_init(hello_init);
    module_exit(hello_exit);

     这个模块只包含内核模块加载函数,卸载函数和对Dual BSD/GPL许可权限的声明及一些描述信息。

    Makefile文件如下:

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

    编译模块:在模块目录下输入make命令即可,编译后会生成hello.ko文件
    插入模块:sudo insmod hello.ko
    可以输入:dmesg查看日志信息,发现末尾多了一行Hello, This is my module! 这是我们在模块中写入的信息
    删除模块:sudo rmmod hello
    再看日志发现有多了一行:
    Bye, This is my module! 
    OK,第一个模块完成,向驱动迈出了第一步。

    -C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 表明然后返回到当前目录继

  • 相关阅读:
    JavaScript 按位与和逻辑与
    JavaScript跨域问题
    前端-知识+能力感触
    堆&堆排序
    Java中的数据类型和引用
    基础算法之选择排序
    基于TCP协议的网络通讯流程
    Java基础之封装
    个人主页
    算法基础之希尔排序
  • 原文地址:https://www.cnblogs.com/aaronLinux/p/6979920.html
Copyright © 2020-2023  润新知