zoukankan      html  css  js  c++  java
  • 操作系统学习入门1

    内核模块编程入门:

    一、准备工作:

      1、打开一个终端,输入命令:

        $ uname -r
        结果:5.5.2-1-MANJARO

      2、安装必要的内核文件:

        sudo pacman -S linux55-headers

        正在解析依赖关系...
        正在查找软件包冲突...

        软件包 (1) linux55-headers-5.5.2-1

        全部安装大小: 47.53 MiB
        净更新大小: 47.53 MiB

        :: 进行安装吗? [Y/n]  

        按下回车,安装

      3、准备代码目录:

        mkdir  -p  drivers/hello

        cd  drivers/hello

    二、编辑源代码和make文件:

      1、使用vim编辑源码hello.c

     1 #include <linux/module.h>
     2 #include <linux/kernel.h>
     3 
     4 static char *name = "guochao";
     5 static int count = 5;
     6 
     7 module_param(name, charp, S_IRUGO);
     8 module_param(count, int, S_IRUGO);
     9 
    10 static int hello_init(void){
    11     int i = 0;
    12     for(i = 0; i < count; i++){
    13         printk(KERN_INFO"Hello %d, %s! This is start%d
    ", i, name, i);
    14     }
    15     return 0;
    16 }
    17 
    18 static void hello_exit(void){
    19     int i = count;
    20     for(i = count; i > 0; i--){
    21         printk(KERN_INFO "Hello %d, %s! This is exit %d
    ", i, name, i);
    22     }
    23 }
    24 
    25 MODULE_LICENSE("GPL");
    26 module_init(hello_init);
    27 module_exit(hello_exit);

      代码比较简单,不多说明

    Makefile文件为:

     1 KVERS=$(shell uname -r)
     2 #kernel modules
     3 obj-m +=hello.o
     4 
     5 #Specif flags for the module compilation.
     6 #EXTRA_CFLAGS=-g -O0
     7 
     8 buile:kernel_modules
     9 
    10 kernel_modules:
    11     make -C  /lib/modules/$(KVERS)/build M=$(CURDIR) modules
    12 
    13 clean:
    14     make -C  /lib/modules/$(KVERS)/build M=$(CURDIR) clean

    目录下文件为:

      $ ls
      hello.c  Makefile

    三、模块的处理

      0、编译模块  

      $ make
      make -C /lib/modules/5.5.2-1-MANJARO/build M=/home/nication/drivers/hello modules
      make[1]: 进入目录“/usr/lib/modules/5.5.2-1-MANJARO/build”
        CC [M] /home/nication/drivers/hello/hello.o
        Building modules, stage 2.
        MODPOST 1 modules
        CC [M] /home/nication/drivers/hello/hello.mod.o
        LD [M] /home/nication/drivers/hello/hello.ko
      make[1]: 离开目录“/usr/lib/modules/5.5.2-1-MANJARO/build”

      make后的文件如下:

      $ ls
      hello.c  hello.ko  hello.mod  hello.mod.c  hello.mod.o  hello.o  Makefile  modules.order  Module.symvers

      以下操作用root用户:

      1、加载模块

      # insmod hello.ko                           //加载模块

      # lsmod | grep hello                       //查看加载的模块

      hello                  16384  0  

      # dmesg | grep Hello                     //查看模块的输出信息
      [11817.505058] Hello 0, guochao! This is start0
      [11817.505062] Hello 1, guochao! This is start1
      [11817.505064] Hello 2, guochao! This is start2
      [11817.505066] Hello 3, guochao! This is start3
      [11817.505068] Hello 4, guochao! This is start4 

      2、卸载模块

      # rmmod hello                                //卸载模块

      # lsmod | grep hello                       //查看加载的模块

      # dmesg | grep Hello                     //查看模块的输出信息 

      [12466.702875] Hello 5, guochao! This is exit 5
      [12466.702880] Hello 4, guochao! This is exit 4
      [12466.702882] Hello 3, guochao! This is exit 3
      [12466.702884] Hello 2, guochao! This is exit 2
      [12466.702885] Hello 1, guochao! This is exit 1

      3、清除无用代码:

      make clean
       

      

  • 相关阅读:
    js写的ajax
    String根据、拆分
    Excel数据批量导入到数据库2
    Excel数据批量导入到数据库
    List去重复(不是最简单,但绝对是最易理解)
    struts中Cookie实现记住密码
    ==与equals的区别
    javascript实现登录验证码
    Javascript实现二级select联动
    javascript的假查询
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/12291771.html
Copyright © 2011-2022 走看看