zoukankan      html  css  js  c++  java
  • 写一个简单的hello字符驱动模块

    今天写了一个非常简单的字符驱动模块,源程序问题不大,makefile脚本不知道哪出错了。试了一下午,竟然是少了个"$"来引用变量。特此记录下!

    1.如下为源程序:

     1 #include <linux/init.h>
     2 #include <linux/module.h>
     3 #include <linux/kernel.h>
     4 MODULE_LICENSE("GPL");//许可权限的声明
     5 static int __init hello_init(void)
     6 {
     7     printk(KERN_DEBUG"hello world
    ");//定义输出级别
     8     return 0;
     9 }
    10 static void __exit hello_exit(void)
    11 {
    12     printk(KERN_DEBUG"byebye
    ");
    13 }
    14 module_init(hello_init);//内核模块加载函数
    15 module_exit(hello_exit);//内核模块卸载函数

    2.如下为makefile脚本:

     1 #!/bin/bash
     2 ifneq ($(KERNELRELEASE),)
     3 obj-m := hello.o
     4 else
     5 PWD :=$(shell pwd)
     6 KDIR := /lib/modules/$(shell uname -r)/build
     7 all:
     8         make -C $(KDIR) M=$(PWD)
     9 clean:
    10         rm -rf *.o *.ko *.mod.c *.symvers *.c- *-
    11 endif

    脚本最好在第一行用如下语句规定初始脚本:

    #!/bin/bash

    要不然有可能发生如下报错:

    /bin/sh: -c: line 0 syntax error near unexpected token '('

    我把第五行的  $  符号漏掉了。其余都是常规写法。

    3.make一下。生成如下相关文件:

     4.加载模块,查看模块,卸载模块。

     5.通过dmesg命令查看内核输出信息。

    1)装载模块

     2)卸载模块

  • 相关阅读:
    一个应用程序无法启动错误的解决过程
    C#调用C库的注意事项
    STM32硬件调试详解
    CP2102模块介绍(USB转uart)
    CH340在STM32实现一键下载电路
    LM27313升压转换器
    常用贴片电阻、电容、电感封装
    MAX16054
    在51系列中data,idata,xdata,pdata的区别
    用UGN3503霍尔器件制作的数字指南针_电路图
  • 原文地址:https://www.cnblogs.com/kunshanpipixia/p/13908109.html
Copyright © 2011-2022 走看看