Linux hello world简单驱动实现

Ubuntu下简单的hello world驱动实现

hello.c:驱动文件

#include <linux/init.h>
#include <linux/module.h>
 
static int hello_init(void){
    printk(KERN_ALERT "hello world");
    return 0;
}
 
static int hello_exit(void){
    printk(KERN_ALERT "exit");
    return 0;
}
module_init(hello_init);
module_exit(hello_exit);
 
MODULE_AUTHOR("xxx");

Makefile:
        obj-m注意是m;一开始写成M了,Building modules,stage 2. MODPOST 0 modules.
        m表示不会编译到ZImage,会生成一个独立的.ko文件 (-y 表示编译进ZImage)

        Ubunt源码版本是4.4.0-142,由于我下载的是3.13.11,下不到对应版本的,所以在insmod hello.ko,会出现 ERROR: could not insert module hello.ko: Invalid module format

        解决方法:将KDIR转移到系统的驱动生成的路径中 /lib/modules/4.4.0-142-generic/build
        下载对应系统可参考https://blog.csdn.net/weixin_42048417/article/details/80811484
        ismod rmmod的打印信息 dmesg | tail 可以看到

obj-m += hello.o
##源码位置
##KDIR := /lib/modules/3.13.11-ckt39/build
KDIR := /lib/modules/4.4.0-142-generic/build
PWD ?= $(shell pwd)
all:
        make -C $(KDIR) M=$(PWD) modules
clean:
        rm -rf *.o *.symvers *.order

        之前写的Android.mk的编写规则(感觉和Makefile差不多先留着,没仔细去区分);当需要使用JNI时,需要创建native工程。Android.mk就是makefile配置文件,使得C/C++的代码变成成动态库

ifeq的用法:

ifeq($(变量值),变量值)
endif 

        如果后面没有变量值,则是判断前面有没有存在

与操作
        如果要判断两个值都存在才执行,则使用

 ifeq($(value1)$(value2),)

        如果两个值都有具体的值,则使用"_"

ifeq($(value1)_$(value2),V1_V2);

或操作
         如果要判断两个值只需一个存在,则使用

ifneq($(findstring $(value1)$(value2),V1 V2),)

         $(findstring< find >< in >) 从in中寻找find 如果找到则返回find;否则返回空字符串;
         $(findstring a, a b c) = a
         $(findstring a, b c) = " "

赋值运算
         = 是最基本的赋值
         := 是覆盖之前的值
         ?= 是如果没有赋值过就赋予等候后面的值
         += 是添加等号后面的值

include的用法
         如果没有指定绝对路径和相对路径的话,make会在当前目录下首先寻找
         如果make执行时 make -l 或 make --include-dir 则在指定目录下寻找
         include foo.make a.mk b.mk c.mk e.mk f.mk
         -include 若没有找到指定的文件,不会中断make;只有不能完成最终目标重建时才会退出
         sinclude 功能同上

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值