• 设备驱动之HelloWorld


    早先接触设备驱动开发,便写过一个helloworld,今回首,突然发现不会写了,太可怕,熬夜伤脑啊,赶紧记下。

    基本流程:

    写hello.c 和 Makefile文件  --->make ——> sudo insmod hello.ko———> dmesg | tail 查看打印的文字  —-> lsmod查看  ———> sudo rmmod hello

     插入模块后,/sys/module/下可以看到hello模块

    hello.c文件:

    #include <linux/init.h>
    #include <linux/kernel.h>
    #include <linux/module.h>
    MODULE_LICENSE("Dual BSD/GPL");
    static int hello_init(void){
    
        printk(KERN_ALERT "Hello , World
    "); //内核空间里没有printf,用printk
        return 0;
    
    }
    
    static void hello_exit(void){
        printk(KERN_ALERT "Goodbye , World
    ");
    }
    
    module_init(hello_init);
    module_exit(hello_exit);

    Makefile文件:

    ifeq ($(KERNELRELEASE),)
        #KERNELDIR ?= /home/liang/driverModel/linux-3.18.4 #下载的kernel,为编译,无效
        KERNELDIR ?= /lib/modules/3.13.0-44-generic/build   #当前系统的kernel
        PWD := $(shell pwd)
    modules:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules      #make -c 内核路径 M=模块路径 modules
    modules_install:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
    clean:
        rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions 
    else
        obj-m := hello.o
    endif
    1、以专家为榜样,不必自己重新探索
    2、解构技能,找出实现80%效果的那20%
    3、不要一心二用
    4、练习练习再练习!然后获得即时反馈
    5、坚持,不要在低谷期放弃
  • 相关阅读:
    flask-admin章节二:wtforms的使用以及在数据库场景中使用QuerySelectField代替SelectField
    flask-admin章节一:使用chartkick画报表
    flask-admin众博客概述
    python smtplib发送邮件遇到的认证问题
    python logging模块可能会令人困惑的地方
    Markdown
    SpringBoot-启动过程
    SpringBoot-目录
    AbstractQueuedSynchronizer
    ThreadLocal
  • 原文地址:https://www.cnblogs.com/zhongyuan/p/4302966.html
Copyright © 2020-2023  润新知