【开发日常】【module】Linux写一个简单的ko模块

本来打算写一个简单的demo去验证sipn_lock、mutex_lock死锁的,

结果代码写好了,忘了怎么编译成ko了...

还是自己手动记一下,方便以后找资料。

(有很多的博客其实主要内容都是别人的,自己只是照着做了一遍,然后把其中的试错都记录下来,防止下一次再用时再出错)


不废话,直接照做:

写一个.c代码

//下面是驱动源代码 

#include <linux/init.h>  
#include <linux/module.h>   

static int hello_init(void)  
{  
    printk("Hello, World !\n");  
    return 0;  
}  

static void hello_exit(void)  
{  
    printk("Goodbye, World !\n");  
}  

module_init(hello_init);  
module_exit(hello_exit);  

MODULE_LICENSE("Dual BSD/GPL");  

写一个Makefile文件

//下面是Makefile代码

#!/bin/bash
#通知编译器我们要编译模块的哪些源码
#这里是编译 hello.c这个文件编译成中间文件 hello.o
obj-m := hello.o

#声明当前的架构,这里用户需要根据实际情况选择架构类型
export ARCH=arm
#声明交叉编译工具链,这里用户需要根据实际情况选择对应的工具链
export CROSS_COMPILE=arm-himix200-linux-

#源码目录变量,这里用户需要根据实际情况选择路径
#下面作者是将Linux的源码目录
KERDIR := /home1/zhugeyifan/source/K5/3519av100/packages/linux_lsp/kernel/linux-4.9.37/

#当前目录变量
CURDIR := $(shell pwd)

#make命名默认寻找第一个目标
#make -C就是指调用执行的路径
#$(KERDIR)Linux源码目录,作者这里指的是.../linux-4.9.37/
#$(CURDIR)当前目录变量
#modules要执行的操作
#注意!假如复制到Makefile后,下行提示红色,把 all:下面一行的make前面的空格删除后添加(Tab)制表符
all:
    make -C $(KERDIR) M=$(CURDIR) modules

#make clean执行的操作是删除后缀为o的文件
#注意!假如复制到Makefile后,下行提示红色,把 clean:下面一行的make前面的空格删除后添加(Tab)制表符
clean:
    make -C $(KERDIR) M=$(CURDIR) clean

编译

直接执行make,编译生成ko模块
作者有遇到如下报错:

make -C /home1/zhugeyifan/source/K5/3519av100/packages/linux_lsp/kernel/linux-4.9.37/ M=/home1/zhugeyifan/source/K5/3519av100/packages/linux_lsp/kernel/test_ko/hello modules
make[1]: Entering directory `/home1/zhugeyifan/source/K5/3519av100/packages/linux_lsp/kernel/linux-4.9.37'

  ERROR: Kernel configuration is invalid.
         include/generated/autoconf.h or include/config/auto.conf are missing.
         Run 'make oldconfig && make prepare' on kernel src to fix it.


  WARNING: Symbol version dump ./Module.symvers
           is missing; modules will have no dependencies and modversions.

  CC [M]  /home1/zhugeyifan/source/K5/3519av100/packages/linux_lsp/kernel/test_ko/hello/hello.o
In file included from <command-line>:0:0:
././include/linux/kconfig.h:4:32: fatal error: generated/autoconf.h: No such file or directory
 #include <generated/autoconf.h>
                                ^
compilation terminated.
make[2]: *** [/home1/zhugeyifan/source/K5/3519av100/packages/linux_lsp/kernel/test_ko/hello/hello.o] Error 1
make[1]: *** [_module_/home1/zhugeyifan/source/K5/3519av100/packages/linux_lsp/kernel/test_ko/hello] Error 2
make[1]: Leaving directory `/home1/zhugeyifan/source/K5/3519av100/packages/linux_lsp/kernel/linux-4.9.37'
make: *** [all] Error 2

原因是内核没有编译,先处理内核编译


生成

编译成功后,生成文件如下:

zhugeyifan@DriverTeam:~/hello/ls
hello.c  hello.ko  hello.mod.c  hello.mod.o  hello.o  Makefile  modules.order  Module.symvers

参考资料

    ERROR: Kernel configuration is invalid.
    hello.ko---Makefile

    Linux下hello.ko内核模块制作的全过程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Evan_ZGYF丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值