老师布置了linux实验作业,本身不打算写了,反正也不交实验报告,但刚好项目也需要,所以就研究了makefile。不过还是要批评自己,怎么能这么的颓废呢?

刚开始做的时候出现了这样的错误,代码如下:

TARGET=helloworld
KDIR=/usr/src/linux-headers-4.4.--generic
PWD=$(shell pwd)
#modules-objs:= **.o #生成模块名所需要的目标文件
obj-m:=$(TARGET).o default:
make -C $(KDIR) M=$(PWD) modules _PHONY:install
install:
insmod $(TARGET).ko _PHONY:uninstall
uninstall:
rmmod $(TARGET).ko _PHONY:clean
clean:
-rm *.ko
-rm *.o
-rm -f Mo*
-rm *.mod.*
make -C $(KDIR) M=$(PWD) clean

经过研究发现是obj-m:=$(TARGET).o这个地方出了错,o被我写成了O。导致找不到文件。细节问题一定要注意!!!

现在分析一下代码:TARGET=helloworld & obj-m:=$(TARGET).o这两句话是确定要生成的模块

modules-objs :这个变量是说明声称模块modules需要的目标文件 格式要求   <模块名>-objs := <目标文件>

切记:模块的名字不能取与目标文件相同的名字。如在这里模块名不能取成 mymod;
KDIR   :这是我们正在运行的操作系统内核编译目录。也就是编译模块需要的环境。
M=     :指定我们源文件的位置
PWD   :这是当前工作路径$(shell   )是make的一个内置函数。用来执行shell命令。

make -C $(KDIR) M=$(PWD) modules

其中-C后指定的是Linux内核源代码的目录,我们需要其中一个目录下的Modules文件,而M=后指定的是helloworld.c和Makefile所在的目录

编译过程中,经历了这样的步骤:先进入Linux内核所在的目录,并编译出helloworld.o文件,运行MODPOST会生成临时的helloworld.mod.c文件,而后根据此文件编译出helloworld.mod.o,之后连接helloworld.o和helloworld.mod.o文件得到模块目标文件helloworld.ko,最后离开Linux内核所在的目录。

使用insmod helloworld.ko 将该Module加入内核中。在这里需要注意的是要用 su 命令切换到root用户,否则会显示如下的错误:insmod: error inserting 'helloworld.ko': -1 Operation not permitted

使用rmmod hello来卸载模块,同样,使用dmesg可以看到打印出的内容。

内核模块的打印信息一般不会打印在终端上。驱动的打印都在内核日志中,我们可以使用dmesg命令查看内核日志信息。dmesg|tail

在写makefile过程中遇到的问题的更多相关文章

  1. 写js过程中遇到的一个bug

    <div class="func_Div" id="xxcx"><span>信息查询</span>              ...

  2. Latex — 写作编译过程中遇到问题记录与总结

    最近在训练的时候,又开始用Latex进行写作.碰到了很多问题,将问题进行记录与总结. 一.输出中文的问题 由于写作的时候用的是中文,而之前用的是英文,故碰到的第一个问题就是中文的问题.我之前下的是Wi ...

  3. 如何自己编译apue.3e中代码 & 学习写makefile

    本来是搜pthread的相关资料,看blog发现很多linux程序员都看的一本神书<APUE>,里面有系统的两章内容专门讲pthread(不过是用c语言做的代码示例,这个不碍事,还是归到原 ...

  4. 【已解决】Makefile执行过程中出错:make: *** No rule to make target ` ‘, needed by xxx. Stop(转载)

    转自: http://www.crifan.com/makefile_error_make_no_rule_to_make_target_needed_by_stop/ [问题] 有个已有的Makef ...

  5. 怎么写makefile?(转)

    跟我一起写 Makefile 陈皓 第一章.概述 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 pr ...

  6. 跟我一起写 Makefile

    转自 陈皓 的博客:http://blog.csdn.net/haoel/article/details/2886 1. 概述 2. 关于程序的编译和链接 3. Makefile 介绍 4. Make ...

  7. 【转载】Linux下makefile详解--跟我一起写 Makefile

    概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ...

  8. 用python写makefile

    温馨提示:阅读本文的同学最好能了解makefile和python的编写规则. 不懂的同学能够先保存在收藏夹.以便日后查看. 事实上之前我一直非常懒,我不想了解makefile规则.由于在linux下开 ...

  9. 【转】[精华] 跟我一起写 Makefile

    陈皓 概述  —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,m ...

随机推荐

  1. 【MVC】Spring MVC常用配置

    一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--conf ...

  2. hihoCoder week16 RMQ-ST算法

    RMQ问题 用的st表吧,读入数据挺多的,输出数据也挺多的 我还用了 cout<<endl;  T了.. 真的是 做题不带脑子的 #include <bits/stdc++.h> ...

  3. .net Core 依赖注入 Add********说明

    AddTransient瞬时模式:每次请求,都获取一个新的实例.即使同一个请求获取多次也会是不同的实例 AddScoped:每次请求,都获取一个新的实例.同一个请求获取多次会得到相同的实例 AddSi ...

  4. (zhuan) Notes on Representation Learning

    this blog from: https://opendatascience.com/blog/notes-on-representation-learning-1/   Notes on Repr ...

  5. 【AT1219】历史研究

    Problem Description \(IOI\)国历史研究的第一人--\(JOI\)教授,最近获得了一份被认为是古代\(IOI\)国的住民写下的日记.\(JOI\)教授为了通过这份日记来研究古代 ...

  6. MVC杂记

    @{ Layout = “…”} To define layout page Equivalent to asp.NET master-page 要定义相当于ASP.Net母版页的页面布局 @mode ...

  7. 【BZOJ】1187: [HNOI2007]神奇游乐园

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1187 每个格子都具有权值,求任意一个回路使得路径上的权值和最大. 裸的插头DP,注意一下几 ...

  8. Python 循环与定义函数

    break for i in range(10): if i == 2: break print i 0 1 continue for i in range(10): if i == 2: conti ...

  9. STL_头文件

    #include <string> #include <vector> #include <deque> #include <queue> #inclu ...

  10. 在nodejs中的集成虹软人脸识别

    ==虹软官网地址==http://www.arcsoft.com.cn 在官网注册账号,并且申请人脸识别激活码, 选择SDK版本和运行系统(windows/linux/android/ios) ,我们 ...